Jmeter--控制器--详解

Posted 清安无别事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter--控制器--详解相关的知识,希望对你有一定的参考价值。

        这里是清安,欢迎你阅读本章内容,有需要可以加博主V:qing_an_an一起交流。

        本篇会详解jmeter的常用的控制器内容,了解它们的具体作用。

目录

正则表达式

事务控制器

循环控制器

仅一次控制器

吞吐量控制器


        首先,项目地址:免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量

        需要自己注册,免费适用接口,学习够了。在下文中注意appid&appsecret,这两者自己注册后系统会给到。接下来正文:

正则表达式

        这个相信大家比较熟悉了,不管写代码还是用工具,多多少少都会接触到一些,本篇首先就来说说这个:线程组》》添加》》后置处理器》》正则表达式提取

        值得注意的是,这里只是告诉你添加到路径,在不同需要的地方添加正则提取器方法大同小异。

        我们先添加一个HTTP请求:

        再添加一个查看结果树,以及聚合报告。提前先全部加上。请求看看结果:

         你们输出是unicode的编码的,所以这里可以通过一些转码直接转成,或者直接搜搜Unicode转码,复制进去转码即可。这里我用了其他的方法。

        jmeter中找到这个文件,把这里修改了,然后在HTTP请求中添加一个BeanShell 监听器即可。监听器中我们复制如下代码进去再次请求就是中文了:

String s=new String(prev.getResponseData(),"UTF-8");
        char aChar;
        int len= s.length();
        StringBuffer outBuffer=new StringBuffer(len);
        for(int x =0; x <len;)
            aChar= s.charAt(x++);
            if(aChar=='\\\\')
                aChar= s.charAt(x++);
                if(aChar=='u')
                    int value =0;
                    for(int i=0;i<4;i++)
                        aChar= s.charAt(x++);
                        switch(aChar)
                            case'0':
                            case'1':
                            case'2':
                            case'3':
                            case'4':
                            case'5':
                            case'6':
                            case'7':
                            case'8':
                            case'9':
                                value=(value <<4)+aChar-'0';
                                break;
                            case'a':
                            case'b':
                            case'c':
                            case'd':
                            case'e':
                            case'f':
                                value=(value <<4)+10+aChar-'a';
                                break;
                            case'A':
                            case'B':
                            case'C':
                            case'D':
                            case'E':
                            case'F':
                                value=(value <<4)+10+aChar-'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\\\uxxxx  encoding.");
                    outBuffer.append((char) value);else
                    if(aChar=='t')
                        aChar='\\t';
                    else if(aChar=='r')
                    aChar='\\r';
                    else if(aChar=='n')
                    aChar='\\n';
                    else if(aChar=='f')
                    aChar='\\f';
                    outBuffer.append(aChar);else
                outBuffer.append(aChar);
prev.setResponseData(outBuffer.toString());

        废话就到这,接下来我们提取其中的city对应的值:线程组》》添加》》后置处理器》》正则表达式提取

        根据你的请求来,这里值得注意的是正则表达会根据你响应的内容不同而提取不到内容,这里指定提取city对应的值深圳。各有用处,如果你想根据不同的响应内容提取不同的城市请查阅本篇:Jmeter--【作为测试你必须知道】高级应用--断言、变量的使用+报告输出_清欢无别事-CSDN博客_jmeter断言中使用变量

        这里在正则在接下的讲解中会起到一定的作用。正则解析:

        ():括起来的部分就是要提取的。

  .:匹配任何字符串。

  +:一次或多次。

  ?:不要太贪婪,在找到第一个匹配项后停止。

        而我此处的city之前的值就是告诉它去这个指定的值往后的值,直到,结束,这期间取到的值就是“深圳”了。

        模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给token。如:$1$表示解析到的第1个值。

        匹配数字:0代表随机取值,1代表全部取值,通常情况下填0

        那么问题来了我怎么看到提取的值呢,我们有一个Java请求可以帮到我们:线程组》》添加》》取样器》》Java请求

         这里的$写法是固定的,里面写入我们的引用名称即可。这样跑一次就能得到我们的提取值

事务控制器

        什么是事务控制器,将一系列的事务统计起来为一个事务进行展示,说起来有点抽象,上操作你就明白了。线程组》》添加》》逻辑控制》》事务控制器

        这里有两个选项,Include duration of timer and pre-post processors in generated sample在一般情况下不勾选。勾选后,在生成的样本中包括计时器,预处理和后处理延迟,会把额外的时间算进来,增加干扰。

        先不勾选第一项,我们看看聚合报告:

         这里会把各项事务都计入其中,后续接口的过程中,事务多起来就不好看数据了,所以我们勾选Generate parent sample:

         这里名称不一样是因为我更改了名称。这里看是不是就是展示了一个事务呢还是非常方便的。

循环控制器

        可以看到线程组里面其实是有循环的,但是这个循环是一个大循环,我们的循环控制器是一个小循环,可以单独设置循环次数。这里循环次数我设置了5次,截图就没有放出来了。线程组》》添加》》逻辑控制》》循环控制器

        这里我新增一个请求,查看上海的空气质量,看看聚合报告:

         这里小妙招就是你可以把事务控制器放入循环中。这个具体用途看场景。

仅一次控制器

        通常用来存放登录的事务。登录一次后即可操作系统。而不用每次都要登录。这个就看各位脑洞了,在里面添加json提取器啥的结合循环控制室,事务控制器使用。线程组》》添加》》逻辑控制》》仅一性控制器

        我将线程组中的循环设置成5次,线程数设置成1。将另外两个控制器禁用,这里看个人好吧,也可不禁用。

         实际上它只会跑一次,所以叫仅一次。这里不妨可以想想,是不是可以提取值出来用于下一次的登录什么的使用,下一篇会讲到,参数化。

吞吐量控制器

        吞吐量控制器可按照比例和数量进行分配,混合压测的时候便于进一步控制比例。看看实例。线程组》》添加》》逻辑控制》》吞吐量控制器

        同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现.

        这里添加了两个吞吐量控制器,线程组》》10个线程数,循环5次,也就是50次,准备时长不变为1S。两个吞吐量控制器比例是60:40,换算也就是3:2。

         这里还是可以看到的,样本比这里的比例是30:20,也就是3:2。

         这里有两个选项。可以看到:

        Total Executions:执行数量

        percent Executions:执行百分比(1-100%)

        这两者都是可以选择的。

        本篇完,你学会了吗?

以上是关于Jmeter--控制器--详解的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter组件之-Test Fragment(测试片段)

JMeter:逻辑控制器_模块控制器(Module Controller)

JMeter接口测试-Include控制器

无法将特定步骤保存为测试片段

Jmeter —— Test Fragment

Jmeter - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)