美文网首页自动化测试之路自动化测试
Jmeter工具使用--逻辑控制器Controller

Jmeter工具使用--逻辑控制器Controller

作者: orange_ade | 来源:发表于2021-03-02 16:36 被阅读0次
一、Sampler Controller(简单控制器)

作用:不会改变元件的运行顺序,无实质性的作用,主要用来归类和区分一些事务。比如登录、退出等。

Xnip2021-03-01_17-23-36.jpg
二、Once Only Controller(仅一次控制器)

作用:它下面的元件只会运行一次。即使Once only Controller是在循环控制器下面,也只会运行一次。

(1) Xnip2021-03-01_18-01-51.jpg Xnip2021-03-01_18-03-11.jpg (2) Xnip2021-03-02_13-23-55.jpg Xnip2021-03-02_13-25-39.jpg
三、Loop Controller(循环控制器)

作用:功能扩展性不强,只能配置为无限循环和具体循环次数,主要用于测试接口重复调用的情况(后端接口有做重复调用校验的,就可以通过这种方式来验证了。)。

Xnip2021-03-02_14-12-29.jpg Xnip2021-03-02_14-14-58.jpg
四、ForEach Controller(循环控制器)

①通过在测试计划中定义多个变量,通过ForEach遍历;定义变量时遵循规则,一组变量的前缀一致;
②通过正则表达式提取器提取出多个值时,可通过ForEach遍历后取到想要的值;
③通过请求数据库,返回结果会以变量名_N进行存储数据,N代表行,这样刚好符合ForEach的输入变量要求;
④通过Json提取器提取所有数据,返回的结果会以变量名_N存储,同样适用ForEach的变量输入要求;

  • Input Variable Prefix:输入变量前缀
  • Output variable name:输出变量名称
  • Start index for loop(exclusive):循环开始的索引(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
  • End index for loop(inclusive):循环结束的索引
  • Add””before number:输入变量名称中是否使用“”进行间隔。
Xnip2021-03-02_14-24-01.jpg

定义一组全局变量,供ForEach Controller调用:

Xnip2021-03-02_14-31-39.jpg Xnip2021-03-02_14-34-51.jpg
五、Transaction Controller(事物控制器)
  • Generate Parent Sample:如果选中,事务控制器将作为其他取样器的父级样本,否则事务控制器仅作为独立的样本
  • Include duration of timer and pre-post processors in generated sample:是否在生成的样本中包括计时器,预处理和后处理的延迟时间

如果是一个很长的业务流程,最好还是要加上事物控制器,多个操作,放在一个事物控制器里面,这样方便脚本的编写,不用勾选 【Generate parent sample】

Xnip2021-03-02_15-29-27.jpg Xnip2021-03-02_15-31-08.jpg Xnip2021-03-02_15-34-25.jpg

如果对于多个接口的测试,有依赖相互关联,或者是要测某一个连贯业务操作的性能情况,可以添加事物控制器,并且勾选 【Generate parent sample】

Xnip2021-03-02_15-35-17.jpg Xnip2021-03-02_15-56-31.jpg

不勾选:Include duration of timer...,不将定时器时间统计在内

Xnip2021-03-02_15-34-25.jpg

勾选:Include duration of timer...,将定时器时间统计在内

Xnip2021-03-02_16-03-54.jpg
六、If Controller(条件控制器)

Expression (must evaluate to true or false) :表达式(值必须是true或false)
Interpret Condition as Variable Expression?:将条件解释为变量表达式,此项默认勾选
Evaluate for all children?:条件作用与每个子节点,默认不勾选,仅在If Controller入口处判断一次
输入框中不能直接填写判断条件的表达式,需要将利用__jexl3函数或__groovy函数将条件表达式求值计算为true/false才有效

步骤描述:添加自定义的变量值,利用ForEach Controller进行读取此变量值,然后将读取的变量值保存到设定的变量中;当变量取值符合IF Controller中设定的条件时,则执行其下的业务请求并监控

  • Add-->Config Element-->User Defined Variables
Xnip2021-03-02_16-27-26.jpg
  • Add-->Logic Controller-->ForEach Controller
Xnip2021-03-02_16-28-05.jpg
  • 在ForEach Controller下添加HTTP Request001,请求中配置引用读取的参数
Xnip2021-03-02_16-29-20.jpg

输入框中表示ForEach Controller中读取的变量值为"002"时,才会执行IF Controller之下的请求

Xnip2021-03-02_16-31-42.jpg Xnip2021-03-02_16-35-52.jpg
我们还可以通过If Controller来实现混合场景压力测试业务占比:
(1)新增一个线程组并设置线程数及运行时间,40个线程组持续请求持续10秒。 Xnip2021-03-03_11-16-23.jpg (2)新增随机变量,设置随机范围0~100,后续通过随机变量在if控制器中配置接口业务占比。 Xnip2021-03-03_11-08-39.jpg

(3)新增3个如果(if)控制器,并设置接口业务占比,表达式支持KaTeX parse error: Expected group after '' at position 2: {__jexl3({num}>=1&&${num}<=50,)}。
表达式支持:

==   是否等于,如${ __jexl3(${VAR}==1,)},判断${VAR}变量是否等于1
!=  不等于,如${__jexl3(${VAR}!=1,)},判断${VAR}变量是否不等于1
!  非,如${__jexl3(!(${VAR}!=1),)}对${VAR}!=1的结果取反
&&或||  且与或,如  ${__jexl3(${VAR}==1 && ${name} != "heima",)}
> 或者>==   大于等于,如${__jexl3(${count}>=10,)}
Xnip2021-03-03_16-16-38.jpg Xnip2021-03-03_16-24-36.jpg Xnip2021-03-03_16-25-21.jpg (4)新增聚合报告查看执行结果,接口001,接口002,接口003请求比例大约是5:3:2 Xnip2021-03-03_16-26-13.jpg

相关文章

网友评论

    本文标题:Jmeter工具使用--逻辑控制器Controller

    本文链接:https://www.haomeiwen.com/subject/zdbafltx.html