JMETER与它的组件们 - yetangjian
source link: https://www.cnblogs.com/yetangjian/p/16818697.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
JMETER与它的组件们
JSON提取器与Debug Sampler
我们平时会遇到很多JSON格式的接口返回,我们需要提取参数可以用JSON提取器,同时配合自带的调试器来进行调试。
JSON提取器
Name of created variables:提取的值存放的变量名称
JSON Path expression:表达式,就是刚在在结果树中验证的表达式,可以同时使用多个表达式,用分号隔开
Match No:0 随机 1第一个 -1所有
Compute concatenation var:如果匹配所有时,就将所有值存入变量名_ALL 中
Default Value:提取不到值时默认值
我们使用Dummy sampler来mock一个返回(这里不会可以上一篇)
{ "topic":"mock_api", "data":{ "errormes":"", "response":[ { "name":"A", "age":18 }, { "name":"B", "age":30 } ] } }
现在我们来提取age这个字段,这里会分享不同的方法来取值
第一种:一层一层从上至下取age=18这个值
//每一层就是一个".",因为response是个列表,我们去索引为0 $.data.response[ 0 ].age |
第二种:有条件的筛选name=A的age,使用表达式:[?(@.key == value)]
//$..直接去找response字段,根据表达式去找name是A的age $..response[?(@.name=="A")].age
第三种:直接根据表达式找,并且可以一次性提取多层多变量
// Result[0]={"name":"A","age":18} $..[?(@.name=="A")].["age","name"] // Result[0]=18 $..[?(@.name=="A")].age
效果展示
然后我们设置不同的线程和循环次数来看看效果
设置线程1,循环3
设置线程2,循环3
设置线程2,循环3,勾选上方计数器中的与每用户独立的跟踪计数器
设置线程2,循环3,勾选上方计数器中的与每用户独立的跟踪计数器 和 在每个线程组迭代上重置计数器
while逻辑控制器、循环控制器、if逻辑控制器和测试活动
这两个我们放在一起,假设我们需要去判断循环的次数大于5就自动跳出循环
while控制器
填入 ${__jexl3("${num}" != "5",)}
循环五次后退出,这里需要注意的是while条件中一般只会使用javaScript或者jexl3(这两个都是在函数助手中查看,辅助编写)
循环控制器+if控制器
勾选上永远,这样就会一直循环(这里勾选上只要是为了和上面while控制器模拟同一个场景,一般不会勾选永远,下面在做if判断,这样太麻烦了)
我们在for循环下面增加if控制器去判断是否满足我们需要的条件,if下面增加一个动作控制器,如果满足if条件就Break,跳出循环
if条件填入 ${__jexl3("${num}" == "5",)}
这样就达到和while相同的效果了
汉化过后断言就很好理解,这里讲一下模式匹配规则:
包括(contains):包含指定的某个或多个字符串,支持正则表达式
匹配(match):完全匹配指定的字符串,判断为成功,支持正则表达式
相等(equals):响应需要完全匹配指定的字符串,不支持正则
字符串(Substring):响应中需要包含指定字符串,不支持正则
否(Not) 和 或者(or):就是对上述判断做的逻辑运算
在配置元件中有个随机变量简单好用
HTTP镜像服务器
可以理解做了一个挡板,把我们自己当做服务器,把我们自己收到的请求原封不动的显示出来,方便调试请求
设置好服务器记得点击启动
这时候请求的数据就会全部显示在你面前了
JDBC链接数据库
链接数据库我们需要一个链接数据的jar包:https://downloads.mysql.com/archives/c-j/
步骤
1 测试计划中添加上方下载的jar包
4把需要取得值放入变量
value=vars.getobject( "resultserial_nos" ).get( 8 ).get( "serial_number" ); vars.put(serial_number,value); |
同步定时器
同步定时器设置了集合点,达到并发的作用
说到并发绕不开的就是并行:并发其实就是任务切换,而并行就是多个进程同时进行,Jmeter也提供了并发插件这里不做赘述,有兴趣的可以去插件管理内自己下载:Parallel Controller
事务控制器
我们需要去测试几个接口的混合场景下的性能,就需要把几个接口放到一个事务中
stepping Thread Group + jp@gc - Transactions per Second + jp@gc - Response Times Over Time
线程组中有个stepping thread group可以帮助我们不断加压增加线程组数量来查看不同压力下的tps
安装插件: jpgc - Standard Set这里有jp@gc - Transactions per Second可以用这个查看每秒事务处理
纵坐标为TPS横坐标为时间
纵坐标为请求响应时间
友情链接
selenium结合jmeter进行测试
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK