jmeter源码学习三-jmete基础组件

基础组件

  • 测试计划
    任何测试计划(test plan)的第一个元素,所有控制器(Controller)和取样器(Sampler)必须作为线程组的子元素,其它元素,如监听器(Listener),可直接作为测试计划的子元素,这种情况下,子元素将作用于所有线程组。
    avatar
  • 线程Threads(Users)
    avatar
    线程组主要用于控制执行测试的线程数量,允许:
  1. 取样错误后要执行的动作
    a.继续:默认选项,出错后后续的线程继续运行
    b.Start Next Thread Loop:出错后启动下一组线程运行
    c.停止线程:后续的线程停止运行,但是会返回出错前的结果
    d.停止测试:与停止线程的差异在于不返回出错前的结果
    5)Delay Thread Creation until needed:直到需要时延迟线程的创建
    6)调度器:设定测试运行时间:比如,我们在要设置此线程组的执行时长为30分钟,我们可以设置脚本运行的开始时间及结束时间,在工具栏点击启动按钮,此测试计划便可按指定的时间执行测试。
  2. 设置线程数量 :
    虚拟用户数,代表发送请求的用户数,一个线程数占用一个进程或线程。
  3. 设置ramp-up period
    所有线程在多少时间内启动,单位是秒,为0时代表一次请求即并发。如果线程数为30,Ramp-Up Period为2,由表示30个用户线程在2s内全部启动,这个设置,让用户并发广义上的并发,也就是说是在2s内,这30个虚拟用户,每个用户以2/30s的间隔登录系统,达到多用户并发在线的状态。
    TIPS:ramp-up period时间设置要适当,不能太短,防止测试开始时会产生过大的工作负载,也不能太长,必须保证最后一个线程在第一个线程结束之前开始运行(除非故意要那样做).一般情况下,可设置Ramp-up period = 线程数,在此基础上,根据需要上下调整
  4. 设置执行测试的次数
    每个线程发送请求的次数。如果线程数为30,循环次数为8,那么每个线程发送100次请求,那么此次的性能测试计划共向应用系统发送业务请求次数是301008=24000次,以达到业务高请求。
  5. Delay Thread Creation until needed:直到需要时延迟线程的创建
  6. 调度器:设定测试运行时间:比如,我们在要设置此线程组的执行时长为30分钟,我们可以设置脚本运行的开始时间及结束时间,在工具栏点击启动按钮,此测试计划便可按指定的时间执行测试。

控制器(Controllers )

Jmeter 拥有两种类型的控制器:取样器(Sampler)和逻辑控制器(Logical Controller)

  • 取样器(Sampler)
    Sampler:用于发送请求给服务器.例如,如果你想发送一个HTTP请求,添加一个“HTTP请求”Sampler,按它们出现在测试计划tree视图中的顺序执行Sampler。
    Sampler包含:
    FTP Request
    HTTP Request
    JDBC Request
    Java object request
    LDAP Request
    SOAP/XML-RPC Request
    WebService (SOAP) Request
    如果要发送多个相同类型的请求(比如,HTTP请求)到相同服务器,可考虑使用一个默认配置元件.一个控制器有一个或多个缺省的默认元件。记得添加一个监听器到测试计划以便查看或存储请求结果到磁盘.添加Asertion到Sampler,查看Jmeter对请求响应的基本验证.例如,在web应用压测中,服务器可能返回一个成功的”HTTP Response”的代码,但是页面可能有错误,或者缺失.你可以添加一个assertion来检查某些html标签(tag),符串等.(可用正则表达式)
    avatar
  • 逻辑控制器(Logical Controller)
    Logical Controller用于自定义发送请求的逻辑,可改变它的子元素的请求顺序,重复次数等.
    avatar
  • 测试片段(Test Fragments)
    Test Fragment为一种特殊类型的控制器,和tree视图中和线程组处在同一层次。和线程组不同的是,除非被模块控制器(Module Controller)或者包含控制器(Include_Controller)引用,否则不会被执行
  • 监听器(Listeners)
    Listeners提供对Jmeter在运行测试案例时采集的信息访问.图形结果树(Graph Results)监听器在图形上绘制响应时间;“查看结果树(View Results Tree)”监听器显示request和response取样器的详细信息,且可展示基于HTML和XML的响应表现形式.其它监听器提供,摘要或汇总信——此外,监听器可指示保存数据到一个文件,供后续使用。每个监听器提供一个输入域来填写,保存数据的文件
  • 定时器(Timers )
    Jmeter不间断的线程发送每个请求。建议添加一个定时器到线程组,来设置一个延迟。如果你不添加延迟,Jmeter可能在一段很短的时间内制造大量请求压倒服务器.定时器将导致Jmeter在发送定时器作用范围内的每个sampler前等待一段时间。如果添加多于一个定时器到线程组,Jmeter采用定时器的设置的延迟时间的总和,执行每个请求取样器前等待一段时间,该时间为前面的时间总合。定时器可以添加到sampler或controller以约束他们要影响的sampler.
  • 断言(Assertions )
    断言允许你预测从被测服务器接收的真实结果.使用断言,可测试你的应用程序是否返回你要的结果.
  • 前置处理器(Pre-Processor Elements )
    一个Pre-Processor优先于Sampler Request.如果一个Pre-Processor关联到一个Sampler,那么它优先于sampler运行. Pre-Processor最经常用来修改Sampler请求的的设置或更新非来字响应文本的变量.
  • 后置处理器 (Post-Processor Elements )
    比Sampler Request后执行。常用来处理响应数据或从中提取值

执行顺序 (Execution order )

在test plan(测试计划)中的元件按照以下顺序执行:
(1) Config Elements**(配置元件)
(2) Pre-porcessors(前置处理器)
(3) Timer(定时器)
(4) Sampler(取样器),Test Fragment(测试片段 , 跟函数没有区别,所以个人觉得可以直接理解为一个Sampler)
(5) Post-porcessors(后置处理器)
(6) Assertions(断言)
(7) Listener(监听器)

注意:定时器,断言,前、后置处理器仅在有Sampler的情况下才被执行,Logic Controllers 和Samplers按tree视图中的顺序执行。其它元素依据他们的所处的作用域范围和类型进行处理,同种类型的元素按他们出现在tree视图的顺序进行处理。
例如
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

作用范围

  1. sampler(取样器),包含http请求、ftp请求等。没有作用域。网上说是器与其他元件产生交互所以没有作用域。但我个人觉得存在交互,比如用户自定义参数、正则提取器。所以个人认为是有作用域的,只不过范围比较小。
  2. Logic Controller(逻辑控制器),内包含各种控制器,如if、foeach等控制器。其本身只对其子节点的sampler有效。
  3. Config Elements(配置元件):包含session、cookie等管理器,影响其范围内的所有元件。
  4. Pre-porcessors(前置处理器):在sampler之前执行,如sampler需要大量参数配置时(如post请求需要携带大量参数),作用域其范围内的sampler。
  5. Post-porcessors(后置处理器):在sampler之后执行,如下一个请求需要钱一个请求请求结果时。作用域其范围内的sampler。
  6. Timer(定时器):对其作用范围内的每一个sampler有效
  7. Assertions(断言):对其作用范围内的每一个sampler元件的响应头Response Headers、响应体Response body、或者请求头等做出校验。
  8. Listener(监听器):收集其作用范围内的每一个sampler元件的执行情况,返回并统计。可表格形式展现,也可图表形式,不过图表形式可能需要安装扩展插件。
  9. Test Fragment(测试片段),它的主要作用是模块化测试过程,类似于编程语言中的函数。即,将测试过程封装成测试片段,就可以在其他地方直接引用了。作用范围内的每一个sampler。