Jmeter针对API接口的测试

发表于:2017-11-01 14:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:葱87    来源:51Testing软件测试网采编

  jmeter简介与安装
  Apache JMeter是Apache组织开发的基于Java测试工具,安装jmeter之前,需要先安装设置java环境,jdk下载地址
  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
  一个基础的流程测试这样完成了
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号