ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Jmeter常用逻辑控制器、CSV Data Set Config参数化

2021-12-09 16:31:24  阅读:108  来源: 互联网

标签:执行 控制器 Set 请求 示例 循环 CSV Config 运行


1 Jmeter常用逻辑控制器

1.1 简单控制器

作用:Jmeter中最简单的一个控制器,只是分组的功能,不具有逻辑控制的功能。

示例:

 运行结果:

1.2 随机控制器

作用:随机选择控制器下的某1个请求运行。

应用场景:页面的随机访问(比如审批时有可能通过,有可能拒绝)。

示例:在随机控制器下放3个请求,查看运行结果。如下图:

 运行结果:随机运行了第2个请求。如下图:

1.3 随机顺序控制器

作用:执行控制器下的所有请求,但执行顺序随机。

应用场景:页面的随机访问,但所有页面都需访问,只是访问顺序随意(比如用户可能先访问我的订单页再访问购物车页,也有可能反之)。

示例:在随机顺序控制器下放3个请求,查看运行结果。如下图:

运行结果:3个请求均会执行,但执行顺序是随机的。如下图:

1.4 循环控制器

作用:指定控制器下请求的运行次数,勾选“永远“则会一直循环下去。

   如果同时设置了线程组的循环次数和循环控制器的循环次数,则循环控制器的子节点运行的次数为两个数值相乘。(线程数*循环控制器数值)

应用场景:一对多的关系。比如 创建一个部门,然后在该部门下创建多个员工。就用到了循环控制器。

示例:在循环控制器下放1个请求,设置运行3次,查看运行结果。如下图:

运行结果:运行了3次。如下图:

1.5 仅一次控制器

作用:在测试计划执行期间,该控制器下的元件对每个线程只执行一次。

应用场景:登录后访问其他请求,但只需登录一次。

示例:设置循环次数3,一个请求不在此控制器下(查询所有学生1),一个请求在此控制器下(仅一次控制器案例)。如下图:

运行结果:不在此控制下的请求(查询所有学生1)执行了3次,在此控制器下的请求(仅一次控制器案例)只执行了1次。如下图:

1.6 Switch控制器

作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:

  · 第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。

  · 第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。

  当Value为空时,默认执行第1个子节点元素。

示例:此控制器下建立多个请求,Switch Value填写哪个请求名称就执行哪个请求,如下图:

运行结果:Switch Value为“查询所有学生3”,所以只执行“查询所有学生3”这个请求,如下图:

1.7 ForEach控制器

作用:ForEach 控制器一般与“用户定义的变量”一起使用,此控制器下的请求,会将“用户定义的变量”中的参数每个都传进去执行一次。

示例:使用“通过学生姓名查询学生信息”接口,"用户定义的变量"以“下划线拼接数字”的形式设置姓名,如下图:

“输入变量前缀”:下划线之前的部分;

“开始循环字段(不包含)”、“结束循环字段(含)”:下划线后的索引;

“输出变量名称”在请求中引用;

“数字之前加上下划线"_"”:变量名称以下划线分隔索引则需要勾选,若无下划线分隔则无需勾选。

请求中引用控制器中设置的“输出变量名称”:

运行结果:按用户定义的变量中的姓名每个都执行了一次请求,如下图:

1.8 事务控制器

作用:多线程并发测试时,多个请求不一定按顺序执行,事务控制器可以控制子节点严格按顺序执行,保证请求的正确性;而且会生产一个额外的采样器,用来统计该控制器子节点的所有时间。

应用场景:完成一个完整的页面请求或一组请求。比如浏览商品列表页面,需将获取商品信息与获取商品照片等接口作为一组请求,且需要先获取到商品id才能去获取商品照片。

示例:设置50个线程,循环2次,观察不设置事务控制器与设置事务控制器执行结果的区别。

运行结果:

未设置事务控制器,结果中请求出现乱序的情况,如下图:

 设置事务控制器后,请求未出现乱序的情况,且自动生成了一个“事务控制器”的取样器,统计数据为1-5这一组请求的总时间,如下图:

1.9 如果(If)控制器

作用:根据给定表达式的值决定是否执行该节点下的子节点,常用函数:__jexl3和__groovy。

比如:${__jexl3("${query}"=="success",)}  ${__groovy("${query}"=="success",)}  (如果是字符串比较条件,参数和字符串都需要加引号。)

示例:变量query为fail时,不会执行控制器下的请求(查询所有学生1);为success时,才会执行。

 If控制器中判断条件为query为success时才会执行控制器下的请求:

 运行结果:无“查询所有学生1”请求

 将query变量的值改为success,重新执行:

 运行结果:执行了“查询所有学生1”请求

1.10 Runtime控制器

作用:设置控制器中的请求运行时间,单位:秒。

  • 和线程组的循环次数也有关系,如果指定循环次数的话,总的运行时间 = 循环次数 * runtime。
  • 如果循环次数是永远或者设置了调度器持续时间,那么 Runtime 控制器下的子项运行时间以线程组中设置的时间为准。

应用场景:对业务请求时间进行限制。

示例:设置运行时间10s,如下图:

运行结果:循环运行10秒后停止,如下图:

1.11 While控制器

应用场景:

值为空:只有最后一个取样器执行失败才退出循环。循环执行一个请求,仅判断一种状态下退出循环。
值为LAST:如果进入循环之前的请求失败,则不进入循环。比如前面有依赖的话,依赖执行失败则后面就不执行了。

示例1:值为空时,只有最后一个取样器执行失败才退出循环:

 使请求2执行失败,观察运行结果:

请求2执行失败但没有退出循环,一直在运行,如下图:

 将请求2改为正确的,请求3改为错误的,执行:

 请求3执行失败后就退出了循环,如下图:

示例2:值为LAST, 如果进入循环之前的请求失败,则不进入循环:

在循环之前再建一个请求,使其执行失败,运行:

 运行结果:没有进入循环。如下图:

对比“值为空”时的运行情况,循环前的请求失败仍进入了循环。如下图:

2 CSV Data Set Config参数化

2.1 使用Fiddler抓包

请求路径及请求参数如下:

 2.2 CSV文件准备

先新建xls文件,再另存为csv格式:

2.3 Jmeter脚本编写

变量名称:在下方取样器中会引用。

忽略首行:csv文件中第一行为列标题则选为True,若无标题则选为False。

分隔符:csv文件默认为逗号分隔。

 参数值引用上面设置的变量名称:

设置线程数或循环次数,运行,第1个请求为第1个用户,第2个请求为第2个用户,以此类推:

 登录成功:

标签:执行,控制器,Set,请求,示例,循环,CSV,Config,运行
来源: https://www.cnblogs.com/xksy/p/15662282.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有