一个最小的测试包括 Test Plan , 一个Thread Group, 一个或者多个Samplers.
1.TestPlan
Test Plan对象有个复选框,叫做‘Functional TestMode’. 如果勾选了,Jmeter将会为每个Sample记录从服务器端返回的数据。(我还不太懂这句话的意思);如果你已经为你的测试listener选择了一个文件,那么这些data都将写到这个文件里. 当你在做负载压测时,这个选项应该关闭。不然记录太多数据,jmeter的表现将受到影响。
2.ThreadGroup
Thread Group是所有test plan的起点。所有的控制器和采样器都在一个Thread Group下面。其他元素,譬如监听器,有可能直接放在test plan下面。Thread Group需要定义几个参数:
#Number of Threads 模拟的场景有多少个用户
#Ramp-Up Period 设置启动线程周期。例如有10个用户,设置的周期是100秒,就是告诉jmeter在100秒内启动所有的这10个线程并且运行testplan.当前一个线程开始后,后一个线程将在10秒(100/10)后启动。启动周期应该设置足够的时间来避免在一个测试开始时较大工作负荷。也应该注意,设置值不能太长,确保一个线程运行完成后另一个线程要开始运行。开始的时候,可以设置Ramp-Up=线程数,并且根据需要来增加或者减少周期。
#Loop Count 设置循环请求数,默认的配置是1.
每个线程将执行一个完整的test plan,并且完全独立于其他线程。多个线程可以模拟同时发生的连接到你的服务器应用上这种场景。
Thread Group 也提供了一个scheduler。勾选Thread Group面板上的复选框可以启用或者不启用额外字段来控制你的test.
#Duration(seconds) 每个线程组的持续的时间
#Startup delay(seconds) 多少时候后,线程组开始工作。当测试开始时,jmeter将等待这么多时间,才启动线程组中的线程,并运行Duration长的时间。这两个选项都会覆盖掉Start Time 和 End Time。
#StartTime
#End Time 不推荐用这两个参数,如果配置了的话,jmeter将会一直等到这个开始时间,并在结束时间停止。
3.Controller
Jmeter 有两种类型的控制器:Samplers和LogicalControllers. 它们负责驱动测试的过程。
Samplers告诉Jmeter发送请求到服务器端。例如,如果你想jemter发送一个HTTP request,就添加一个HTTPRequest Controller。你还可以为Sampler添加一个或者多个Contfiguration Elements,来实现自定义请求。
Logical Controllers可以定义什么时候让jmeter发送请求。例如, 添加一个Interleave Logic Controller,可以控制在两个HTTP Request Samplers的交替。
3.1Samplers
Samplers告诉jmeter发送一个请求,并且等待服务器的响应。它们按照在列表中的顺序被逐一处理。Controllers可以用来定义一个Sampler重复执行的次数。HTTP Request也可以用来测试SOAP或者REST等webservice。
如果你计划发送相同类型的request到同一服务器上时,可以考虑在线程组里使用同一个默认配置元素。每个Controllers都有一个或者多个Default elements.
如果想要jmeter对request返回的response执行基本的检查,就需要为Sampler添加一个Assertion. 例如,在压力测试一个web应用时,服务器可能会返回一个成功的HTTPResponse code,但是页面可能有错误或者丢失的部分。因此,你可以添加一个断言来检查某些HTML标签,常见错误字符串等等。jmeter允许使用常用表达式来创建这些断言。
3.2Logic Controllers
Logic Controllers允许你定义jmeter用来决定什么时候发送request的逻辑。LogicControllers可以改变来自子元素请求的次序。它们可以修改自己的equest,让jmeter去重复请求,等等。
4 Listeners
Listeners提供jmeter收集到的关于testcase运行时的信息。Graph ResultsListener绘制响应的时间到一个图表上。 ViewResults Tree Listener展示采样器请求和响应的细节,并且可以显示HTML和XML表示的响应。
另外,Listener可以将数据存到一个文件中,为以后备用。每个Listeners都可以定义存储数据的路径。注意,所有Listener存的数据相同,只是页面上的展示方式不一样。Listener可以直接添加到Test Plan的任何地方,包括直接添加到Test Plan下面。它们收集来自同一级或者子级的数据。
5Timers
默认情况下,一个jmeter线程按顺序不间断地执行Samplers. 但是,建议添加一个timers到Thread Group,来指定一个延迟时间。如果没有添加延迟的话,jmeter会在很短时间内发送大量的请求,可能会压垮你的服务器。
Timers会让jmeter在每个Sampler处于scope时延迟一段时间。
如果你选择添加多个timer到一个Thread Group下面,jmeter会计算所有timers之和,在执行应用了timers的sampler时停顿相应的时间。
如果想要在test plan里面一个地方只一次停顿,可以使用TEST ACTION Sampler.
6 Assertions
Assertions允许你断言从测试服务器返回的response中的某些信息。使用断言,可以从本质上测试你的应用返回的结果是你所期望的。
例如,你可以断言一个查询的响应将包含某些特殊的文本。你指定的文本可以是PERL类型的常用表达式,你可以指明你的响应会包含这个文本,或者匹配整个响应结果。
你可以为任何Sampler添加断言。例如,你可以给一个HTTP Request添加一个断言,检查文本</HTML>。jmeter将会检查这个文本是否在HTTP response里。如果jmeter没有找到这个文本,将会把这次请求标记为失败的请求。
注意,Assertions将应用到适用范围内所有的Samplers。想要限制一个Assertions适用于单个Samplers,需要将Assertions作为子元素添加到Samplers的下面。
浏览断言的结果,需要在Thread Group下添加一个Assertion Listener。失败的断言也会出现在Tree View和Table Listeners,还会计算出error的百分比显示在Aggregate 和Summary report里。
7.ConfigurationElements
Configuration Elements和Sampler密切合作。虽然它不发送request(除了 HTTP(S) TestScript Recorder),但是它可以定义request。
一个Configuration Element仅仅可以被同一分支中的元素访问。
另外,一个在子分支里面的Configuration Element比在父分支中同样的元素具有更高的优先级。
注意:User DefinedVariables 配置元素跟其他元素不一样,它在测试的一开始就被处理了,不管你将它放置在何处。为了简单起见,建议把这个元素放置在一个Thread Group的开始位置。
8.Pre-Processor Elements
一个预处理器会在一个Sampler请求被发出之前,执行一些动作. 如果一个预处理器是被附加到一个Sampler元素,它将在这个元素执行之前被执行。一个预处理器经常用来定义一个Sampler request运行之前的设置,或者更新没有从response text中提取的变量。
9. Post-Processor Elements
在Sampler 请求已经发出后,Post-ProcessorElement会执行某些动作。如果一个Post-Processor Element被附加到一个Sampler元素,它将在这个元素执行之后被执行。一个Post-Processor大多数时候用作处理响应数据,经常从其中提取一些值。
10.Execution order
1. Configuration elements
2. Pre-Processors
3. Timers
4. Sampler
5. Post-Processors (unless SampleResult is null)
6. Assertions (unless SampleResult is null)
7. Listeners (unless SampleResult is null)
注意:Timers, Assertions, pre-Processors 和Post-Processors只有在应用到一个Sampler时,才会被处理。Logic Controllers 和Samplers按照在列表中出现的顺序依次执行。其他的测试元素根据其作用范围或者其类型来决定。【同一个类型,元素会按照出现的顺序来执行】。
例如下面这个test plan:
- Controller
- Post-Processor 1
- Sampler 1
- Sampler 2
- Timer 1
- Assertion 1
- Pre-Processor 1
- Timer 2
- Post-Processor 2
它的执行顺序应该是:
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-Processor 2
Assertion 1
Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-Processor 2
Assertion 1
11.Scoping Rules
jmeter的测试树同时包含了分级元素有和次序元素。有些元素在测试树里是严格分级的(Listener, Config Elements,Pre-Processor,Post-Processor, Assertions, Times),有些事主要是按次序的(Controls,Samplers)。 当你新建一个test plan时,你会新建一堆有次序的Sampler Request, 代表要被执行的一组步骤。这些请求经常放在一个Controllers里面。