JMeter提供了不同种类的逻辑控制器,包括循环(Loop),简单(Simple),事务型(Transaction),模块(Module),随机(Random)等。对于刚接触JMeter不久的用户,甚至使用JMeter已有一段时间的朋友们来说,各类不同逻辑控制器自身的先后顺序,应用效果及其所控范围内取样器的执行顺序等都会造成你一定程度上的困惑不清。本次分享我们就JMeter中常见的逻辑控制器给大家来个大扫盲,驱散控制器的层层迷雾。
![3cb4f9d0b0bea7d6863a732c5e20be81.png](https://i-blog.csdnimg.cn/blog_migrate/a9704a2b8590ad61f5d46d2b58dc208e.jpeg)
【逻辑控制器】
JMeter中的逻辑控制器可以让我们自定义线程中的处理请求顺序,可以控制“何时”将用户请求发送到Web服务器。例如,我们可以使用随机控制器将HTTP请求不定时随机发送到服务器,来模拟更真实的某段时间内多并发的人为场景。
![6351d47e8dd16e87e474c8363e49107f.png](https://i-blog.csdnimg.cn/blog_migrate/b116d7e9bb2776a9ea450ac76ce7b8c8.png)
Jmeter常用的逻辑控制器
【常用逻辑控制器】
1.录制控制器 - Recording
JMeter可以记录用户的测试步骤,录制控制器是一个占位符,用于存储录制下的所有步骤(一系列用户操作活动)。
![45931858c3fce6f647ad0be771dc493c.png](https://i-blog.csdnimg.cn/blog_migrate/520e43e258590f4413d7bdf0bd250b9f.jpeg)
2.简单控制器 - Simple
简单控制器只是一个用户请求的容器,可以简单理解为一个文件夹,用来分组,没有其他特殊功能,他的主要应用在于可以被模块控制器所引用。
![8be16583e4ecebb42be1381556e82b23.png](https://i-blog.csdnimg.cn/blog_migrate/5fa60c7004f5dce7cb775a7f2c08bafc.png)
3.循环控制器 - Loop
循环控制器能够让用户请求运行指定的次数或永远执行。
![856a649af36747775886788d28824594.png](https://i-blog.csdnimg.cn/blog_migrate/47ce160c3cfeeb574eb37997411ca3f4.png)
4.随机控制器 - Random
随机控制器能够让所有用户请求在每个循环周期中以随机顺序运行。例如,假设当前我们共有3个用户请求,分别按顺序(1. HTTP请求,2. FTP请求,3. JDBC请求)访问网站:http://www.baidu.com;
这3个请求分别需要运行5次,那么JMeter会将这总共15个用户请求发送到baidu服务端,在连续的顺序情况下,针对单次循环,请求被发送的顺序是[HTTP请求 -> FTP请求 -> JDBC请求]。相较于在随机的情况下,在单次循环中请求则是按随机顺序发送的,随机顺序则可以是:[FTP请求 -> HTTP请求 -> JDBC请求],也可以是:[JDBC请求 -> FTP请求 -> HTTP请求]。
![347614a262cbc6a8869cc18c3e53c42b.png](https://i-blog.csdnimg.cn/blog_migrate/b213d81c5873cb47553fd99e87684ec4.jpeg)
5.模块控制器 - Module
Module Controller的目标是将JMeter请求进行模块化,通常的想法是web应用程序由小功能单元(即登录,创建用户,搜索,评论,注销等......)组成,这些小功能可以作为一个“模块”存放在简单控制器Simple Controller中,模块控制器根据设定选择需要运行的模块。
![497b8d73b9b8f1f12ad46b48c4845dba.png](https://i-blog.csdnimg.cn/blog_migrate/be3fd8a88ee3ac4654b8ba4d39b76791.jpeg)
假设我们有这样的场景需要模拟50个用户注销,100个用户登录,30个用户搜索www.baidu.com; 那么我们就可以使用JMeter创建3个模块,每个模块模拟每个用户的活动,即:登录,注销和搜索。
![2fd731019f2b36cf3befb96e341350bd.png](https://i-blog.csdnimg.cn/blog_migrate/0fa22c00a85d617dafc083d100919306.jpeg)
然后模块控制器就能选择需要运行的模块了:
![7b2af24913085be8cc8fccad3354a90d.png](https://i-blog.csdnimg.cn/blog_migrate/4993fdd3201e331b30ea3cd0672f91e3.jpeg)
【逻辑控制器 Demo】
这里我们以一则Demo演示循环逻辑控制器在性能测试任务中的应用。 在基于JMeter的测试设计场景中,除了在线程组中设置循环次数外,循环控制器还能为请求采样器设置一定的运行次数。假设经过测试需求分析,我们有如下场景:
(1)将一个HTTP请求添加到循环计数为50的循环控制器中;
(2)将线程组循环数配置为2;
(3)由此,JMeter将发送总共 50 * 2 = 100个HTTP请求;
![e86bc4d359f23c7bbc7e9ba26e0746c8.png](https://i-blog.csdnimg.cn/blog_migrate/2632a5c24b258dbfe606d80fa419f6de.jpeg)
测试用例设计/测试执行路线图
·JMeter实现步骤
1.添加线程组
右键单击测试计划(Test Plan),然后添加一个新的线程组:添加(Add)——>线程(用户)(Threads(Users))——>线程组(Thread Group);
![71adaa6980e5e1be130a2cd3d64de7bf.png](https://i-blog.csdnimg.cn/blog_migrate/98b7e8852297f5fe164caf5b564cb3b4.jpeg)
在“线程组”控制面板中,设置如下“线程属性”,它会对目标网络服务端发送一个用户请求,并运行2次:
![48f277da9a2ae1f38f994561d6f4efe5.png](https://i-blog.csdnimg.cn/blog_migrate/52bbfbd2be076b530c8f7b08355f5140.png)
2.添加JMeter元素
将HTTP请求默认值添加到www.baidu.com, 鼠标右键并选择:添加(Add)——>配置元素(Config Element)——>HTTP请求默认值(HTTP Request Defaults);
![17cb258e1bda6bd850c9814855c92141.png](https://i-blog.csdnimg.cn/blog_migrate/9662a474c6dd7b71dcacedbdb407eb43.jpeg)
在“HTTP请求默认值”面板中输入被测站点名称(http://www.baidu.com)
![d6cf258e4072421494e8d7fcf087d965.png](https://i-blog.csdnimg.cn/blog_migrate/11f0e58ce1ccdf00939f480b99c15eb1.png)
3.添加循环控制器
右键单击线程组(Thread Group):添加(Add)——>逻辑控制器(Logic Controller)——>循环控制器(Loop Controller);
![2bd4b78c23832cb15364453d4f52afb4.png](https://i-blog.csdnimg.cn/blog_migrate/566c9fd6eeebc05310ddb8975c52bbb1.jpeg)
4.配置循环控制器
把“循环计数”设置为50次,这样就会向目标服务端http://baidu.com发出一个用户请求,并且该请求场景循环运行50次;除了以上在线程组中设定的循环次数(参考第1步,线程组中的循环次数为:2)以外,JMeter一共会发送的请求总数为:2 * 50 = 100个HTTP请求。
![4a407cbb6e71069e8a702dcf847497c1.png](https://i-blog.csdnimg.cn/blog_migrate/63083558444821dadc8f706ccf5c5503.png)
右键单击线循环控制器(Loop Controller):添加(Add)——>采样器(Sampler)——>HTTP请求(HTTP Request);
![236e543ad49a8b414507e767a4cdcef8.png](https://i-blog.csdnimg.cn/blog_migrate/358b4a3300f18eb68115a3b025e63a8c.jpeg)
5.添加查看结果树
右键单击线程组:添加(Add)——>监听器(Listener)——>在表格中查看结果(View Result in Table)
![5109a311b03786e6dc899b1ed6f2f345.png](https://i-blog.csdnimg.cn/blog_migrate/068477ae7adef347942ba7d9d9e68982.jpeg)
![d44aa2c256c8b13081233dae05f2e202.png](https://i-blog.csdnimg.cn/blog_migrate/b8b9eb971cb11a9a1f8acf5b4c8b71df.jpeg)
6.运行测试用例
选择菜单栏上的运行按钮,执行测试后,在结果表格中可以发现,JMeter仅模拟了一个用户请求,该请求被发送了100次到web服务端http://www.baidu.com, 在第100次发送请求后,测试终止。
![ab76c225130a28ee4cf97903c8c5be96.png](https://i-blog.csdnimg.cn/blog_migrate/7d99431996376f5564e154da6dca5025.jpeg)
【总结】
以上基于JMeter通用逻辑控制器进行了类别普和应用讲解,结合最为常见的Loop循环控制器介绍了其在典型测试场景中的应用,希望能够帮大家进一步理解逻辑控制器的使用场景,在今后的工作学习中能够结合实际情况有效应用。
每天学点干货技能:
大佬谈涨薪之路:测试这一岗位每天都干什么?mp.weixin.qq.com