JMeter元素

346 阅读5分钟

&nbsp&nbsp&nbsp&nbsp 在进行性能测试时,我们都需要构建相应的测试计划。测试计划由测试元素组成,例如线程组、逻辑控制器、样本生成控制器、监听器、定时器、断言和配置元素。每个测试计划中至少应有一个线程组,我们可以根据要求添加或删除元素。

一.线程组

1.三种线程组

&nbsp&nbsp&nbsp&nbsp 线程组(Threads)是任何一个测试计划的起始点。线程组或者可以叫用户组,进行性能测试时的用户资源池,线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的任务,每个线程之间都是隔离的。

&nbsp&nbsp&nbsp&nbsp 在一个测试计划中的所有元件都必须在某个线程下。所有的任务都是基于线程组。

&nbsp&nbsp&nbsp&nbsp 上图可以看到,添加线程组有三个选项,点击创建后,他们的界面是完全一样的。差别在于执行顺序。setup thread group / teardown thread group分别会在普通线程组执行前/执行后被触发。类似于junit中的setup/teardown。

&nbsp&nbsp&nbsp&nbsp 需要注意的是,默认情况下,如果测试按预期完成,则teardown线程组将不会运行。如果你想要运行它,则需要从test plan界面中选中复选框“Run tearDown Thread Group after shutdown of main threads”

2.线程组的基本设置

part1:线程组的命名与备注
part2:在取样器错误后要执行的动作
  • 继续:忽略错误,继续执行
  • 启动下一进程循环:忽略错误,线程当前循环终止,执行下一个循环
  • 停止线程:当前线程停止执行,不影响其他线程正常执行
  • 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
  • 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器可能会被中断
part3:设置线程属性
  • 线程数:模拟的用户数量
  • Ramp-Up时间:达到指定线程数(从0升到线程数)所需要的时间。举例:线程数设置为10,Ramp-Up时间设置为50,那么每秒启动的线程数=50/10=5,每个线程将在前一个线程启动后的5s再启动
  • 循环次数:该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次
  • Same user on each iteration:如果勾选,表示每次迭代使用相同的线程
  • 延迟创建线程直到需要:如果勾选,那么线程只会在合适的需要用到的时候创建
part4:调度器
  • 持续时间:设置线程组运行多长时间,单位是秒
  • 启动时间:设置线程启动延时时间,单位是秒

通过这里设置线程运行时间周期,只有当循环次数选择“永久”时,才会生效。如果循环次数不是永久,则设置调度器是无用的

二.控制器

JMeter的控制器可分为两类:取样器、逻辑控制器

1.取样器

取样器是允许JMeter将特定类型的请求发送到服务器的组件。他模拟用户对目标服务器的页面的请求。涉及到http等一系列请求,详情见上图

2.逻辑控制器

逻辑控制器可以控制取样器的执行顺序,所以,逻辑控制器需要和取样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有采样器都会当做一个整体,也会一起被执行

  • If控制器:根据给定表达式的值决定是否执行该节点下的子节点

&nbsp &nbsp 选中Interpret Condition as Variable Expression:判断变量值是否等于字符串

&nbsp &nbsp 选中Evaluate for all children:在每个子节点执行前都会计算表达式

  • 事务控制器:生产一个额外的采样器,用来统计该控制器子节点的所有时间

&nbsp &nbsp 选中Generate parent sample:选中后,结果为树状图形式;不选中,结果为并列形式

&nbsp &nbsp 选中Include duration of timer and pre-post processors in generated sample:选中这一项就会统计定时器(timer)的时间,否则只统计取样器(sample)的时间

  • 循环控制器:指定其子节点运行的次数,可以使用具体的数值,也可以使用变量

&nbsp &nbsp Forever选项:勾选上这一项表示一直循环下去

&nbsp &nbsp 如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果

  • ForEach控制器:ForEach控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的取样器或控制器都会被执行一次或多次,每次读取不同的变量值

  • 仅一次控制器:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器