zoukankan      html  css  js  c++  java
  • Jmeter之JDBC请求参数化

    转Jmeter之JDBC请求参数化

      

    Jmeter之JDBC请求参数化

    在HTTPsample中,我们经常会使用参数化或者正则表达提取器(关联)使我们的请求参数转换为变量,以便更正确、多样的调试脚本。那么,同样是工作中经常用到的JDBC请求,它的参数化以及关联该怎么做呢?这篇文章给大家详细介绍JDBC请求的参数化。

    环境准备

    Jmeter(我使用的是3.1版本,最新版本为3.3,不影响本次演示)

    一个可连接数据库

    JDBC驱动

    OK,下面进入正文。

    A

    首先,我们在测试计划下,把JDBC驱动包添加上,也可以将驱动包放入jmeter的lib目录下,即可自动加载。

    B

    然后,新建一个线程组→JDBC Connection Configuration(连接数据库组件)→JDBC Request(JDBC请求)

    C

    接下来,配置JDBC Connection Configuration

    Ps 下面介绍比较重要的几个参数其他地方可照截图配置即可。

    Variable Name:连接名称,自定义填写。

    Validation Query验证查询,不同版本的填写格式可能不同(比如3.1是Select 1,2.6是Select1),格式错误会报错。最新的Jmeter3.3已经做成下拉框,比较人性化。

    Database URL:数据库url,格式固定。

    jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

    jdbc:mysql:// 表明连接的数据库是mysql

    ip 数据库服务器地址

    port mysql端口号

    dbname 数据库名称

    useUnicode=true 使用Unicode编码格式(字符集编码格式)

    characterEncoding=utf8 使用UTF-8解码(字符集编码格式)

    allowMultiQueries=true 允许多个query一起使用(1个请求中添加多个sql语句)

    D

    配置完毕,接下来填写JDBC请求

    Variable Name:与JDBC Connection Configuration中的Variable Name保持一致

    Query Type:语句类型,查询用select,增删改用update,一起用可以选择callable

    Query:填写对应的语句(这里用了一个简单的查询语句作为示例)

    E

    以上,我们JDBC请求已经完成,我们添加一个查看结果树,看看请求结果。

    JDBC请求响应正常。

    准备工作已经完成,接下来,开始我们今天的目标。

    将查询语句参数化

    1

    方法1:使用CSV元件,将语句对应的部分替换成CSV文件中内容(与http请求参数化方式一样)

     

    查询结果正常,参数取值正常。成功!

    2

    方法2:使用占位符,将替换语句中对应的部分。

    a:Query Type修改为Prepared Select Statement

    b:在where子句中将参数数值填写为?

    c :在下方的Parameter values中把值填上,多个参数用,分隔,数量与?保持一致(第一个值对应第一个?,以此类推)

    d:Parameter types填为varchar,多个参数用,分隔,数量与?保持一致(不管什么数据类型均填写为varchar)

    上图的查询语句最终为:

    select id,stuid,cname,grade from score where id = 10 or cname = 娃哈哈;

    我们来看一下结果

    查询结果正确。成功!

    注意:

    1、Parameter values只能用在where子句中,如果放在查询字段中的话,它会将该字段的结果全部替换为值本身,而不是数据库的查询结果。如下:

    查询结果如下,id没有正确获取,失败!

    2、Parameter values也可以使用变量噢,也就是CSV元件中定义变量后,可以在Parameter values中使用${}引用,这个大家自己尝试一下,在此不做演示。

    获取查询结果

    上面只是介绍了如何给JDBC请求做参数化,那么,如果我想获取JDBC的查询结果,类似于正则表达式提取器获取http请求返回值,该怎么做呢?

    由于查询返回的是一个结果集,以行列的形式呈现,所以,我们用通常的正则表达式提取是行不通的。但是,JDBC请求本身提供了这种功能,就是Query下方的Variable Name(与上方的连接名称不一样!!!)

    Variable N

    ame是按照查询结果列数取该列的所有值,多个参数以,分隔。我们以示例说明

    Variable Name设置如图,为方便查看,我们添加一个Debug PostProcessor。查看参数结果。

    下面是我们的查询结果

    查看Debug PostProcessor结果

    从Debug PostProcessor的结果来看,Variable Name中定义的test1,test2,test3,test4分别是查询结果中的第一、第二、第三、第四列所有的结果,test1_#则代表这一列结果的总数,也就是查询结果的总行数。如果要使用里面任意参数,直接${}引用就OK。

    如果只想获取某一列的查询结果,有2种方法。

    1

    方法1:直接修改sql,只查询需要的那一列,Variable Name中填写1个参数即可。

    2

    方法2:指定参数的列数,比如cname的查询结果中为第三列,那么在Variable Name中可以写成这样,表示第一、第二列都为空,第三列的结果保存为test参数。

    以上结果大家可以自己试验。

    OK。现在我们知道Variable Name会将某一列的结果保存为数组,并可以直接引用,那么,我们现在想获取这个数组的所有结果,也就是获取这个字段所有的值,该怎么操作呢?

    同样,有2种方法。

    1

    方法1:使用foreach控制器,因为Variable Name输出的是一个数组,那么就可以使用foreach控制器,将数组内的值全部取出来。

    运行一下,查看取值结果

    取值正常,成功!

    虽然,foreach能够取出所有的值,但是foreach控制器是发现如果还能够往下取值,它就会自动循环,而不进行迭代。这在大多数情况不符合我们的使用需求。

    2

    方法2:利用计数器,进行每次迭代的更替取值。下面进行演示。

    修改线程组设置,运行,查看取值结果

    取值正确,成功!

    使用计数器和JDBC的Variable Name配合,可以完成从数据库取值后,通过迭代来控制参数取值的目的。是不是觉得这种方式很熟悉?没错!其实咱们的CSV元件就是通过迭代来控制参数取值的。也就是说,使用上面这种方式,我们可以直接从数据库查到我们想要的数据,然后通过迭代来取值,从而省去了获取参数化文件和配置CSV元件的过程。

    虽然,使用JDBC和计数器的方式来实现参数化略显繁琐,但是因为是直接从数据库中取值,所以即使数据发生变化,也不用去修改脚本。也不存在CSV文件路径、编码格式以及数据准确性等等一系列的问题。并且,由于JDBC请求只是作为获取数据来源用的,所以使用仅一次控制器即可,对本身测试的影响并不大(查询数据不大的情况下)。

    以上,是本篇分享的所有内容,如有不合理之处,希望及时指出。

  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/rzln/p/8570480.html
Copyright © 2011-2022 走看看