jmeter学习记录--07--jmeter元件

时间:2021-04-07 00:10:02

通过jmeter元件可以模拟负载、参数化、设置关联、设置检查点、设置集合点、控制场景运行、监控测试结果等。

1、逻辑控制器:比如foreach控制器,查询到了订单并要对每个订单进行出库操作,以订单号作为循环条件。

2、配置元件:如ftp请求默认值,多个请求有共同配置时可以把相同点提取出来。

3、定时器:用来设置延迟与同步。如固定吞吐量定时器,尽量保持采样器产生的TPS在一个固定的范围内。

4、前置处理器:处理请求前的准备工作,如参数设置、环境变量设置。比如,jdbc请求前置处理。

5、后置处理器:服务器的响应数据在后续请求中用到,对这些数据做处理。

6、断言:对服务器的响应数据做验证。常用的响应断言、html断言、响应数据大小断言、比较断言、xml断言等。

7、监听器:监听与显示取样器测试结果。对监听器配置有基础功能,如有需要可根据需求定制。

8、函数助手:参数化方法之一,或对数据进行运算、字符编码格式转换、获取运行时参数等。

 

一、控制器

“仅一次控制器”不能嵌套其他种类的逻辑器,其他都可嵌套。

jmeter学习记录--07--jmeter元件

 1.1 foreach控制器

  查询到了订单并要对每个订单进行出库操作,以订单号作为循环条件。http1正则表过式输出inputVar作为foreach控制器的输入,输出值作为http2请求使用

  jmeter学习记录--07--jmeter元件jmeter学习记录--07--jmeter元件

 1.2 循环(LOOP)控制器

  输入执行次数或一直持续执行。

 1.3 仅一次控制器

  最简单的,无论在循环控制器下还是在线程组下,都是每个线程只执行一次,如登录。比如线程用户2个,执行次数10次,最终执行次数共2次。

 1.4 简单控制器

        只有名称与注释无其他项。它定义了一个执行单元,按顺序执行。比如基准测试时,1个线程按顺序执行100次,只需要在线程里配置就可以了。

 1.5 runtime控制器

  控制元件的执行时长,默认1秒。

runtime控制器
线程数 线程执行策略 控制设置秒数 结果执行情况秒
1 1次 5 5秒
1 3次 5 15秒
2 1次 5 5秒
2 3次 5 15秒
1 5秒 10 5秒
1 10秒 5 5秒
2 10秒 2 2秒
2 10秒 5 5秒
2 5秒 10 5秒
3 5秒 10 5秒
3 10秒 5 5秒

     结论:1)如线程执行设置的是次数,那次数*控制器设置秒数=执行时长,与用户数无关。

     2)如线程执行设置的是时长,哪个执行时间短显示的哪个时间,与用户数无关? 

 

 1.6 吞吐量控制器(想控制TPS需要使用constant throughput timer)

  控制无件次数的,无控制吞吐量的功能。它有两种模式:总执行次数与百分比次数。

       百分比次数:与per user勾选无关。按执行次数的百分比计算执行次数,取值0-100

       总执行次数:per user与总执行次数同时影响执行次数。按值来执行,如果《=0,则不执行。

  per user勾选上表示按虚拟用户数来计算次数,若不勾选,则按所有虚拟用户来计算执行次数。

线程数 循环次数 模式 throughput per user 结果执行次数
3 10 percent 50 Y 15
3 10 percent 50 N 15
3 10 total 7 Y 21 每个用户执行7次
3 10 total 7 N 7 所有用户共执行7欠
3 3 total 7 Y
3 3 total 7 N 7

结论:第5次与第6次,线程组计划循环次数是4次。第5次,每个虚拟用户执行7次,共21次,最后取线程组次数9次。第6次,则是所有用户执行7次,最终执行了7欠。哪个执行次数少,最终结果按哪个执行?

  1.7 事务控制器

  可以把节点下的取样消耗时间累加,可对每一个取样器的执行时间进行统计。如果事务控制器下的取样器有多个,则所有事务成功才会成功。-类似LR的事务概念。

  选项“是否生成一个父采样结果”:若控制器下有2个请求,则除了2个请求的取样结果,还有一个 transaction controller的取样结果。

  第二个选项:不用选择。如果有定时器,会把定时器的时间也算在执行时间里。类似LR的事务里如果有思考时间,最后事务把思考时间也算上了。

jmeter学习记录--07--jmeter元件

  线程组1个用户执行1次,事务控制默认值,结果:

jmeter学习记录--07--jmeter元件jmeter学习记录--07--jmeter元件

        

  勾选此项后测试:

jmeter学习记录--07--jmeter元件jmeter学习记录--07--jmeter元件

   1.8 IF控制器

  通过某个条件来控制此节点下的元件是否运行。条件可以是js与变量表达式。

  前置条件:定义了一个变量a设为7。

  条件为:${a}==7  其他两项不勾选,则控制器请求的为真时执行请求。如果判断为==6,则不执行。

        js变量表达式:${__jext3("${a}"=="7")},要勾选第一个选项否则会报错。或者使用${__javaScript(7==7)}       

  应用实例:(在一个线程组中设计脚本执行)

  例1:如果想控制两个请求的发送频率,比如登录:注册按照3:2发送,通过此逻辑控制器也可以实现。

  条件:${__counter(true,)}%2==1||${__counter(true,)}%3==0  (不勾选第一项)
  __counter(true,)是获取当前迭代次数,%是取余,也就是除2余1与3整除时执行请求。实际使用的时候,简单控制器控制“登录”请求,if控制器控制“注册”请求。比如,线程组设置15次,登录执行15次,注册执行9次。这样比例是3:2。

        例2:每3次迭代执行1次,条件:|${__counter(true,)}%3==0  

 

      

二、配置元件

2.1 CSV Data Set Config

可以从指定的文件中一行一行提取文本内容,根据分隔符拆解这一行内容并把内容与变量名对应上,这些变量就被参数化使用了。

jmeter学习记录--07--jmeter元件

文件名:文件地址。可以是绝对地址(%jmeter_home%\bin),相对地址,或变量参数化路径${paraPWD}

文件字符集:取文件参数时使用的字符集,常用utf-8,还有GB2312。如果参数文件里有中文,而使用utf-8,中文会显示乱码。

allow quoted data?:是,则可以允许拆分完成的参数里有分隔符。比如使用的csv文件默认使用逗号分隔列,某列参数中是json串包含有逗号,如果不选是则取的参数值可能会不全。

recycle on EOF? 参数文件循环遍历。

这里选项也可以根据源码修改自行扩展。如增加unique。 

 

 

2.2 jdbc连接设置

jmeter学习记录--07--jmeter元件

设置与数据库的连接配置信息。

jdbc:mysql://localhost:3306/mst

com.mysql.jdbc.Driver

 

2.3 计数器

  执行过程中会记录执行次数。计数器记录的值是一个变量,可供其他元件调用。

2.4

三、定时器

  优先级高于采样器。同一个作用域下有多个定时器时,每个都会执行。如果要想只对一个请求有效,那把它放在这个请求节点下。

jmeter学习记录--07--jmeter元件

 

3.1  高斯定时器

  设置一个固定值与偏差值。模拟思考时间。

3.2 同步定时器

  模拟多个用户并发,类似于LR的集合点。

3.3 constant throughput timer

  固定吞吐量定时器。可使采样器的TPS在一个固定范围内。如果吞吐量大过固定值,则增加间隔时间;如果小于,则减少。具体间隔时间的设置,由tps与用户数来定的。

  jmeter学习记录--07--jmeter元件

  最后两项带有shared,是把计算是基于任意一个线程上次执行的时间,随机取的,结果不一定准确。

3.4  uniform random timer

  可让线程暂停一个随机时间。如设定固定延迟时间为3秒,随机延迟时间1秒,则线程延迟在2秒-4秒之间。

3.5  beanshell timer

  可通过beanshell来设定。

 

四、前置处理器

jmeter学习记录--07--jmeter元件

4.1 正式表达用户变量

  用来引用上一次正则表达式取样器提取的响应数据。比如,请求1下的正则表达式提取器(后置处理器,变量1),请求2(这时只用设置参数,不需要设值,设由正则用户变量提供)使用该项,该项会设置“变量1”及其下标。-1表示全部遍历。

4.2 http url 重写修饰符

  比如用户登录的sessid,后续多个请求使用时,就可以用它。

jmeter学习记录--07--jmeter元件

若sessid=abc,间隔符是=。第一项表示是用;间隔,第二项是不使用=间隔,第三项是表示是不使用?间隔。

 

五、后置处理器

   用来关联响应的值,后续使用。

 jmeter学习记录--07--jmeter元件

5.1 result status action handler

  对每一个采样器设置运行时错误的逻辑。线程组里有整个取样器的错误后的处理逻辑。

5.2 正则表达式提取器

   这个是常用的取关联值的操作。

 

六、断言

jmeter学习记录--07--jmeter元件

响应断言,支持正则表达。

比较断言:调试时使用,用来比较两次取样结果,支持正则。常与比较断言visualizar结合使用。

xml assertion:检查的是响应数据是否是xml格式。看的是格式。不常用。

XPath 断言:对返回的xml格式信息进行判断。看的是值。

 

七、监听器

jmeter学习记录--07--jmeter元件

查看结果情况的。都比较常用。