美文网首页自动化测试之路自动化测试
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