1. Jmeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。

JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。

另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。

2. Jmeter的下载和安装

Jmeter的使用需要java环境,需要先下载安装jdk;

下载Jmeter工具包,解压后进入bin文件夹,点击jmeter.bat即可运行;

可下载插件,拥有更多专业元件。
http://jmeter-plugins.org/downloads/all/下载JmeterPlugins-Standard-1.1.3.zip,解压后将JmeterPlugins-Standard.jar放在XXX\Apache\jmeter\lib\ext下即可

3. 接口测试方法

1.什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

2.准备数据

获得测试URL中需要用的参数名称及值的获取方式。

<p>获得各请求的方法、IP、测试URL、测试header、测试body及判断基准</p>

  • 1

测试实施

将测试用例中的各项写入软件中。

(1)创建线程组

java junit 压力测试 java接口压力测试工具_响应时间

(2)修改线程组名称

java junit 压力测试 java接口压力测试工具_测试计划_02

(3)为线程组添加元件

1.HTTP Cookie管理器

因为很多web网站都是需要登录后才可以进行操作,登录后产生的Cookie能够验证用户身份,在用软件进行测试时,需要通过验证,所以我们需要添加此管理器管理Cookie,它的值被整个线程共享(也可以被整个测试计划共享), Cookie在浏览器中取得。

java junit 压力测试 java接口压力测试工具_测试计划_03


java junit 压力测试 java接口压力测试工具_测试计划_04

2.HTTP 请求默认值

测试用例中每个接口的共同值可以用“HTTP 请求默认值”元件统计设置,省去每次请求都要填写的麻烦,它的值被整个线程共享(也可以被整个测试计划共享)。

java junit 压力测试 java接口压力测试工具_HTTP_05


java junit 压力测试 java接口压力测试工具_测试计划_06

3.用户定义的变量

将后续用到的变量添加到“用户定义的变量”,后续操作只需引用变量名称即可,它的值被整个线程共享(也可以被整个测试计划共享)。

java junit 压力测试 java接口压力测试工具_java junit 压力测试_07


java junit 压力测试 java接口压力测试工具_HTTP_08

4.HTTP请求

发送http请求需要用的元件。

java junit 压力测试 java接口压力测试工具_测试计划_09


java junit 压力测试 java接口压力测试工具_测试计划_10

5.HTTP信息头管理器

发送http请求需要加入信息头时用此元件,如线程组中的所有请求均需要信息头,则可将此管理器升级为整个线程组共享或者整个测试计划共享。

java junit 压力测试 java接口压力测试工具_java junit 压力测试_11


java junit 压力测试 java接口压力测试工具_java junit 压力测试_12

6.响应断言
发送请求后,需要通过比对响应结果是够符合判断基准来判断某条测试是否ok,通过人为判断是可行的,但是当请求数量较大时,人为判断效率低下,添加“响应断言” 能够提高效率(判断基准有多个时,可以添加多个断言)。

java junit 压力测试 java接口压力测试工具_测试计划_13



java junit 压力测试 java接口压力测试工具_java junit 压力测试_14

断言也就是我们用来判断请求是否成功的依据, 可以不配置,这样jmeter就会根据响应状态(200)来判断是不是请求成功.
比如我们要测的接口,成功的话返回这样的JSON字符串:

{
"resultCode":1
}
  • 1
  • 2
  • 3

失败的话返回这样的JSON字符串

{
"resultCode":0,
"errCode":"xxx"
}
  • 1
  • 2
  • 3
  • 4

那我们就可以这样设置:

java junit 压力测试 java接口压力测试工具_java junit 压力测试_15

如果想要根据响应码200来判断是否成功,按下面配置:

java junit 压力测试 java接口压力测试工具_响应时间_16

7.察看结果树

用于查看测试结果。

java junit 压力测试 java接口压力测试工具_响应时间_17

8.其他元件
(1)正则表达式提取器
可将某次响应返回数据中某些信息提取出来,用于后续操作。
(2)Debug Sampler
用于调试整个测试
(3)CSV Data Set Config
通过文件进行参数化的一个元件。

(4)开始测试

添加好各种元件及数据后,可进行测试,通过察看结果树察看各请求测试结果。

java junit 压力测试 java接口压力测试工具_HTTP_18

4. 压力测试方法

(1)线程组

java junit 压力测试 java接口压力测试工具_java junit 压力测试_19

(2)Constant Throughput Timer(固定吞吐量控制器)

java junit 压力测试 java接口压力测试工具_HTTP_20

可以选择下面这些监听器来帮忙分析:

java junit 压力测试 java接口压力测试工具_测试计划_21

(3)用表格察看结果 View Results in Table

java junit 压力测试 java接口压力测试工具_HTTP_22

各个字段的含义

Sample#——每个请求的ID;
StartTime——每个请求启动时间;
SampleTime——响应每个请求的时间(以毫秒为单位);
Status——请求状态,如果为勾则表示成功,如果为叉表示失败;
Bytes——请求的字节数;
Latency——延迟时间;
ConnectTime——请求连接用时。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(4)聚合报告 Aggregate Report

java junit 压力测试 java接口压力测试工具_java junit 压力测试_23


java junit 压力测试 java接口压力测试工具_HTTP_24

各个字段的含义

Label——取样器名称;
Samples——发给被测试应用的请求总数;
Average——请求响应时间的平均值;
Median——请求响应时间中值,即50%的请求响应时间都小于该值(一个统计学的概念);
90%Line——请求响应时间90%线,即90%的请求响应时间都小于该值;
Min——最小响应时间;
Max——最大响应时间;
Error%——出错率(出错的请求数/所有的请求数);
Throughput——吞吐量,每秒/每分钟(具体看“/”后面的单位)处理的请求数;
KB/sec——每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec;
【注意】总体值并不是各列对应记录的累加。是以所有Samples为样本的统计值,如:总体Min=min{各个Samples的Min},总体Max=max{各个Samples的Max}。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(5)总结报告 Summary Report

java junit 压力测试 java接口压力测试工具_响应时间_25

各个字段含义:

Label——取样器名称;
Samples——发给被测试应用的请求总数;
Average——请求响应时间的平均值;
Median——请求响应时间中值,即50%的请求响应时间都小于该值(一个统计学的概念);
90%Line——请求响应时间90%线,即90%的请求响应时间都小于该值;
Min:最小响应时间;
Max:最大响应时间;
Std.Dev——所有请求响应时间的标准差,即是“用表格查看结果”中的偏离;
Error%——出错率(出错的请求数/所有的请求数);
Throughput——吞吐量,每秒/每分钟(具体看“/”后面的单位)处理的请求数;
KB/sec——每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec;
Avg.Bytes——服务端返回给Request数据的平均值(服务端返回所有数据/请求数)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(6)聚合图表 Aggregate Report

这个的话就是将聚合报告以图表的形式展现出来了

java junit 压力测试 java接口压力测试工具_测试计划_26


java junit 压力测试 java接口压力测试工具_java junit 压力测试_27

纵轴是聚合报告中的字段, 横轴是请求响应时间

(7)察看结果树 View Results Tree

可以看到每个线程执行的情况,请求信息和响应信息

java junit 压力测试 java接口压力测试工具_HTTP_28

(8)响应时间图表 Response Time Graph

可以看出每个时间点,平均响应的时间

java junit 压力测试 java接口压力测试工具_响应时间_29


java junit 压力测试 java接口压力测试工具_HTTP_30

(9)图形结果 Graph Results

java junit 压力测试 java接口压力测试工具_java junit 压力测试_31

横轴是时间轴, 可以看出

No of Samples 样本数目——样本总数(线程数*循环次数),或者说是发送给测试应用的请求总数;
Latest Sample 最新样本——服务器响应最后一个请求的时间;
Average 平均——请求响应时间的平均值;
Deviation 偏离——请求响应时间的标准差;
Throughput 吞吐量——每秒/每分钟(具体看“/”后面的单位)处理的请求数;
Median 中值——请求响应时间中值,即50%的请求响应时间都小于该值。

(10)监听器

使用插件JMeter Plugins可以看到以下统计图表:

java junit 压力测试 java接口压力测试工具_响应时间_32

监听器 jp@gc - Transactions per Second

java junit 压力测试 java接口压力测试工具_响应时间_33

监听器 jp@gc –PerfMon Metrics Collector

java junit 压力测试 java接口压力测试工具_测试计划_34

(11)使用非GUI界面运行压力测试

java junit 压力测试 java接口压力测试工具_HTTP_35

非GUI压力测试步骤:

在GUI界面设置并发数、测试时间等,添加各元件,保存测试计划,并关闭软件;

使用非GUI界面,用指令启动压力测试;
指令例如:D:\Program Files\apache-jmeter-3.1\bin>jmeter -n -t testplan.jmx -l listener.jtl

打开jmeter.bat,在聚合报告元件中载入“listener.jtl”,查看聚合报告;

在监视器中中载入“listener.jtl”,查看各曲线图。