0


Jmeter

Jmeter使用总结

  1. 基本框架

                              ![](https://img-blog.csdnimg.cn/3d8122d3330646d98d78d1e78e6df046.png)
    
  2. 导入CSV数据

先在线程组下添加一个 “CSV数据文件设置” 并填写内容如下:

然后找到需要导入数据的http请求,修改变量名称:

导入几个数据就设置几个线程,运行jmeter,即可在结果树的响应结果中查看运行结果。

  1. 线程组配置

  1. 事务控制器

添加事务控制器后聚合报告才有实际意义

如果勾选了Generate parent sample 结果会按线程组展示,如果没有勾选会展示每一个http请求的结果。

  1. jmeter里的逻辑控制器

前提注意:除了仅一次控制器,其他的控制器都可以互相嵌套,先死记住:只有仅一次控制器不能嵌套其他的控制器。

  1. 如果(if)控制器****

条件控制器,顾名思义是按照判断条件是否成立,来决定其下面的元件是否执行。跟编码中的if判断是一个概念。设置界面如下:

  • Use status of last sample 点一下它会替你生成 ${JMeterThread.last_sample_ok},它的作用是使用上一个取样器的结果,非常的方便,不用自己写一大堆的判断。

  • Interpret Condition as Variable Expression,勾选后控制器会使用变量表达式来判断,例如${__javascript(…)},如果勾选了则JMeter会计算javascript中表达式的值。

  • Evaluate for all childrun 判断条件是否针对所有子节点。如果启用这个选项,在有多个子节点嵌套的情况下容易导致逻辑混乱。默认不勾选,就只会在if控制器入口的地方判断一次,默认状态就已经足够满足绝大部分的测试场景。

  1. 循环控制器

循环控制器和while控制器一样,都是用来循环执行的。区别在于循环控制器是按照执行次数来控制的,也就是你可以设定元件执行多少次;而while循环是按照条件表达式的结果来控制的,例如如果进度为100%则退出while循环。

设置界面如下:

特别注意那个循环次数中”永远“的复选框,如果勾选后,那么在脚本的持续运行时间内,循环控制器下的元件会重复执行;直到脚本停止。

  1. whie控制器

顾名思义,用来实现while循环功能,这是一个很有用的控制器,现在很多前后端分离架构的系统,都使用异步任务的方式来处理业务。例如导出100W条订单的记录需要10秒,程序并不会阻塞在那里,它会提交一个异步任务就直接返回,然后通过一个定时的进程轮训任务进度。那么在性能测试中如果没有异步等待就会导致脚本提交频率异常高。这里的异步任务等待就可以用while循环来实现。设置一个退出条件例如进度100%或等待次数60次,不满足时则一直循环。

界面如下:

注意那个Condition文本框,while循环的判断条件就写在那里。

  1. Foreach控制器

作用是从【用户自定义的变量】里读取数据,并执行循环。界面如图:

其中,输入变量前缀是和另一个元件【用户自定义的变量】配合使用的,这里你先可以简单的理解为:这里定义一个前缀例如TEST_,那么在脚本运行的时候它会去【用户自定义的变量】里循环读取TEST_XX1,TEST_XX2的值,有多少个TEST_XX,就会循环多少次。

开始循环字段(不包含):循环变量的下标的起点。

结束循环字段(含):循环变量下标的终点。

输出变量名称:循环控制器生成的变量名称,其他线程可以通过该名称引用变量的值

数字之前加上下划线,默认勾选,使用起来会比较便利。

  1. Incude控制器

对于脚本设计来说一个非常重要的控制器,你可以将一个复杂的性能测试分为不同的测试场景,每个测试场景是一个TestPlan,每个TestPlan放到一个【测试片段】的元件中,有Include调用,它可以实现团队内部的分工协作:你弄订单的,我弄查询的,设置好变量和参数化后各自提交,然后作为一个整体来执行。在使用版本管理工具的团队中,这个控制器就显得很重要了,它可以避免所有人的修改都提交到一个jmx文件中导致冲突。

Include控制器界面如图:

配置界面没什么需要特别解释的,但是有两点需要特别注意:

  1. Include只能包含测试片段,这是一个元件,后面会介绍,现在先知道他怎么用就行。测试片段里包含你的Jmx脚本;

  2. 如果测试片段的Jmx中包含有参数或者用户定义的变量,那么这些变量需要定义在外部的测试计划Jmx中。不能只写在测试片段的Jmx中。简单的说就是公共的变量和参数放在外部。

  3. 交替控制器

交替控制器的作用是,它下面节点的取样器会以交替的方式执行。在排查问题时也可以用到,也就是两个请求反复交替执行,先保存、再删除,再保存,再删除。
界面如图:

  1. 仅一次控制器

这个控制器用的很频繁。考虑一下这个性能测试需求:要求测试以下性能测试场景,用户A登录系统;提交订单、查询订单、删除订单,100用户在线(有称之为100并发的)执行20分钟。你可能觉得把这五个请求搞出来放到脚本里,设置上100并发执行时间20分钟,然后直接run不就行了吗?其实是不可以的。因为你的脚本是循环执行,每一次循环都是执行一次用户登录,所以20分钟执行下来你的在线用户肯定是高于100的,对吧。这个时候仅一次控制器就派上用场了,你可以把登录的请求放在仅一次控制器中,这样即使你执行20分钟,或者你循环执行N次,你的登录请求也只会执行一次,这样就能实现你有100个用户登录一次、循环执行20分钟业务的测试需求了。

要特别特别注意,在一个线程组中如果存在多个【仅一次控制器】,那么只有第一个【仅一次控制器】生效 ,其他的仅一次控制器仍然会每次循环时执行节点下的取样器。

设置界面如下,没什么特别的配置,用法也很简单,把你的取样器拖到这个节点下面就可以。

  1. 随机控制器

我个人觉得一个很鸡肋的控制器,它的作用是让节点下的元件随机执行,每个元件只执行一次。目前没有碰到过需要使用它的场景。

  1. 随机顺序控制器

我个人觉得它和随机控制器一样,也是一个有点很鸡肋的控制器,它的作用是让节点下的所有元件随机执行。目前没有碰到过需要使用它的场景,注意它和随机控制器的区别:例如有10个子元件,随机控制器只会随机执行其中的1个,其他9个不执行;而随机顺序控制器会执行全部的10个,只是执行顺序随机。

  1. 录制控制器

录制控制器其实跟脚本的执行没关系,它是用来录制http请求的以生成测试脚本的,类似于Loadrunner里的record录制功能。

  1. Runtime控制器

它的作用就是控制它下面子元件的执行时长。你添加一个Runtime控制器,然后在它的下面添加一个查询的Http取样器,设置10秒。此时运行的话,你会发现查询的http取样器运行10秒后就结束了。

在复杂的性能测试场景中,我们总会有这样的需求:整体场景执行20分钟,但是其中某些http请求只执行一定时间就结束。有时在组合场景负载时,为了排查特定并发场景我会使用该控制器。

如果Runtime(seconds)为0或者不填,则该控制器下的子元件不会执行。

  1. 简单控制器

我个人认为最废柴的一个控制器,但是存在即合理,我觉得他的最大的作用可能就是嵌套其他控
制器了,我们可以用它来定义一个”执行块“,按照执行块来对脚本进行控制。我这边很少用到它,界面如图:

  1. 吞吐量控制器

按照官方文档定义,他是用来控制它下面元件的执行次数的。

Based on是控制器的控制模式:

  • Percent Executions是按照百分比控制。
  • Total Excetions 是按照吞吐量设置的值来控制。
  • Per User 按照官方文档,是指是否按照虚拟用户数来计算执行次数。PerUser对Percent Executions没有任何影响。

Percent Executions是最常用的选项****

  1. 模块控制器

模块控制器可以在调用其他的测试片段。跟Include很像,但是它跟Include控制器不一样的地方在于,它提供了在运行时改变测试片段的能力,Include不行。当测试开始执行后,Include里所指向的测试元件就不可改变,模块控制器则可以。简单的说,模块控制器适用于手动控制测试执行过程,而Include则适合无人值守执行或者执行后不管

设置界面如下:

  1. Switch控制器

Switch控制器的作用类似于编程中的Switch,根据输入值匹配不同的分支。界面如图:


其中Switch Value经常和公式、变量一起配合使用。可以为数字,也可以为字符。

  1. 断言

  2. 响应断言

每一个http请求正常执行的话都会返回服务器的响应报文,响应断言可以对服务器的响应内容进行检查。响应断言可以检查的内容包括:

8、特别注意****

1、响应结果

2、简单的性能分析


本文转载自: https://blog.csdn.net/m0_66899079/article/details/127392678
版权归原作者 m0_66899079 所有, 如有侵权,请联系我们删除。

“Jmeter”的评论:

还没有评论