简介
测试计划是创建所有组件的基础,Jmeter的所有操作都需要在测试计划中进行,一个最小单元的测试至少包括一个测试计划,一个线程组及多个采样器。
测试计划
Jmeter所有的测试组件都需要创建在测试计划下,可设置作用域为整个测试计划的用户定义变量,并做简单的管理。
Jmeter启动后会默认添加一个测试计划,用户可在右侧详情区域的Name栏自定义线程组名称。
如果用户想要记录采样器的请求报文和返回报文内容,需要勾选 “Functional Test mode”,并且JMeter会将记录的数据写入监听器里设置的文件中。调试脚本时这个选项很有用,但因需要不停往文件内写入,在正式测试环境中会很影响测试机性能因此需要关闭该功能。
线程组
线程组是测试计划的实际执行者,和实际请求发起相关的组件采样器和控制器只能建在线程组下,其他组件则无此要求。
右键点击左侧树形结构区域的测试计划即可创建线程组,线程组的右侧详情区域可配置相关参数。主要设置内容有线程数、线程启动时间、循环次数。
线程数(number of threads)就是一次循环会启动的线程数,一个线程就是模拟的一个用户操作。如:线程数为10,就表示Jmeter会模拟10个用户同时向待测系统发起请求的情况。没个线程都会完成测试计划的所有操作步骤,且相互独立。
线程启动时间(ramp-up period)用来控制所有线程的启动时间。如:设置线程数为10,线程启动时间为100,则Jmeter会在100秒内启动全部10个线程,也就是每隔10秒依次启动线程。这样做的目的是为了防止在在初始化时给服务器造成过大压力,因此不能设置过短,也不能太长,否则前一个线程已经完成才启动后一线程就达不到压力测试的效果。最开始通常是一个线程一分钟,然后再根据实际情况做增减。
循环次数(Loop count)用来控制线程组循环执行的次数。如:设置线程数为10,循环次数为2,则Jmeter会执行两轮测试,即总线程数为10*2=20。
以上是对线程间的控制,还可以对线程组做控制,勾选Scheduler复选框然后配置Duration (seconds) 和 Startup Delay (seconds)即可控制整个线程组的执行时长和启动延迟时间
逻辑控制器
逻辑控制器可用来控制其子组件的请求发送逻辑顺序。 右键点击树形结构的线程组即可创建逻辑控制器,逻辑控制器的种类有多种。如:只执行一次控制器,该逻辑控制下的请求将只在初次启动的线程中执行,比如常见的登录操作;交替控制器,该控制器下的请求每次只选择一个执行;还有常见的if控制器和循环控制器等。
采样器
采样器是执行测试的核心,用于发起请求接收返回。
采样器可创建在线程组或逻辑控制器下。支持的采样器有http采样器,ftp采样器,JDBC 采样器,Java object 采样器,JMS 采样器,JUnit Test 采样器,LDAP 采样器,Mail 采样器,OS Process 采样器,TCP 采样器。
Jmeter支持对采样器进行配置,同时也可用其他组件进行配置,后面会新开其他篇进行详细描写,就不再赘述。
监听器
监听器用于记录展示测试运行过程中请求的相关数据信息。
其中图表结果监听器已图表化的形式展示请求响应时间;查看结果树可展示发起的请求和响应的详细信息,可展示标准xml和html的返回报文;还有多种可以做总结与汇总的监听器类型。同时通过设置可将监听器监听到的信息保存至文件,还可以自定义需要保存至文件的字段。
定时器
定时器用于在各个请求发送期间设置延时。
Jmeter默认情况下在发起各个请求时是不会延时的,这有可能会造成段时间内服务器压力过大,在线程组下添加定时器可保证在各个采样器发起请求间延迟设定的时间。
定时器的时间是叠加的,两个请求间的延迟总时长是由作用于该区域的定时器设定的时间相加获得。
断言处理器
断言处理器可用于判断请求返回的数据是否符合我们的预期。
我们可以利用断言判断一个http请求返回的状态,可以检查返回的数据是否包含特定的字符串或能匹配上正则表达式。对于json、html、xml等特定的格式还能能直接判断具体字段取值是否符合预期。
断言结果会展示在某些监听器中。
配置元素
配置元素服务于采样器,常见的配置元素有http头管理器、cookie管理器等,可用于为采样器提供默认参数,或修改参数等。
配置元素作用域一般范围为自己父级组件,同级组件,及同级子组件。有个例外是用户定义变量组件,无论定义的位置在哪里,这个组件的优先级较高在测试开始时便被执行,因此一般定义在线程组的开始位置。
前置处理器
前置处理器会在请求发送前执行,前置处理器一般用于在请求发送前修改其参数或更新变量,所以一般将其加于特定采样器下。
后置处理器
后置处理器会在请求发送后执行,后置处理器可用于提取返回体中的信息,并用于后续请求,所以一般将其加于特定采样器下。
执行顺序
同一级别的组件列表,执行顺序如下: 0 配置元素 1 前置处理器 2 定时器 3 采样器 4 后置处理器 5 断言处理器 6 监听器 定时器、断言、前置处理器、后置处理器只有在其作用域中存在采样器时才会运行。逻辑处理器和采样器的执行顺序按其在树形结构中的位置执行。
作用域
Jmeter的作用域既按层级发生作用,也按顺序发生作用。测试计划树形结构中的有些元素是严格按照层级结构发生作用(监听器、配置元素、前置、后置处理器、断言处理器、定时器),有些则按照所处顺序执行(控制器、采样器)。如下结构: 请求发生的顺序为one、two、three、four。
一些控制器可能会控制其组件的执行顺序,后续会出相关章节。
对于层级结构的组件,如果其父级为采样器,则它的作用域只作用于父级采样器。如果父级为控制器,则它的作用域为父级控制器下的所有自组件。如下结构: 图里的Timer #1 作用与Simple控制器下的所有子组件,即two、three、four,Assertion #1作用于three、Timer #2作用域为整个线程组,即one、two、three、four、five。应timer的时间是相加,所以在发起请求前two、three、four会等待timer #1+ timer #2的时间,而one、five则等待timer #2的时间。
配置与变量
Jmeter的配置是通过jmeter.properties定义,作用域为全局,即线程间也能共享定义的值。除了可以在配置文件中定义还可以通过函数setProperty 进行定义。
Jmeter变量是作用域单独线程的,在测试计划运行的过程中变量的赋值可被改变。
|