Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
测试准备: JDK 1.8 apache-jmeter-3.0
http api接口是走http协议,通过路径来区分调用方法,请求报文为key-value形式,返回报文一般为json串,有get和post等方法,这也是最常用的两种请求方式.
http协议常见的2种请求方式的区别:
1、GET使用URL或Cookie传参。而POST将数据放在body中。
2、GET请求可以被缓存,POST请求不能被缓存。
3、POST比GET安全,因为数据在地址栏上不可见。
4、一般get请求用来获取数据,post请求用来发送数据
一、简单类型的接口测试
一般分为五个步骤:1. 右击测试计划->添加->Threads(Users)->线程组 2. 右击线程组->添加->Sampler->HTTP请求 3. 在http请求中写入服务器URL,api路径,请求方式和参数 4. 右击线程组->添加->监听器->查看结果树 5. 调用接口、查看返回值
1、参数为KEY-VALUE的GET请求:
添加http请求;填写服务器域名或IP;方法选GET;填写路径;添加参数;运行并查看结果。
2、以json串传参的POST请求:
添加http请求;填写服务器域名或IP;方法选POST;填写路径;在参数区域选Body Data标签;写入Json串参数,注意Json格式;运行并查看结果。
3、请求时,需要权限验证->添加cookie
添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;
添加HTTP Cookie管理器,右击线程组->添加->配置元件->HTTP Cookie管理器;
打开HTTP Cookie管理器,cookie中key为登录的用户名,value从登录接口中获取,登陆成功之后会返回的sign;添加域即请求的服务器域名或IP;
4、请求时,需要添加请求头文件
添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;
添加HTTP信息头管理器,右击线程组->添加->配置元件->HTTP信息头管理器;参照接口文档填写好header信息;
5、通过接口上传文件
添加http请求;填写服务器域名或IP;方法选POST;填写路径;在参数区域选Files Upload标签,添加文件全名(包含绝对路径,也可以点击浏览按钮添加),写入参数名;发送请求并查看结果。
6、通过接口下载文件
添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;
添加BeanShell Sampler,右击线程组->添加->Sampler->BeanShell Sampler;参照接口文档填写好java代码(注意路径配置);
二、Jmeter的参数化
1、用户自定义变量
为了方便管理参数,只能有一个值,比如ip地址不经常变化
添加用户定义的变量,右击线程组->添加->配置元件->用户定义的变量;
脚本中用到该值的所有地方都可以引用这个变量名了,引用变量的格式为 :${变量名};
2、函数生成器
在Jmeter中点击 选项->函数助手对话框;
比如在弹出的对话框中选__Random,填写随机数的范围,点击生成按钮后显示可使用的函数
比如在注册账号时,可以使用该函数生成随机用户名
3、从文件中读取
事先可以在文件中写好一些数据,然后从文件中读取
先写好一个用于登录的txt文件,格式为userid,pwd
在Jmeter中右击线程组->添加->配置元件->CSV Data Set Config;
在请求中引用参数时使用:${username} ${pwd},用它们来顶替对应的参数值。
4、关联传参
关联就是获取到返回的值,然后保存起来,给别的请求使用,或者做一些其他的处理。
使用Json Path Extractor 插件关联
只针对Json格式的Response 取值,右击请求添加->后置处理器->JSON Path Extractor;
在JSON Path Extractor中填入变量名和JSONPath Expression;
在其他的请求中就可以添加改参数
5、断言
断言是用来检查返回结果是否正确。如果正确的话,就代表这个请求的返回结果是正确的,如果没有的话就代表这个请求的结果和我们预期不一致,这样我们就可以通过断言来检查返回结果,测试是否通过。
之前登录返回用户ID为3057。
右击请求添加->断言->响应断言;添加并写入3057在响应结果;
发送请求,查看结果;结果正确,请求通过。
6、Jmeter操作Mysql
测试计划添加.jar包 mysql-connector-java-5.1.7-bin.jar用于使Jmeter可以读取Mysql;
线程组添加 JDBC Connection Configuration (添加->配置元件-> JDBC Connection Configuration)用于配置Jmeter和Mysql的连接;
JDBC Driver class是固定的,Jmeter操作各类数据的Driver参考下图;
线程组添加JDBC Request(添加->Sampler-> JDBC Request) 用于写sql来操作Mysql;
发送请求,成功访问Mysql。
win10系统,如果出现Cannot load JDBC driver class 'com.mysql.jdbc.Driver'错误,把jar包放到jmeter目录下lib文件夹。