一 测试计划:
是使用jmeter测试的起点,是其他测试元件的容器,一个完整的测试计划包括多个线程组,逻辑控制器,取样器,监听器,配置元件
用户定义的变量: 测试计划上可以添加用户定义的变量。一般添加一些系统常用的配置,比如直接${变量名}, eg: ${IP},${Port}。
如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用户自定义变量组件。如:
二 线程组:测试里每个任务都需要线程去处理,所有任务必须在线程组下面创建
1.线程数:设置发送请求的用户数,即并发数
2.Ramp-Up: 如果参数为2,则表示线程数在2秒内初始化完毕,每秒启动的线程数为:线程数/2
3.循环次数:请求的重复次数,如果参数设置为10,线程数为200,则总的请求数为200*10
4.栗子:200个用户在10秒之内访问百度网页,这样可以设置线程数为200,Ramp-Up为10,这样就表示200个用户在10秒内访问网页,也就是说1秒内有20个用户同时访问百度网页
注意:如果同一个线程组下面的http请求端口号,地址信息是一样的,则可以在现成组下面添加http请求默认值设置。
三 取样器
可以认为所有的测试任务都由取样器承担,如:http请求,ftp请求,JDBC请求;取样器告诉jmeter发送一个请求到指定服务器,并等待服务器的请求。取样器会按照其顺序执行,还可以用逻辑控制器来改变取样器运行的重复次数。
备注:请求的协议,服务器名称或ip, 请求方式, 向服务器请求的路径,请求的参数
四 逻辑控制器
可以控制jmeter发送请求的测试逻辑,它与sampler结合使用可以模拟复杂的请求序列,其中的控制器是可以组合使用,里面包括:
1. 循环控制器:设置请求的循环次数或永远循环,可用于压力测试
2. 事务控制器:将多个请求放在同一事务中。选中Gegerate parent sampler, 则聚合报告中只显示事务控制器的数据,不会显示其中各个请求的数据,反之则全部显示
3. 简单控制器:测试用例顺序执行
独立运行每个线程组: 用于控制测试计划中的多个线程组的执行顺序。如上图,线程组1和线程组2的线程是并行执行的,执行过程线程的执行顺序是不可预料的。
如果勾选了独立运行每个线程组
,可以保证线程组1的执行一定在线程组2之前,线程组1执行完毕,才会执行线程组2。
线程组中的取样器的执行顺序: 默认是从上到下执行。交替控制器、随机控制器、随机顺序控制器和循环控制器等可以改变取样器的执行顺序。
函数测试模式(Functional Testing) 如果选中了此选项,监听组件如“查看结果树”配置了保存到一个文件中,那么jmeter会将每次的请求结果保存到文件中。一般不建议勾选。
五 断言 (Assertion)
它的作用和loadrunner中的检查点类似,对取样器返回的结果给出判断,是否正确。 用户可以使用断言来检查从服务器获得的响应内容,用来判断请求相应的结果是否如用户所期望的。
使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。
使用断言的方法:
△在选择的Sampler下添加对应的断言;配置好响应的检查内容(根据断言情况而定,有的断言控制面板不需要添加任何内容,如XML Assertion)。
△添加一个断言结果的监听器(从监听器中添加),通过“断言结果”可以看到是否通过断言;对于一次请求,如果通过的话,断言结果中只会打印一行请求的名称;
如果失败,则除了请求的名称外,还会有一行失败的原因(不同类型的断言,结果不同)。
PS:一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。
1. 响应断言:
apply to:适用范围
Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器
Main sample only:仅作用于父节点取样器
Sub-samples only: 仅作用于子节点取样器
JMeter Variable: 作用于jmeter变量(输入框内可输入jmeter的变量名称)
要测试的响应字段:要检查的项
响应文本:响应服务器返回的文本内容,http 协议排除header部分
响应代码:匹配响应代码,比如http请求中,“200”代表成功
响应信息:匹配响应信息,处理成功返回“成功”或者“OK”字样
Response Headers: 匹配响应头中的信息
URL样本
Ignore status:忽略返回的响应报文状态码
模式匹配规则:
包括:返回结果包括你指定的内容
匹配:(好像跟Equals查不多,弄不明白有什么区别)
Equals:返回结果与你指定结果一致
Substring:返回结果是指定结果的字串
否:不进行匹配
要测试的模式: 即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理
2. 断言持续时间:
用于判断服务器的响应时间
作用对象:服务器
APPly to: 适用范围
Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器
Main sample only:仅作用于父节点取样器
Sub-samples only: 仅作用于子节点取样器
Duration to assert:持续断言
Duration in milliseconds:响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功!
3. Beanshell断言
当某些断言不能满足使用时,比如多个断言或的情况,可以使用Beanshell Assertion来进行处理。Beanshell是一种松散类型的脚本语言,一直完全符合java语法的Java脚本语言。
Name: 断言的名字
Comments:注释(对这个断言进行一个解释,备注)
Reset bsh.interpreter before each call: 在每次调用Bean Shell之前重置bsh.interpreter类(bsh.interpreter是Bean Shell脚本语言的一种类,也可以理解为一种解析器)
Parameters(String Parameters and String []bsh.args):String参数(String []bsh.args是主类main函数的形式参数,是一个String 对象数组,可以用来获取命令行用户输入进去的参数)
Script file:脚本文件(可以填入脚本文件路径)
Script(see below for variables that are defined):参照下文定义的变量(使脚本文件参照定义的变量来运行)
栗子:“code:200”或者“code:800034”都认为断言成功时,可以使用如下方法来进行处理:
4. Json 断言
在Json Path中添加匹配规则,在Expect value中填写期望值
Assert JSON Path exists: $.
新增一个 JSON Assertion,在 $. 后面加入需要检查的json字段;
比如截图中我察看的是“result”;
Expected Value:是要检查的json结果;
下图是我的察看结果树的截图:
我测试用例中正常的result是11;
如果JSON Assertion 的Expected Value设置result值为11;
则断言结果是请求的名称,察看结果树的结果是绿色的;
如果是JSON Assertion 的Expected Value设置result值为12;
则断言结果是这样的:
5. xpath断言
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。
作用对象:针对返回信息为XPAth的数据类型进行断言
XML Parsing Options:XML解析选项
Use Tidy(tolerant parser):使用Tidy(容错解析器),默认选择quiet(不显示)
Quiet:不显示
Report errors:错误报告
Show warnings:显示错误
Use Namespaces:使用名称空间
Validate XML:验证XML(文件包/数据)
Ignore Whitespace:忽略空格(这允许你指定语法分析器可以忽略哪个空格,而哪个空格是重要的)
Fetch external DTDs: 获取外部DTDs
XPath Assertion: 输入框中写入xpath断言,点击Validate验证其正确性
True if nothing matches:确认都不匹配
6. 比较断言(compare assertion)
这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;
作用对象:需要替换的字符串
Select Comparison Operators:选择比较运算符
Compare Content:可以选择比较的内容类型(true/false或者自定义,编辑)
Compare Time:比较时间(可以设定比较的时间,单位为秒,默认为-1)
Comparison Fitters:比较修改工具
regular expression substitutions:替换正则表达式
Regex String:要替换的字符串(可从断言结果中选择)
substitutions:替换的字符串(替换结果)
六 监听器(结果分析)
1. 察看结果树
添加察看结果树,放的位置不同,察看的结果也不同。在线程组下添加察看结果树,察看线程组下所有请求的结果;放在具体某个请求下,只查看此请求的结果;若放在某个控制器节点下,则查看此控制器下节点执行的结果。
参数说明:
(1)名称:控制器的描述性名称,显示在左边节点上,并用于命名事务
(2)注释:控制器注释信息,非必填项
(3)文件名:载入文件名
(4)Log/Display Only: 仅日志错误、Success ;勾选中显示对应的日志信息
(5) Configure:定义report中自己所关心的数据项。
(6) 取样器结果:
Thread Name: 线组名称
Sample Start: 启动开始时间
Load time: 加载时长
Latency: 等待时长
Size in bytes: 发送的数据总大小
Headers size in bytes: 发送头大小
Body size in bytes: 发送数据的其余部分大小
Sample Count: 发送统计
Error Count: 错误统计
Response code: 返回码
Response message: 返回消息
Response headers:返回头信息
(7)请求 - 数据获取方式、路径、地址等以及传递的参数、cookie
(8)响应数据 - 响应加载的页面html
2. 聚合报告 (Aggregate report)
记录这次却被行测试总请求数、错误率、用户响应时间(中间值、90%、最少、最大)、吞吐量等,用以帮助分析被测试系统的性能,如果大家都是做web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。
参数说明:
- Label 取样器别名,如果勾选Include group name ,则会添加线程组的名称作为前缀
- # Samples 取样器运行次数
- Average 请求(事务)的平均响应时间
- Min 请求的最小响应时间
- Max 请求的最大响应时间
- Std. Dev 响应时间的标准方差
- Error % 事务错误率
- Throughput 吞吐量 也就是TPS
- Received KB/sec 每秒收到的千字节
- Sent KB/sec 每秒发送的千字节
- Avg. Bytes 响应平均流量
3. 汇总报告(summary report)
Summary Report 为测试中的每个不同命名的请求创建一个表行。这与聚合报告类似,只是它使用更少的内存。
参数说明:
- Label 取样器别名,如果勾选Include group name ,则会添加线程组的名称作为前缀
- # Samples 取样器运行次数
- Average 请求(事务)的平均响应时间
- Min 请求的最小响应时间
- Max 请求的最大响应时间
- Std. Dev 响应时间的标准方差
- Error % 事务错误率
- Throughput 吞吐量 也就是TPS
- Received KB/sec 每秒收到的千字节
- Sent KB/sec 每秒发送的千字节
- Avg. Bytes 响应平均流量
4. 汇总图(Aggregate Graph)