0

JMETER与它的组件们 - yetangjian

 1 year ago
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提取器,同时配合自带的调试器来进行调试。

2393705-20221023150054888-707517966.png

 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

效果展示

2393705-20221023153729498-808262035.png

 

2393705-20221023153814650-565259346.png
2393705-20221023171503596-134150955.png

 然后我们设置不同的线程和循环次数来看看效果

设置线程1,循环3

2393705-20221023172008902-2127847324.png

 设置线程2,循环3

2393705-20221023172052933-189561318.png

 设置线程2,循环3,勾选上方计数器中的与每用户独立的跟踪计数器

2393705-20221023172154386-1399921592.png

  设置线程2,循环3,勾选上方计数器中的与每用户独立的跟踪计数器 和 在每个线程组迭代上重置计数器

2393705-20221023172249754-1635011463.png

 while逻辑控制器、循环控制器、if逻辑控制器和测试活动

这两个我们放在一起,假设我们需要去判断循环的次数大于5就自动跳出循环

while控制器

2393705-20221023173156442-1408309962.png

 填入 ${__jexl3("${num}" != "5",)}

2393705-20221023173747733-609111471.png

 循环五次后退出,这里需要注意的是while条件中一般只会使用javaScript或者jexl3(这两个都是在函数助手中查看,辅助编写)

循环控制器+if控制器

2393705-20221023174122770-2087940634.png

 勾选上永远,这样就会一直循环(这里勾选上只要是为了和上面while控制器模拟同一个场景,一般不会勾选永远,下面在做if判断,这样太麻烦了)

我们在for循环下面增加if控制器去判断是否满足我们需要的条件,if下面增加一个动作控制器,如果满足if条件就Break,跳出循环

if条件填入 ${__jexl3("${num}" == "5",)}

2393705-20221023174516023-925967058.png

这样就达到和while相同的效果了

 2393705-20221023174939853-679218173.png

2393705-20221030191348006-354850554.png

 汉化过后断言就很好理解,这里讲一下模式匹配规则:

包括(contains):包含指定的某个或多个字符串,支持正则表达式

匹配(match):完全匹配指定的字符串,判断为成功,支持正则表达式

相等(equals):响应需要完全匹配指定的字符串,不支持正则

字符串(Substring):响应中需要包含指定字符串,不支持正则

否(Not) 和 或者(or):就是对上述判断做的逻辑运算

在配置元件中有个随机变量简单好用

2393705-20221030204747738-1984013629.png

 

2393705-20221030204802834-790489158.png

HTTP镜像服务器

可以理解做了一个挡板,把我们自己当做服务器,把我们自己收到的请求原封不动的显示出来,方便调试请求

2393705-20221030205738757-1686627768.png

 2393705-20221030210225885-313889026.png

 设置好服务器记得点击启动

2393705-20221030210337289-1555960510.png

 

2393705-20221030210353717-1200538309.png

 这时候请求的数据就会全部显示在你面前了

JDBC链接数据库

链接数据库我们需要一个链接数据的jar包:https://downloads.mysql.com/archives/c-j/

2393705-20221031215630909-1191759257.png

 步骤

1 测试计划中添加上方下载的jar包

2 添加一个线程组 添加一个jdbc链接配置器
2393705-20221031215804207-535811520.png
DataBase URL:库名+?+ useUnicode=true&characterEncoding=utf8,加入后缀防止乱码
3 取样器中添加一个jdbc request
2393705-20221031220000161-424852189.png

 4把需要取得值放入变量

2393705-20221031220638879-565050405.png

2393705-20221031220648619-217476807.png
value=vars.getobject("resultserial_nos").get(8).get("serial_number");
vars.put(serial_number,value);

 

2393705-20221031221455234-1034374013.png

 同步定时器

2393705-20221031222516923-1316615491.png

 同步定时器设置了集合点,达到并发的作用

说到并发绕不开的就是并行:并发其实就是任务切换,而并行就是多个进程同时进行,Jmeter也提供了并发插件这里不做赘述,有兴趣的可以去插件管理内自己下载:Parallel Controller

事务控制器

我们需要去测试几个接口的混合场景下的性能,就需要把几个接口放到一个事务中

2393705-20221031224015270-1638709267.png

 2393705-20221031224333106-2060014534.png

 

2393705-20221031224921452-1221676110.png

stepping Thread Group + jp@gc - Transactions per Second + jp@gc - Response Times Over Time

线程组中有个stepping thread group可以帮助我们不断加压增加线程组数量来查看不同压力下的tps

2393705-20221031225425815-387573956.png

 

2393705-20221031233431185-2124665797.png

 安装插件: jpgc - Standard Set这里有jp@gc - Transactions per Second可以用这个查看每秒事务处理

纵坐标为TPS横坐标为时间

2393705-20221031233859003-466595218.png

纵坐标为请求响应时间

 

2393705-20221031233920623-1064008617.png

友情链接

selenium结合jmeter进行测试


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK