Jmeter接口性能测试(一)
[if !supportLists]1. [endif]Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能.
[if !supportLists]2. [endif]安装
安装jdk1.8或以上
下载http://jmeter.apache.org/download_jmeter.cgi
下载完成后在jmeter\bin目录下打开jmeter.bat文件

插件下载 https://jmeter-plugins.org/install/Install/ 下载后文件为plugins-manager.jar格式,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可. 插件管理

3.添加线程组(用户) 在“测试计划”上右键,选择“添加”---“线程(用户)”---“线程组”,如下图所示:

线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数 Ramp-up period:决定多长时间启动所有线程。如果使用100个线程,ramp-up period是10秒,那么JMeter用10秒使所有100个线程启动并运行。 循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本如果我们需要JMeter模拟10个请求者(也就是五个线程),2秒启动全部线程,每个请求者连续请求两次,则如下图设置:

4.添加请求 添加http请求,在线程组上右键---“添加”---“取样器”---“HTTP请求”:

一个HTTP请求有着许多的配置参数,下面将详细介绍: 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。 端口号:目标服务器的端口号,默认值为80 。 协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。 Content encoding :内容的编码方式,默认值为iso8859,建议设置为UTF-8路径:目标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请求默认值,在线程组上右键---“添加”---“配置元件”---“HTTP请求默认”,多个接口协议、ip、端口相同 ,可以设置请求默认值

添加http信息头管理器,在线程组上右键---“添加”---“配置元件”---“HTTP信息头管理” 设置添加请求信息头,传输数据格式为json,添加Content-Type:application/json
添加http请求默认值,在线程组上右键---“添加”---“配置元件”---“HTTP Cookie管理器”

5.添加监视器(查看结果)监视器的种类很多,根据自己的需要添加,我们选择“查看结果树”。在线程组上右键---“添加”---“监视器”---“查看结果树”,如下图所示:

在线程组上右键---“添加”---“监视器”---“聚合报告”

6. 运行测试

运行过程中或者运行完成后查看执行情况:

Samples: 表示这次测试中一共发出了多少个请求Average: 访问接口的平均响应时间Median: 中位数,也就是 50% 用户的响应时间90%Line:90%用户的响应时间小于该值95%Line:95%用户的响应时间小于该值99%Line:99%用户的响应时间小于该值Min: 访问接口的最小响应时间Max: 访问接口的最大响应时间Error%: 错误的请求的数量/请求的总数Throughput:吞吐量,每秒完成的请求数KB/Sec: 每秒从服务器端接收到的数据量 6. 参数化 在测试过程中,我们经常遇到需要根据需求动态操作数据的情况,常规的固定数据无法满足我们的需要,这个时候,我们可以通过jmeter提供的参数化组件来实现动态的获取数据、改变数据,参数化方式 CSV Data Set Config,用户参数组件,用户定义的变量组件,函数组件我们借助此组件可以实现动态的从外部CSV文件中获取数据,从而达到批量操作数据的目的。 使用此组件的前提条件:我们需要有一个 CSV 格式的数据文件创建txt格式数据文件,文件编码格式注意为utf-8,多个值之间用英文逗号隔开,

在线程组上右键---“添加”---“配置元件”---“CSV 数据文件设置”

文件名:CSV 数据文件所在路径。文件编码:CSV文件的编码格式,即 utf-8;变量名称:给 CSV 数据文件中数据的每个字段去一个名字,作为调用的变量名;CSV 中每个字段都对应一个变量,每个变量用逗号隔开分割符:与CSV 中的分隔符 保持一致,本例中即为英文逗号其他默认即可 使用变量,变量名即为上一步骤中设置的变量名,变量使用格式为${变量名}

运行

6. 集合点(同步定时器)集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点 在线程组上右键---“添加”---“定时器”---“Synchronizing Timer”

这样子就添加了一个“集合点”,意思为“凑齐10个用户一起行动” 6. 固定定时器 它可以控制请求的时间间隔,延迟请求到达服务器的时间,模拟真实用户的行为。在线程组上右键---“添加”---“定时器”---“固定定时器”

设置一同运行的多个请求时间间隔时间为300ms 6. 响应断言 HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是,判断任务成功,反之任务失败,这里需要到响应断言 线程组上右键---“添加”---“断言”---“响应”

勾选“响应文本”,会在响应数据中进行校验,测试模式中填写要校验的内容,模式匹配规则选择包括