接口压测工具--jmeter
jmeter
jmeter是apache公司基于java开发的一款开源压力测试工具,是一个较轻量的测试工具。运行需要安装jdk环境,jmeter为免安装软件,
解压后直接运行jmeter执行脚本即可。它也是跨平台的,支持在windows、linux、macos上使用。
1 jmeter-http接口脚本基本流程
添加线程组
添加http请求
在http请求中写入url、路径、请求方式、参数
添加查看结果树
调用接口、查看返回值
具体操作见下图示:
有时还需添加cookie和header,只需在【配置元件】里添加【HTTPCookie管理器】和【HTTP信息头管理器】即可,其配置如图示:
cookie的名称、值依据接口文档填写,域需要填写HTTP请求页里的【服务器名称或ip】。
header的名称、值依据接口文档填写。
添加【查看结果树】
【添加】-【监听器】-【查看结果树】,具体界面如下图示:
通过【查看结果树】可以查看请求数据,也可查看服务器的响应数据,以此来判断测试结果。
2 jmeter-参数化
jmeter参数化有三种方式:
用户定义的变量
这种是为了方便管理参数,只能有一个值,比如ip地址。
在线程组中添加一个用户定义的变量,然后写key、value就可以,key是参数名,value是具体值,调用时使用${key},其中key就是变量名称。
如下图中变量名称是ip:
函数生成器
可参照一定规则生成数据,比如生成随机数、时间等。
函数助手可按照规则生成一些参数,常用的参数有随机数__Random、获取当前时间__time、唯一值__UUID。
随机数__Random,可在指定范围内取随机数
获取当前时间__time,获取当前系统时间,具体格式为:yyyy-MM-dd HH:mm:ss
唯一值__UUID,每次生成一个随机的uuid,都是唯一值
从文件中读取
事先写好数据,然后从文件中读取数据,比如登录接口的账号、密码。
从文件中读取,需要三个步骤:读取文件、取文件内容里的参数,赋予一个名字、使用值
从文件读取的话,需要在线程组里添加【CSV Data Set Config】,如下图示:
3 jmeter断言
断言是用来检查返回接货对不对的,如果对,就代表请求返回正确;如果没有的话,就代表请求结果与预期不一致,并以此来作验证测试是否通过。
添加方法:【添加】-【断言】-【响应断言】,添加后的界面如下图示:
4 jmeter-关联
关联是获取到服务器返回的值,保存起来,给别的请求使用,做一些其他处理。
jmeter关联是通过正则表达式提取器来完成的添加方式为:
【添加】-【后置处理器】-【正则表达式提取器】,字段详解见下图示:
通过上面的关联,其他请求使用时,调用${code}就可以获取到关联数据。
另可通过加载第三方插件来做关联:jp@gc - JSON Path Extractor
【添加】-【后置处理器】-【正则表达式提取器】,字段详解见下图示:
此种关联方式适用于响应数据为json串的方式,操作上更简单一点。
5 jmeter-mysql操作
要操作mysql需要引入第三方jar包,因为jmeter本身不能直接连接mysql,操作mysql需要如下步骤:
在测试计划里导入jdbc的jar包
创建数据库连接配置(mysql的url、端口号、账号、密码等)
写sql语句,执行sql
查看结果
具体操作见下图示:
【测试计划】-【Add directory or jar to classpath】下导入jdbc的jar包
【添加】-【配置元件】-【JDBC Connection Configuration】
配置mysql连接池名称,要与后面sql请求的【Variable Name】一致
数据库的url:
jdbc:mysql://192.168.1.116:3307/bugfree?allowMultiQueries=true
数据库驱动:
指定数据库类型是mysql、orcle、sqlserver等,驱动列表如下:
账号密码:
所连接数据库的账号、密码。
6 测试结果查看
【添加】-【监听器】-【聚合报告】,具体参数解释见下图示:
查看结果需关注的几个指标:
tps,每秒处理的请求数,tps越高说明服务器处理能力越好
响应时间,每个请求的处理时间
并发用户数,即并发量
7 jmeter-linux下运行
linux下运行jmeter是在jmeter的bin目录下执行jmeter.sh脚本,命令如下:
sh jmeter.sh -n –t a.jmx -l res.jtl
-n 代表以没有图形化界面启动
-t 代表后面是测试脚本
a.jmx 就是做好的测试脚本
-l 代表后面是测试结果
res.jtl 就是测试结果文件
若要在查看结果树中查看测试结果,只需在【查看结果树】视图中导入这个res.jtl文件即可。
8 jmeter 添加负载机
压测过程中,当并发较大,一台机器已经启动不了那么多并发时,需要添加负载机。
首先在做压力机的机器上启动jmeter的代理:
jmeter的bin目录下有一个jmeter-server,启动它即可,此文件就是jmeter代理。
然后在控制机上添加压力机ip:
jmeter的bin目录下有一个jmeter.properties,打开后找到remote_hosts模块,添加ip后重新启动jmeter,就可以在jmeter里看到压力机了。