用Jmeter测试时包含两种情况的参数:一种是在url中,一种是请求中需要发送的参数。
- URL中的参数,如:
http://blog.da-fang.com/index.php/2010/06/01/jmeter)参数/
,其中2010/06/01/jmeter参数
为url参数。请求中的参数,此处只能举例get请求,如:http://blog.da-fang.com/?category=Web
,其中category
是参数名,Web
是它的值。
对于post请求,用jmeter录制后,可以在请求的“同请求一起发送参数”和“同请求一起发送文件”中找到。参数化Jmeter脚本时,使用参数的地方书写格式为$对于URLhttp://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. 用户定义的变量:
- 添加“配置元件”->“用户定义的变量”
- “名称”中输入变量名称
此处以登录为例,定义两个变量
username
和password
。
“值”中可以直接输入值,也可以通过Jmeter的函数__CSVRead
,__StringFromFile
从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。当参数值是某个前缀加一个数字时,可以用前缀名加${__Random(,,)}
或$
的方法设置参数值。如进行登录测试之前,先准备了用户名为perf_0
到perf_1000
的用户,那么用户名就可以设为perf_{__Random(0,1000,)}
。当参数值没有规律的且量不太大时,可以通过${__CSVRead(,)}
,${__StringFromFile(,,,)}
从文件中读取,如将用户名和密码保存在user.csv文件中,user.csv的内容如下:oriana,123456admin,admindandan,123456因为user.csv文件中有两列数据,所以只能用${__CSVRead(,)}
函数,username
参数后的值设为${__CSVRead(user.csv,0)}
,password
参数后的值设为${__CSVRead(user.csv,1)}
。
3. 从csv文件中读取当参数的值 没有规律且量不太大时,可以用这种方法。具体做法如下:
- 创建一个csv文件,内容为参数的值集,每一个参数占一列,第一行就开始写参数值,不要写参数名
- 在测试计划或线程组中添加一个“配置元件”->“CSV Data Set Config”
- Filename中填写步骤2.1中csv文件的完整路径(当csv文件在bin目录下时,只需给出文件名即可)
- Virable Names中填写变量名,如果csv文件中有多个变量,则用逗号隔开
4. 从数据库中获取当参数的值没有规律且量比较大时,可以选用这种方法。具体做法如下:
- 下载MySQL JDBC>>
- 解压下载的zip包后,将其中的
mysql-connector-java-5.1.12-bin.jar
放到Jmeter的lib目录下 - 添加“配置元件”->
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:连接数据库的密码
- 添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,如下:
SELECT CONCAT("[",
GROUP_CONCAT(
CONCAT("{username:'",login,"'"),
CONCAT("{password:'",password),"'}"),"]") AS json FROM users
- 在4.4中的JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取3.4中的用户名和密码为例设置正则表达式提取器的参数:
引用名称:user
正则表达式:username:’(.+?)’{password:’(.+?)’
模板:$1$$2$使用时,user_g1即为用户名,user_g2即为对应用户名的密码;
更多正则表达式提取方法参见Jmeter正则表达式提取器
5. 用正则表达式从前面请求的响应数据中提取,具体操作见Jmeter正则表达式提取器