jmeter元件执行顺序及简介

最近在学习Jmeter,在进行实操以前,先查看了官方文档。由于官方文档是英文的,为了方便之后查看,本身翻译了一部分,中间个别地方根据本身的理解简单地翻译了部分。若是翻译等有问题,欢迎指正。服务器

1、执行顺序多线程

一、控制器和取样器是有序的,当执行测试计划时,这些请求将按顺序执行。以下图:并发

二、一些控制器会影响它的子原件的顺序,还有一些元件是分等级的。好比断言,若是它的父元件是一个请求,那么它将做用于这个请求;若是它的父元件是一个控制器,那么它将做用于这个控制器下的所有的请求。以下图:app

Assertion#1仅被应用于请求one,Assertion#2做用于请求two 和three。less

另外一个复杂点的列子:学习

这个例子中,(定时器)Timer#1将应用于请求Two\Three\Four,Assertion#1将应用于请求Three。Timer#2将应用于全部的请求。测试

通常状况下,元件执行顺序以下:spa

复制代码
0.Configuration elements
1.Pre-Processors
2.Timers
3.Sampler
4.Post-Processors (unless SampleResult is null)
5.Assertions (unless SampleResult is null)
6.Listeners (unless SampleResult is null)
复制代码

注意:Timers,Assertions,Pre- and Post-Processors 只有当一个sampler申请时才会执行。线程

举例说明以下图:翻译

在这个例子中,执行的顺序以下:

2、测试计划中的元件

一、线程组

线程组元件是全部测试计划的开始点。全部的控制器和samplers必须在线程组下,其余元件好比监听器,也许会被直接添加在测试计划下,这样这个监听器将做用于全部的线程组。

线程组管理容许你(下面所列为线程组--线程属性中能够配置的信息):

》设置线程数

》设置ramp-up period 

》设置循环次数

每一个线程都是做为一个总体执行测试计划,而且彻底独立于其余线程。多线程用来模拟并发链接到你的服务应用中(Multiple threads are used to simulate concurrent connections to your server application.)

The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of threads chosen.若是有10个线程,ramp-up period是100秒,那么Jmeter将在100秒内启动并执行这10个线程。每一个线程将在前一个线程开始后10(100/10)秒启动。若是是30个线程,ramp-up period是120秒,那么每一个连续(successive)的线程将延长4秒。

Ramp-up needs to be long enough to avoid too large a work-load at the start of a test, and short enough that the last threads start running before the first ones finish (unless one wants that to happen).

默认状况下,都是设置为恰好线程组循环一次。

线程组也提供了调度器。能够在线程组--线程属性中勾选框决定是否启用调度器,而后在线程组-调度器配置框中,能够设置持续时间、启动延迟、启动时间和结束时间。持续时间和启动延迟是用来控制每一个线程组的持续时间,和在多少秒后每一个线程组开始时间。当测试执行时,Jmeter都会等待startup delay中设置的秒数,再去启动此线程组下的线程,而且执行时间为持续时间配置的秒数。注意,持续时间和启动延迟优先于启动时间和结束时间。

或者你可使用启动时间和结束时间。当测试开始时,若是必要的话Jmeter会等待start-time到达。每一次循环结束后,Jmeter会检查end-time是否到达了,若是是,那么执行将中止。若是不是,将会继续执行下去,知道循环结束。

二、控制器

Jmeter有两种类型的控制器:Samplers和logical Controllers.

Samplers告诉Jmeter发送请求到服务器。好比,若是你想发送一个HTTP请求,你须要在Sampler中添加一个HTTP请求。你也能够经过添加一个或多个配置到Sampler中来自定义一个请求。

Logical Controllers:你能够经过自定义逻辑来使Jmeter决定何时发送请求。For example, you can add an Interleave Logic Controller to alternate between two HTTP Request Samplers.

2.1 Samplers

它告诉Jmeter发送请求到服务器,而且等待回应。 Controllers can be used to modify the number of repetitions of a sampler.

若是你发送到服务器的多个请求都有同样的类型(好比HTTP请求),能够考虑使用一个默认值元件(好比HTTP请求默认值)。

记得添加监听器来查看或保存请求的结果到电脑中。

2.2 Logic Controllers

逻辑控制器能够经过他们的子元件来改变请求的顺序,或重复请求等等。

以下列:

(1)由于Login Request在Once Only Controller下,因此登陆请求只执行一次,下次迭代将跳过登陆请求。

(2)接下来会执行Load Search Page,由于这个没有加控制器,因此正常执行。

(3)Load Search Page执行后,将须要执行两个searches。可是这两个searches前加了Interleave Controller,因此每执行完一个search,将从新执行Load Search Page???

(4)Interleave Controller下的HTTP默认值请求,当search A 和B都是同样的HTTP请求,只是个别信息有异,在这里配置HTTP默认值请求,将节省配置步骤。

2.3 Test Fragments

Test Fragments是一种特别的控制器,跟线程组同一个级别。它区别于一个当被任何一个Module控制器或Include 控制器引用时才开始执行的线程组??

它在测试计划中纯粹是为了代码重用。(这个仍是不明白作什么用的、、、)

三、监听器

监听器能够添加到测试中的任何一个地方。它们将从同等级或其下级元件中收集数据。

四、定时器

若是你不增长延时,Jmeter在短期内发送多个请求时,可能会压垮服务器。

五、断言

断言能够添加到任何一个Sampler中,它将做用于sampler范围内。若是但愿断言只做用于单个sampler,能够在这个sampler中添加子元件断言。

要查看断言的结果,能够添加一个断言监听器到线程组中。结果与指望值不同的断言,也能够在tree view和table listeners中查看。

六、配置元件

配置元件做用于同一级别或其子级别中。以下图:

(1)HTTP Cookie Manager 在Simple Controller下,这个元件将做用于Web Page1 和Web Page2,而对Web Page3没有影响。

同时,一个在树内部的配置元件会比父支拥有更高的优先级。

(2)Web Defaults1和Web Defaults2 :Web Defaults1将影响Web Page2,而Web Defaults2将影响除Web Page2之外的HTTP请求。

注意点:User Defined Variables这个配置元件与上面所说的规则不一样,它将在测试开始时执行,不管你放在哪一个位置。

相关文章
相关标签/搜索