Jmeter
Jmeter简介
Jmeter是由Apache公司开发的一个纯Java的开源项目,既可以用于做接口测试 也可以用于做性能测试。
Jmeter具有高移植性,可以实现跨平台运行
Jmeter可以实现分布式负载。
Jmeter采用多线程,允许通过多个线程并发取样或通过独立的线程对不同的功能同时取样·
Jmeter具有较高扩展性
Jmeter安装
http://jmeter.apache.org/download_jmeter.cgi
Jmeter主要元件
- 测试计划:时使用Jmeter进行测试的起点,他是其它Jmeter测试元件的容器
- 线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容再Sampler中定义,它被线程组包含
- 配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容
- 前置处理器:负责在请求之前工作,常用来修改请求的设置
- 定时器:负责定义请求之间的延迟间隔
- 取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求。
- 后置处理器:负责在请求之后工作,常用获取返回的值
- 断言:用来判断请求响应的结果是否如用户所期望的。
- 监听器:负责收集测试结果,同时确定结果显示的方式。
- 逻辑控制器:可以自定义Jmeter发送请求的行为逻辑,它与Sampler结合使用可以模拟负责的请求序列。
Jmeter元件的作用域和执行顺序
元件作用域
配置元件:影响其作用范围内的所有元件
前置处理器:在其作用范围内的每一个sampler元件之前执行。
定时器:在其作用范围内的每一个sampler有效
后置处理器:在其作用范围内的每一个sampler元件之后执行
断言:在其作用范围内对每一个sampler元件执行后的结果进行校验
监听器:在其作用范围内对每一个sampler元件的信息收集并呈现
总结:从各个元件的层析结构判断每个元件的作用域
元件执行顺序
配置元件->前置处理器->定时器->取样器->后置处理器->断言->监听器
- 前置处理器,后置处理器和断言等组件只能对取样器起作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。
- 如果在同一作用域内有多个同意类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。
Jmeter进行接口测试流程
使用Jmeter进行接口测试的基本步骤如下:
-
测试计划
-
线程组
-
HTTP Cookie管理器
-
Http请求默认值
-
Sampler(http请求)
-
断言
-
监听器(查看结果树,图形结果,聚合报告等)
各组件详解
测试计划
打开Jmeter,在菜单左侧出现 “测试计划”。在这里测试计划我们可以把它理解成新建的空白项目,在这个空白项目下面可以添加一系列的接口。
线程组
元件描述:一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。
- 线程数:即虚拟用户数。设置多少个线程数也就是设置多少虚拟用户数
- Ramp-Up时间(秒):设置虚拟用户数全部启动的时长。如果线程数为20,准备时长为10秒,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。
- 循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为10,那么每个线程发送10次请求。总请求数为20*10=200。如果勾选了“永远”, 那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。
HTTP Cookie管理器
元件描述:HTTP Cookie管理器可以像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,cookie manager会自动存储该请求的cookies,并且后面如果发送同源站点的http请求时,都可以用这个cookies。
HTTP请求默认值
元件描述:HTTP请求默认值是为了方便填写后续内容而设置。主要填写[服务器名称或IP]和[端口号],后续的HTTP请求中就不用每次都填写IP地址和端口号了。
HTTP请求
元件描述:HTTP请求包括接口请求方法、请求路径和请求参数等。
HTTP请求详解
- 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
- 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
- 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
- 端口号:目标服务器的端口号,默认值为80 。
- 协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS ,默认值为http 。
- 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、TRACE、OPTIONS、DELETE等。
- 路径:目标URL路径(不包括服务器地址和端口)
- 内容编码:内容的编码方式,默认值为iso8859
- 自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
- 使用keep Alive :保持jmeter 和目标服务器之间的活跃状态,默认选中
- 对Post使用multipart/from-data:当发送POST 请求时,使用multipart/from-data方法发送,默认不选中。
- 同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。
响应断言
元件描述:检查接口是否访问成功。如果检查失败的话会提示找不到断言的内容,没提示的话就代表成功了。
Apply to
指断言作用范围,通常发出一个请求只触发一个请求,所以勾选“main sample only”就可以;若发一个请求可以触发多个服务器请求,就有main sample 和sub-sample之分了。
(1)Main sample and sub-samples:作用于主请求和子请求
(2)Main sample only:仅仅只作用于主请求
(3)Sub-samples only:仅仅只作用于子请求
(4)Jmeter Variable:作用于jmeter变量(输入框内输入jmeter变量名称)
测试字段
响应文本(匹配返回的json数据)、响应代码(匹配返回码:如200, 404,500等)、响应信息(匹配响应信息如“OK”字样)、响应头(匹配响应头)、请求头(匹配请求头)、URL样本(匹配请求的url链接,如果有重定向则包含请求url 和 重定向url)、文档(文本)、忽略状态(一个请求有多个响应断言,第一个响应断言选中此项,当第一个响应断言失败时可以忽略此响应结果,继续进行下一个断言。如果下一个断言成功则还是判定事务是成功的)、请求数据(匹配请求数据)
模式匹配规则
包括:响应内容包含需要匹配的内容即代表响应成功,支持正则表达式。
匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式。
字符串:响应内容包含需要匹配的内容才代表响应成功,大小写敏感,不支持正则表达式
相等:响应内容要完全等于需要匹配的内容才代表响应成功,大小写敏感,不支持正则表达式
否:相当于取反,如果结果为true,勾上否就是false
或者:如果不想用AND连接(所有的模式都必须匹配,断言才算成功),用OR选项可以用于将多个断言模式进行OR连接(只要一个模式匹配,断言就是成功的)
测试模式
其实就是断言的数据。点击“添加”按钮,输入要断言的数据。
监听器
查看结果树
元件描述:树状形式显示接口的访问结果,包括请求结果、请求内容、服务器的响应内容。
聚合报告
聚合报告参数详解:
- Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
- #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
- Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
- Median:中位数,也就是 50% 用户的响应时间
- 90% Line:90% 用户的响应时间
- Min:最小响应时间
- Max:最大响应时间
- Error%:错误率——错误请求数/请求总数
- Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。