个人学习笔记(整理不易,有帮助点个赞)
笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客
目录
一:参数化方法
1)用户定义的变量
2)函数助手
3)从文件中读取((可以格式是.csv或txt))
4)用户参数
二:jp@gc - Dummy Sampler
三:Jmeter关联
1)使用正则表达式实现接口关联
2)使用Jsonpath表达式实现接口关联(只能作用于返回值是Json的)
3)XPath提取器
4)json path extractor
5)beanshell后置处理器
6)跨线程组关联
脚本在运行时,根据需要选取不同的参数值作为输入,该方式称为数据驱动测试(Data Driven Test),而参数的取值范围被称为数据池(Data Pool)
配置元件-用户定义的变量
常用于设置一些全局变量,适用于测试计划中不需要随迭代发生改变的参数(只取一次值的参数),比如URL,host,port等
函数助手自带丰富的函数,
比如随机函数,${_Random(100,999,)}
如果生成的随机数要被多处引用,可以这样
Jmeter在执行内置函数后,会将结果保存到到全局变量中
比如“CSVRead"函数,用来读取外部的CSV文件
在D盘创建一个data.csv
文件,注意以逗号分隔
ps:数据需求多的话,直接数据库查,导出去用即可
设置三个线程数(三个用户)
ps:__CSVRead
函数规定每个线程都只读取一行数据。如果设置4个线程数,则第四个线程又会读取第一行,循环的
"CSV数据文件设置"这个元件对__CSVRead
函数做了一定的扩展,使其更加的灵活
本质是一个取样器,可以自己模拟请求与返回,类似mock服务(可以设置响应吗,响应信息,延迟时间(latency),响应时间,模仿响应时间,请求数据,响应数据,当服务器还没开发完成的时候,帮助调试脚本)
下载plugins-manager.jar包:Install :: JMeter-Plugins.org
把它放到jmeter安装的lib/ext目录下,然后重新启动jmeter
但是我这里不知道为毛线没有,搜索一下dum,发现这里也有能安装的,版本低了点,将就一下
点击线程组–>取样器–>Dummy Sampler
如果响应数据中的中文乱码,在安装目录/bin中的jmeter.properties,增加或者修改:sampleresult.default.encoding=GBK
关联就是说两个或多个请求之间是有先后顺序的、有联系的。比如上一个请求的响应内容是下一个请求的参数
新建一个请求:http://www.weather.com.cn/data/sk/101010100.html
运行能看到结果
如果出现乱码,可以添加一个BeanShell后置处理程序,加上代码:prev.setDataEncoding("utf-8");
在查看结果树这里可以查看结果,也可以进行一些测试,比如正则表达式的测试:
其中:
()
:封装了待返回的字符串.
:匹配任意一个字符(除了回车键)*
:限定符,匹配(*之前的符号)0次或多次,默认是贪婪模式+
:限定符,匹配(+之前的符号)1次或多次,默认是贪婪模式?
:限定符,匹配0次或1次,在找到第一个匹配项后停止.*:
匹配连续0个/多个字符.+:
匹配连续1个/多个字符\
:转义,\.
表示匹配字符.本身
^:边界限定,字符串的开始位置
$:边界限定,字符串的结束位置
| :模式限定符,从中任选一个匹配
PS: 这个怎么理解,.是提取一个,但是使用了*或者+,那就会一直提取到最后一个字符串,?表示第一个匹配到第一个项就停止(也就是北京,然后有“,就停止了),所以如果不加?,则一直匹配到B为止
添加一个后置处理器:正则表达式提取器
其中:
$1$表示解析到的第1个值,$$是固定写法
匹配数字:0代表随机取值,1表示匹配返回数组的第一个元素内容
缺省值:如果参数没有取得到值,那默认给一个值让它取
如果是取2个值就这样
增加一个调试取样器,用于查看结果有没有取值到
看到能提取想要的值后,就能在下一个请求去使用了
1)从根目录开始找(绝对路径):$.weatherinfo.temp
2)从任意目录开始找(相对路径):$..city
创建一个Json提取器,填写的内容和正则表达式类似
如果请求返回的消息为xml或html格式的,可以用XPath提取器来提取需要的数据
APPly to:作用范围(返回内容的断言范围)
ML Parsing Options:要解析的XML参数
Return entire XPath fragment of text content:返回文本内容的整个XPath片段
0:表示随机
-1:表示提取所有结果(默认值),它们将被命名为<变量名>_N(其中N从1到结果的个数)
X:表示提取第X个结果。如果这个x大于匹配项的数量,则不返回任何内容。将使用默认值
json extractor的使用与json path extractor基本相同,语法上有差别
做http接口测试,返回的数据是json串,Jmeter不支持直接处理json串,如果要获取到返回结果中指定的值,必须要要通过正则表达式来获取到,正则表达式比较麻烦,json是通过key-value来存值,可以通过json path extractor的插件(Jmeter3自带)
这个json串,cityid在weatherinfo这个集合里面存着,那就要先取到weatherinfo里面的值,再取weatherinfo里面的第三个元素
下载fastjson包,并放到\lib\ext下,重启jmeter(我这自带了)
https://mvnrepository.com/artifact/com.alibaba/fastjson
这里省略
当有依赖关系的两个请求(一个请求的入参是另一个请求返回的数据),放入到不同的线程组中时,就不能使用提取器保存的变量来传递参数值,而是要使用Jmeter属性来传递。
jmeter属性配置方法
函数实现
__setProperty函数:将值保存成jmeter属性
__property函数:在其他线程组中使用的property函数读取属性
注:__setProperty函数需要通过BeanShell取样器来执行(BeanShell取样器作用:执行函数和Java脚本)
函数助手创建函数
设置读取变量