概述
JMeter 的主要测试组件总结如下:
- 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
- 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
- 监听器负责收集测试结果,同时也被告知了结果显示的方式。
- 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
- 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
- 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
- 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
- 定时器负责定义请求之间的延迟间隔。
常用测试
最简单的Web测试计划只需要三个 JMeter 的测试元件,如下图:
其中:
- 在线程组中定义线程数、产生线程发生的时间和测试循环次数。
- 在http请求中定义服务器、端口、协议和方法、请求路径等。
- 表格监听器负责收集和显示结果。
添加一个测试计划
添加线程组
点击测试计划,右键选择添加菜单项,选择子菜单Threads(Users),点击线程组,如下图:
配置线程组参数
名称:测试接口名称
线程属性
- 线程数:模拟的用户数量
- Ramp-up Period(in seconds):达到指定线程数所需要的时间。举例:线程数设置为50,此处设置为5,那么每秒启动的线程数 = 线程数50/5 = 10
- 循环次数:选中“永远”,则一直循环下去。
添加HTTP信息头管理器
点击线程组(产品列表),右键添加》配置元件 》 “HTTP信息头管理器”。如下图:
在面板中“信息头存储在信息头管理器中”添加一组http头部信息
名称:Content-Type
值:application/json
添加HTTP请求
点击线程组(产品列表),右键添加》Sampler 》 “HTTP请求”。如下图:
在Basic面板中配置参数
服务器名称或IP:应用ip地址
端口号:应用端口号
Http请求方法:选择相应的请求方式,如POST请求。
路径:请求地址
参数:在Parameters或者Body Data中添加请求参数。
结果分析
Summary Report
点击HTTP请求,右键添加》监听器》Summary Report。如下图:
做性能测试时,Summary Report可用于分析请求吞吐量、平均响应时间、最长响应时间等信息。例如只有一个(产品列表)接口的请求,那么在Summary Report中,会显示一行数据,共有10个字段,含义分别如下。
- 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
- Avg.Bytes:服务端返回给Request数据的平均值,可以理解为:服务端返回所有数据/请求数
察看结果树
点击HTTP请求,右键添加》监听器》察看结果树。如下图:
用察看结果树,可以观察每个请求的请求、响应返回信息。
- 取样器结果:显示的是取样器相关参数(客户端参数与响应参数)
- 请求:发送请求的具体值
- 响应数据:服务端返回的相应参数
图形结果
点击HTTP请求,右键添加》监听器》察看结果树。如下图:
统计结果: - 样本数目:发出去的请求总数
- 最新样本:最近一个Request的响应时间
- 平均:所有Request响应时间的平均值
- 偏离:所有Request响应时间的标准差
- 吞吐量:单位时间内(一般是1分钟)处理Request的个数
- 中值:所有Request响应时间的中间值
使用CSV Data Set Config参数化方法
点击产品列表,右键添加》配置元件》CSV Data Set Config。如下图:
面板说明
- Filename:填写文件路径和文件名称。可以指保存信息的文件目录,可以相对或者绝对路径。如果文件放在jmeter的bin目录下,直接写文件名称就可以。
- File Encoding:文件编码,默认为ANSI。
- Variable names:参数名称(有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符使用下面的“memberId,pagerno”中定义的。
- Delimitet:定义分隔符,用于分隔文件中的参数,及上述Variable Names中定义的参数名称。
- Allow Quoated data: True –设置文件中的参数值都必须用引用引起来,False则不需要。
- Recycle on EOF:到了文件尾处,是否循环读取参数。注:程序从CSV Data Set Config文件中,每次读取一行,每次读取的参数仅供一个线程使用(类似Loadrunner里面的参数唯一值功能),如果线程数超过文本的记录行数,那么可以选择 True (从头再次读取)。
- Stop thread on EOF:到了文件尾处,是否停止线程。
当Recycle on EOF 选择true时,Stop threadon EOF选择true和false无任何意义,通俗的讲,在前面控制了不停的循环读取,后面再来让stop或run没有任何意义
当Recycle on EOF 选择false时,Stop threadon EOF选择true,线程4个,参数3个,那么只会请求3次
当Recycle on EOF 选择false时,Stop thread on EOF选择false,线程4个,参数3个,那么会请求4次,但第4次没有参数可取,不让循环,所以第4次请求错误 - Sharing Mode: 设置是否线程共享。
新建csv文件
- 1、新建一个orderlist.csv文件,按需要将参数填写在一列中。(不需要写变量名称,直接写变量值)内容如下:
- 2、在Configure the CSV Data Source中配置Filename属性,即参数文件路径。
参数化
- 格式:${argue_name} 的方式引用Variable name
回到HTTP请求面板,在Body Data配置请求参数(也可在路径中配置参数:&memberId=${memberId})。修改参数配置如下:
非常参数化:
引用CSV Data Set Config,参数化参数:
验证请求参数
- 1、选择产品列表,右键点击Start,启动测试脚本,如下图:
- 2、回到察看结果树面板,查询请求参数是否替换成csv脚本中参数。
基础知识
- 1、吞吐量:是指在没有帧丢失的情况下,设备能够接受的最大速率。
- 2、存储的最小单位是字节Byte,对于存储单位,有以下几个单位,GB、MB和KB,那么这三者之间的换算关系是:1GB=1024MB,1MB=1024KB,1KB=1024Bytes。
Bit :“位”,称为bit,也就是比特,有的时候也称为位。一个字节为8位二进制表示。
Byte:“字节”,一个字节就是8比特。 - 3、Mbps (million bits per second 兆位/秒) 代表每秒传输1,000,000比特。该缩写用来描述数据传输速度。例如:4Mbps=每秒钟传输4M比特。
数据传输速率的单位,字母b(bit)是比特和字母 B (Byte)是字节。 - 4、吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps.先让我们来看两者对应的英语,吞吐量:throughput ; 带宽: Max net bitrate 。当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数。我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。
- 5、方差和标准差都是用来描述一组数据的波动性的(集中还是分散),标准差的平方就是方差。方差越大,数据的波动越大。