jmeter简介与安装
http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-windows-x64.exe
JMeter 下载地址
http://mirrors.hust.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip
解压后,以管理员身份运行bin/jmeter.bat
注意 一定要以管理员身份运行 否则部分功能将会出现问题
image.png
jmeter基础使用
单一接口测试
我们现在所定义的接口一般为http/https请求方式,如何创建一个http请求测试呢?
打开jmeter,创建一个测试计划,并保存测试计划
右击测试计划 添加线程组 设置好线程组名称,比如说我们要测登陆功能,将线程组名称设置为登陆
image2.png
创建测试请求
image3.png
对接口测试
以登陆接口为例,登陆接口的定义如下
image5.png
接上一步的步骤,我们在http请求中填写的参数应该如下
image6.png
创建接口响应结果
image7.png
运行测试
如图,这样我们就可以看到结果的响应信息了
image8.png
断言测试接口响应结果是否达到了预期
我们的接口都是采取json格式,我们需要编写代码解析json格式,此外需要引入额外的json解析包
json.jar大家百度自行下载
将该文件复制到jemter的lib目录下,重新启动jmeter
beanshell解析json
添加一个beanshell断言,关于beanshell的语法及使用,参考下面的文章
image9.png
基础的json解析代码
image10.png
代码说明
import org.json.*; //获取接口响应数据,此两行代码无需变更 String responseData = prev.getResponseDataAsString(); JSONObject dataObj = new JSONObject(responseData); //根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值 String resultCode = dataObj.get("result").get("code").toString(); log.info("resultCode:"+resultCode); // 字符串的等于比较请使用equals if (resultCode.equals("10000")) { //到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息, Failure = false; FailureMessage = "ok"; } else { //未达到预期效果,测试失败 Failure = true; FailureMessage = "fail"; } |
如果测试未通过,测试结果中将显示红色
image11.png
流程测试
上面的测试我们只是测试了单一接口,但测试过程中我们需要进行完善的流程测试,比如说支付,需要用户先登陆,然后在填写支付金额等信息进行支付,这是一个系列的流程,需要对一系列的流程测试,测试步骤接上面的内容进行
对于支付接口,我们需要从登陆接口获取usid以及access_token
还是上面那段代码,获取usid及access_token并赋值到jmeter变量中
import org.json.*; //获取接口响应数据,此两行代码无需变更 String responseData = prev.getResponseDataAsString(); JSONObject dataObj = new JSONObject(responseData); //根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值 String resultCode = dataObj.get("result").get("code").toString(); log.info("resultCode:"+resultCode); // 字符串的等于比较请使用equals if (resultCode.equals("10000")) { //获取usid及access_token String usid = dataObj.get("data").get("profile").get("id").toString(); String access_token = dataObj.get("data").get("access_token").toString(); //赋值到jmeter变量 vars.put("usid",usid); vars.put("access_token",access_token); //到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息 Failure = false; FailureMessage = "ok"; } else { //未达到预期效果,测试失败 Failure = true; FailureMessage = "fail"; } |
新建一个http请求
1.png
此时我们已将这两部流程串联起来了,请求信息中查看上述两个字段已经从登陆结果中获取并传入
331.png
一个基础的流程测试这样完成了