jmeter配置元件与前置处理器都可参数化,但有局限性。它的提供的函数助手中的一系列函数,也可生成相应的数据。当然,函数助手的功能不仅仅是做参数化,也可以进行运算、字符编码格式转换、获得运行时参数等。

函数助手中可根据其帮助文档,详细查看其用法。

 

一、参数化的4种方法

用Jmeter测试时包含两种情况的参数,一种是在url中,一种是请求中需要发送的参数。

1)URL中的参数,如:http://blog.da-fang.com/index.php/2010/06/01/jmeter参数/,其中“2010/06/01/jmeter参数”为url参数。

2)请求中的参数,此处只能举例get请求,如:http://blog.da-fang.com/?category=Web,其中“category”是参数名,“Web”是它的值。
    对于post请求,用jmeter录制后,可以在请求的“同请求一起发送参数”和“同请求一起发送文件”中找到。参数化Jmeter脚本时,使用参数的地方书写格式为$
对于URL“http://blog.da-fang.com/index.php /2010/06/01/jmeter参数/”,在Jmeter的 http请求中blog.da-fang.com填写在“服务器名称或IP”中;/index.php/$/填写在“路径”中。
对于请求中的参数http://blog.da-fang.com/?category=Web,在Jmeter的http请求中blog.da-fang.com填写在“服务器名称或IP”中;/填写在“路径”中;参数名称category填写在“同请求一起发送参数”的“名称”中,参数值$填写在对应的“值”中。

 

设置参数值的方法有如下几种:

  1. 用Jmeter中的函数获取参数值,__Random,__threadNum,__CSVRead,__StringFromFile等;
    具体调用方法如下:
    ${__Random(,,)},$,${__CSVRead(,)},${__StringFromFile(,,,)}。
    参看Jmeter函数的使用,通过菜单“选项”->“函数助手对话框”,即可在“函数助手”弹出框上找到Jmeter的函数。
    其 中${__Random(,,)}方法的第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量 名;${__CSVRead(,)}方法中第一个参数是文件名,第二个参数是文件中的列(列数从0开 始);${__StringFromFile(,,,)}方法中第一个参数是文件名,${__StringFromFile(,,,)}方法中没有指定读 取文件中的哪一列的参数,所以${__StringFromFile(,,,)}只能读取包含一列的文件。

 

2.用户定义的变量
   2.1 添加“配置元件”->“用户定义的变量”
   2.2 “名称”中输入变量名称,此处以登录为例,定义两个变量username和password。“值”中可以直接输入值,也可以通过Jmeter的函数 __CSVRead,__StringFromFile从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。
当参数值是某个前缀加一个数字时,可以用前缀名加${__Random(,,)}或$的方法设置参数值。如进行登录测试之前,先准备了用户名为perf_0到perf_1000的用户,那么用户名就可以设为perf_{__Random(0,1000,)}。
当参数值没有规律的且量不太大时,可以通过${__CSVRead(,)},${__StringFromFile(,,,)}从文件中读取,如将用户名和密码保存在user.csv文件中,user.csv的内容如下:
oriana,123456
admin,admin
dandan,123456
因为user.csv文件中有两列数据,所以只能用${__CSVRead(,)}函数,username参数后的值设为${__CSVRead(user.csv,0)},password参数后的值设为${__CSVRead(user.csv,1)}。

 

3. 从csv文件中读取
当参数的值没有规律且量不太大时,可以用这种方法。
具体做法如下:
    3.1 创建一个csv文件,内容为参数的值集,每一个参数占一列,第一行就开始写参数值,不要写参数名
    3.2 在测试计划或线程组中添加一个“配置元件”->“CSV Data Set Config”
    3.3 Filename中填写步骤2.1中csv文件的完整路径(当csv文件在bin目录下时,只需给出文件名即可)
    3.4 Virable Names中填写变量名,如果csv文件中有多个变量,则用逗号隔开

4.从数据库中获取
当参数的值没有规律且量比较大时,可以选用这种方法。
具体做法如下:
    4.1 下载MySQL JDBC “http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.12.zip/from/http://ftp.jaist.ac.jp/pub/mysql/”
    4.2 解压下载的zip包后,将其中的mysql-connector-java-5.1.12-bin.jar放到Jmeter的lib目录下
    4.3 添加“配置元件”->“JDBC Connection Configuration”,设置下列参数:
          Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink
          JDBC Driver class:com.mysql.jdbc.Driver
          username:连接数据库的用户名(如root)
          password:连接数据库的密码
    4.4 添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,如下:
          SELECT CONCAT (“[",
                GROUP_CONCAT(
                CONCAT("{username:'",login,"'"),
                CONCAT("{password:'",password),"'}"),"]“) AS json FROM users
    4.5 在4.4中的JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取3.4中的用户名和密码为例设置正则表达式提取器的参数:
          引用名称:user
          正则表达式:username:’(.+?)’\{password:’(.+?)’
          模板:$1$$2$
使用时,user_g1即为用户名,user_g2即为对应用户名的密码;更多正则表达式提取方法参见Jmeter正则表达式提取器

 

5.用正则表达式从前面请求的响应数据中提取,具体操作见Jmeter正则表达式提取器

 

 

 

 

案例

实例1:唯一ID

JMeter中如何构造一个唯一ID

 

实例2:如何实现对浮点数的参数化

${__Random(,,)}实现的是整数随机的。随机变量的配置元件,即使最小值设为0.01,最大值设为0.9,最终取值是0,向上取整。

方式之一:两个${__Random(,,)}中间加上字符. 就可以实现浮点数的随机生成,类似"volume":"${__Random(1,10)}.${__Random(1,999)}"

 

实例3:线程数和运行次数等参数

Jmeter的jmx文件保存了线程数和运行次数等参数,这个参数可以在命令行中传入参数的方式来修改数值

步骤如下

1、生成线程和运行次数的参数

  Jmeter选项中函数助手对话框,选中__P参数,这个参数是设置jmeter的属性值的,属性名称设置为para1  默认值设置为2,点击生成,就生成一个字符串,把这个字符串拷贝的线程数里面如下图,同样的方法设置para2,作为运行次数参数

jemet 设置请求入参多个 jmeterget请求参数化_正则表达式

jemet 设置请求入参多个 jmeterget请求参数化_mysql_02

2、保存jmx 文件

3、执行命令 jmeter -Jpara1=4 -Jpara2=5 -n -t thread_para3.jmx  传入2个属性值,能4*5 =20 能按设置的值执行

jemet 设置请求入参多个 jmeterget请求参数化_用户名_03

 备注:如果是分布式压测 -J+参数名就不行了,需要把-J 修改成-G才行