Jmeter组件参数化
5.1. 参数化是什么
动态的获取并设置数据
5.2. 为什么使用参数化
执行批量操作,批量添加批量删除,人工效率太低运用程序代替人工获取并设置数据,安全高效比如:对被测系统的用户名和密码进行参数化,来模拟多个用户同时登录系统
5.3. 参数化实现之用户自定义变量
通过这个功能,能实现多接口共享数据,修改一条即可修改全部
image.png
image.png
image.png
image.png
Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名
File encoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8
Variable Names:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。如不填写,文件的第一行数据将被读取为变量名
Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键(\t)来区分列与列
Allow quote data:选项选为“true”的时候对全角字符的处理出现乱码
Recycle on EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为,可通过设置jmeter属性csvdataset.eofstring来改变该值。
Stop thread on EOF:Recycle on EOF设置为False,Stop thread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。
Sharing mode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开
相同的部分使用用户自定义变量
只需要修改一次接口
效果展示
5.4. 参数化实现之CSV Data Set Config
添加CSV Data Set Config:
image.png
添加界面:
image.png
通过这个组件可以动态获取并设置数据,实现批量添加操作
名词解释:
Filename:所需数据文件的路径。如和脚本同一路径,可直接填写文件名Fileencoding:编码和文件保持一致即可,默认为ANSI。如有中文,建议为UTF-8VariableNames:引用变量时的变量名,对应数据文件中的每一列,以逗号分隔。Delimiter:在.txt、.dat文件中,可以用逗号(,)或者Tab键(\t)来区分列与列Allowquote data:选项选为“true”的时候对全角字符的处理出现乱码Recycleon EOF:到数据文件结尾时是否循环读取。设置为True时,线程数过多,数据文件读取到最后一行时,会再次从第一行开始读取。设置为False,到达文件结尾时如继续读取,则值会默认为<EOF>,可通过设置jmeter属性csvdataset.eofstring来改变该值。Stopthread on EOF:Recycleon EOF设置为False,Stopthread on EOF设置为True,则读取数据文件最后一行后,停止测试,不管还有多少线程组未执行。Sharingmode:共享模式。默认在所有线程组中使用,可选择每个线程组单独打开
添加引用文件:
image.png
引用:
在jmeter中添加
image.png
image.png
线程数改为某个值
查看结果树:
image.png
其他:
线程组线程数改为大于文件中数据的处理:
遇到结束符在循环
遇到结束符停止线程
如果数据来自数据库
数据库导出txt文件
5.5. 使用Jmeter函数助手(文件中不要出现中文):
1、点击 选项-->函数助手 调出函数助手对话框2、选择 _CSVRead 函数(下图第一个框)3、函数参数:1)第一个参数:填写文件路径。2)第二个参数:文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推,然后点击【生成】按钮,则会自动生成我们需要的参数化函数。3)复制生成的参数化函数,copy过程需要使用的地方即可。4)_Random函数是从某数据段随机读取数据替换参数,当需要添加多条数据记录且某些字段需要唯一性时使用。
image.png
image.png
image.png
六. Jmeter正则表达式提取
6.1. 使用正则提取
运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式提取的相关设置
image.png
image.png
说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。(2)正则表达式:():括起来的部分就是要提取的。.:匹配任何字符串。+:一次或多次。?:不要太贪婪,在找到第一个匹配项后停止。(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
案例:api接口
image.png
image.png