Jmeter 介绍

Jmeter 是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试)。而且用Jmeter 来测试 Restful API, 非常好用。

Jmeter 是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language 来选择语言

下面来看具体使用

下面以一个简单的查询来具体操作一下

新建一个Thread Group

必须新建一个Thread Group, jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建。

线程组:JMeter是由Java实现的,并且使用一个Java线程来模拟一个用户,因此线程组就是指一组用户的意思,这些虚拟用户用来模拟访问被测系统。

java压力测试类 java接口压力测试_线程组

线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。

线程组常用设置:

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  • ramp-up period:设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程
  • 循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

设置合理的线程数对于能否达到测试目标有决定性的影响。除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选“调度器”,进行调度器配置。

设置:线程数为10,其它参数默认。

新建一个 HTTP Request

添加完成线程组后,在线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。对于jmeter来说,取样器(Sampler)是与服务器进行交互的单元。一个取样器通常进行三部分的工作: 

1、向服务器发送请求

2、记录服务器的响应数据

3、记录响应时间信息 

java压力测试类 java接口压力测试_HTTP_02

 

 我这里就是添加一个测试页面,此页面对应一个请求,这里通过一个get方法:http://127.0.0.1:9601/v1/role/list,来进行设置

java压力测试类 java接口压力测试_线程组_03

一个HTTP请求有着许多的配置参数,下面将详细介绍:

名称: 本属性用于标识一个取样器,建议使用一个有意义的名称。

注释: 对于测试没有任何作用,仅用户记录用户可读的注释信息。

服务器名称或IP : HTTP请求发送的目标服务器名称或IP地址。

端口号: 目标服务器的端口号,默认值为80 。

协议: 向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。

方法: 发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

Content encoding : 内容的编码方式,默认值为iso8859

路径: 目标URL路径(不包括服务器地址和端口)

自动重定向: 如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。

Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。

Use multipart/from-data for HTTP POST : 当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。

 添加HTTP Head Manager

选中上一步新建的HTTP request. 右键,新建一个Http Header manager. 添加一个header

java压力测试类 java接口压力测试_java压力测试类_04

这里配置的请求头,有Content-Type,Authorization等。

添加监听器(Listener)

脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关心的是请求的响应时间。

Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型,因为上面添加的为HTTP请求,这里添加”查看结果树“与”聚合报告“,更为直观的查看测试结果。

添加View Results Tree(查看结果树)

View Results Tree 是用来看运行的结果的

java压力测试类 java接口压力测试_线程组_05

运行测试,查看结果

java压力测试类 java接口压力测试_HTTP_06

 

 我们还可以 切换到不同的模式查看结果

java压力测试类 java接口压力测试_响应时间_07

 

添加Aggregate Report(聚合报告)

添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。

java压力测试类 java接口压力测试_java压力测试类_08

点击工具栏上的 绿色运行按钮

Label: 请求的名称,就是我们在进行测试的httprequest sampler的名称

Samples: 总共发给服务器的请求数量

Average: 单个请求的平均响应时间,单位是毫秒

Median: 50%的请求的响应时间

90%Line: 90%的请求的响应时间

95%Line: 95%的请求的响应时间

99%Line: 99%的请求的响应时间

Min: 最小的响应时间

Max: 最大的响应时间

Error%: 错误率=错误的请求的数量/请求的总数

Throughput: 吞吐量即表示每秒完成的请求数

Received KB/sec: 每秒从服务器端接收到的数据量

Sent KB/Sec: 每秒从发送到服务器端的数据量

其实到此一个简单的性能测试就完成了。

 

添加Assertion和Assert Results

选择HTTP Request, 右键 Add-> Assertions -> Response Assertion.  添加 Patterns To Test

java压力测试类 java接口压力测试_响应时间_09

然后添加一个Assetion Results 用来查看Assertion执行的结果. 

选中Thread Group 右键  Add -> Listener -> Assertion Results. 

运行后, 如果HTTP Response中没有包含期待的字符串。 那么test 就会Fail. 

java压力测试类 java接口压力测试_java压力测试类_10

java压力测试类 java接口压力测试_响应时间_11

使用用户自定义变量

我们还可以在Jmeter中定义变量。 比如我定义一个变量叫 status.    使用它的时候用  ${status}

添加一个 User Defined Variables.  选中Thread Group: 右键 Add -> Config Element -> User Defined Variables.

我们添加一个变量: status

java压力测试类 java接口压力测试_HTTP_12

 然后在Http Request中使用这个变量

java压力测试类 java接口压力测试_java压力测试类_13

这样咱们的入门测试基本就算完了,接下来看看具体压测过程。

参考:

http://www.testclass.net

http://www.testclass.net/jmeter/creat-performance-test