Jmeter之参数化
一、参数化
1、指定参数值
这种方法常用来解决线程组中多个请求共用相同的数据,比如我们所有请求都可能有相同的IP地址,当地址改变时可以一改全改。
添加用户定义的变量,右击线程组->添加->配置元件->用户定义的变量;
打开用户定义的变量,添加变量,写好名称和值
脚本中用到该值的所有地方都可以引用这个变量名了,引用变量的格式为 ${变量名}
另外,也可以在Test Plan(测试计划)中进行参数设置,这里设置的参数为全局变量,所有请求都可以使用这里配置的参数,如下图:
使用方法和上面一样,在请求中用${ip}和${port}替代对应的值
2、借助函数生成参数
测试过程中,有时候数据不适合被指定,可选择借助函数来生成,以下是最常用的几种:
(1)用函数生成随机数:(__Random)
在Jmeter中点击 选项->函数助手对话框
在弹出的对话框中选__Random,填写随机数的范围,点击生成按钮,就看到你需要的字符串了
尝试在请求中使用生成的随机数,把刚拷贝的字符串粘贴到请求的参数里
发送请求,查看请求中参数值的情况,参数生效了
(2)用函数生成当前时间:(__time)
(3)用函数生成通用的唯一识别码:(__UUID)
3、文件传参
用于读取在文件中维护的参数,如参数文件内容如下:
注意,Jmeter读取文件总的参数是从第一行就开始了的,千万不要犯下面的错误:
在Jmeter中右击线程组->添加->配置元件->CSV Data Set Config
打开设置窗口,写入参数文件的全名(含绝对路径),变量名,Delimiter就用默认的逗号,表示在准备参数文件时参数表的列之间用逗号隔开
在请求中引用参数时应该是这样的:${username} ${pwd},用它们来顶替对应的参数值
Filename:参数文件的全路径
File encoding:文件编码,一般可以不填
Variable Names:参数名称,可以填多个,用Delimiter中定义的分隔符隔开就可以
Delimiter:分隔符,“/t”代表tab键,这里一般默认用逗号
Allow quoted data:是否去掉参数文件中值所带的引号(选择True,“test”读出来就变成了test,选择False,“test”读出来还是“test”)
Recycle on EOF:参数文件中的值是否循环取值(如果文件中有4个值,有6个线程,这里选择True的话,第5个线程循环取到第一个值,第6个线程循环取到第二个值,如果选择False的话,第5个线程和第6个线程取不到值)
Stop thread on EOF:参数文件中的值取完是否停止运行(如果文件中有4个值,有6个线程,这里选择True的话,第4个线程运行完就停止运行,如果选择False的话,第5个线程和第6个线程还会继续运行,取值策略根据Recycle on EOF来取值)
Sharing mode:线程共享模式,有3个选项,所有线程(All threads)、当前线程组(current threads group)、当前线程(current threads),默认选择当前线程。这里选择不同的模式,根据线程组中设置的线程数、循环次数以及循环控制器中设置的循环次数,取值的策略不一样。具体怎么不一样,需要大家亲自去操作。
4、用户参数
用户参数与文件参数类似,一个参数可以设置多个值,需要添加一个用户参数,具体操作如下:
右键添加->前置处理器->用户参数
在用户参数中填入参数名称和参数值,可以添加多个参数,每个参数可以使用多个值
取值策略:线程组和循环控制器中的循环次数设置为多次时,每次循环都取第一个值,线程组当中的线程数设置为多个时,则会循环取数
在请求中引用参数时应该是这样的:${name} ${passwd},用它们来顶替对应的参数值
5、关联传参
在线程组内,当你想用一个请求的响应结果作为另一个请求的入参时就需要用到关联
(1)用正则表达式关联
思路是先从某个请求的响应数据中提取你需要的值,在把这个值在另一个请求中入参,操作如下:
在需要被提取响应数据的请求下添加正则表达式提取器,右击添加->后置处理器->正则表达式提取器
在正则表达式提取器中填写 引用名称,不说也知道用途;正则表达式,最简单的办法是在响应数据中把要提取的目标值左右若干字符包含目标值的一行拷贝出来,粘贴到正则表达式框内,在把目标值用一对小括号替换,括号里用添上合适的匹配符本例如(.*); 注意在响应数据中拷贝时尽量避开需要转义的字符如果不能避开,请转义;模板通常固定填$1$;匹配数字1代表区匹配的第一个值;缺省值是在匹配失败时取得的值,通常用来检查匹配是否成功。
用${age}入参给另一个请求,查看结果传参成功
(2)用Json Path Extractor 插件关联
只针对Json格式的Response 取值,右击请求添加->后置处理器->JSON Path Extractor
在JSON Path Extractor中填入引用名和JSONPath Expression
在另一个请求中入参,也和上面的结果一样转参成功
注意,JSON Path Extractor这个插件只能在Jmeter3.x以上的版本安装