接口测试 基于 JMeter HttpSample 实现 APP 接口自动化测试

薛飞 · 2018年05月22日 · 最后由 薛飞 回复于 2018年05月24日 · 2754 次阅读

  前言
  为什么选择 JMeter 做为接口测试的技术方案?
   * 基于配置实现接口测试的自动化,免代码开发
   * 丰富的断言能力支持,返回值校验,数据库比对校验
   * 比较好的支持流程控制
   * 比较完善的结果监听
   * 和 Jenkins 易于集成,集成后支持接口性能趋势的查看能力
   * 非标准协议或者对接方有特殊安全处理的情况可以使用 JavaSample 的方式处理
   前四项本篇介绍,后两项另外介绍

1、技术方案
 1.1 接口说明
 【接口规格】
  请求地址 http://xxx/gap/service
  请求方式 POST
  字符编码 UTF-8
 【报文示例】
  支持格式 JSON
  请求报文 {
     "RT": "GAP1001",
     "DATA": {
     "KEY1": "VALUE1",
     "KEY2": "VALUE2"
         }
     }
  1.2 测试实现
  1)通过 JMeter http 请求 POST 发送,并做相应的结果检查验证;
    
  2)JMeter 安装 JSON Plugins 插件,因为接口返回的消息为 JSON 格式,此插件为我们提供获取 JSON 报文特定字段值和断言提供了便利的操作方法,可以极大地提高脚本设计效率。
    

2、实现配置
 2.1JMeter 配置原件
  作用:在一个测试计划中用到的配置信息,如下为已经在黄金积存 APP 接口测试计划中的配置原件。
    
  分别说明如下:
  1)用户定义变量
    
  说明:定义在一个测试计划中经常使用的变量信息,如请求服务器、端口、路径,目的:1)避免测试环境的变更涉及的多处修改 2)清楚测试数据规划;
  2)MySQL 链接配置
    
  说明:有些接口返回检查时需要和数据库表中的字段进行比较,此处用于配置数据库的链接。
  3)HTTP Cookie 管理器
    
  说明:只增加进来就可以,不用做其他配置,简单理解为: Cookie 管理器就像一个 web 浏览器那样存储并发送 cookie。
  3)HTTP 信息头管理器
    
  说明:参考规格上接口对信息头校验的说明。
 2.2 接口测试
  以买金为例说明。
  
  1) 以一个 “简单控制器”(右键添加->逻辑控制器>简单控制器)做为分类,业务相关的接口放入一个控制器下做为分类,如买金相关的提交买金、订单详情、交易订单等,这样做的好处是便于测试计划的管理和维护。
  2) 在分类(简单控制器)下增加一个 “用户定义的变量” 配置原件,定义买金相关业务用到的变量,注意此处定义的变量范围只在该控制器下,其他地方不能引用。  
  3)接口测试的依赖处理,如买金接口 GAP3011 处理失败,则获取订单详情 GAP3013 就没有测试的意义了,所以在测试前需要增加买金接口处理成功的判断,IF 控制器。
  
  4)HTTP 请求格式
  
  说明:
  a、请求中的服务器端口等信息使用定义的变量,如 ${host};
  b、BodyData 为请求的 JSON 报文,可以自己根据接口设计文档组织,也可以参考日志中已经有的请求报文;
  c、在请求报文中也可以使用变量,如购买金额 ${BUYAMT};
  d、在 HTTP 请求的名称中使用【】标注测试的接口名称,便于脚本维护;
  5)返回报文校验和字段引用
  a、判断返回的 JSON 报文字段是否为预期的值,如返回码预期为 “0000”
  
  
  b、获取返回的 JSON 报文字段存入变量中,用于做其他引用和处理
  
  如获取返回码的值存放在变量 RC 中,用来判断是否做下一步处理,或者是获取订单 ID,用于在订单查询的时候引用。
  
  6)数据库操作
  
  
  如上为根据买金接口返回的订单 ID 查询相关的表,保存数据用于后续的操作。
  
  注意:JDBC Request 配置页面下方配置,如下:
  Column1-6 为内置变量,不是用户定义的,可以直接使用,如果引用查询结果中的第一列第一行的值,引用方法为 ${column1_1},如下为判断返回报文中的交易价格是  否和表查询中的第一列第一行字段值相等。
  
  7)测试结果查看
  查看测试过程数据或者测试结果,在 JMeter 中称之为 “监听器” 组件,根据不同的场景需要 JMeter 中有许多监听器组件,我们这里使用 “查看结果树”
  
  使用该组件可以查看 Http 请求信息,响应信息,如果该请求下断言失败,则左侧标红处理,可以点击查看预期值和实际值的对比说明。
  
  如果需要查看接口测试过程中的性能统计信息,推荐使用 “用表格查看结果” 监听器,可以在一个测试计划中配置多个监听器。
3、FAQ
 3.1 登录鉴权如何处理?
  有些接口是需要做登录鉴权的,所以需要放在登录接口执行后再执行
  

 33.2Token 鉴权如何处理?
  
  在 2.1 配置原件中有说明,每次 http 请求都会附带一个 TK 信息,即 token,发送的 token 值是一个变量,这个变量是在登录的时候从 http 返回头信息中获取的,如下,使用正则表达式获取返回头信息中 TK:后的值信息。
  登录返回信息查看:
  
  获取 “TK:” 后的值信息
  

 3.3JSON 插件的使用?
  1) 获取 JSON 返回值(语法可以百度 JSON Path Extractor,语法简洁易用,可以理解为基于字段在 JSON 中路径的方式获取)
  
  登录返回参考:
  
  2) JSON 返回值断言
  
  
  3) 可以看到获取和断言的对字段的指定方式都是一样的,在 app 接口测试中还涉及返回值是数组的情况该如何指定?
   a、如果可以确定需要获取的值是在数组中的位置,可以直接使用【】指定位置:
   
   b、基于条件表达式匹配的方式,如 GAP3002 接口返回可绑定的银行卡列表,我想获取工商银行的编码,但是不能明确他的返回位置
   
   可以使用基于条件表达式的方式,即 BANKNAME 为工商银行的那一组。
   

  3.4 接口调测
  a、想了解调测过程中涉及的变量赋值情况,需要添加一个 DebugSample,
  
  在查看结果树监听器中即可所有的变量赋值情况
  
  b、可以右键点击某个请求,“禁用” 该请求,则测试的时候不会发送和记录该请求。

  3.5 数据库链接配置的使用?
  在 2.1 节配置原件说明中涉及到了 mysql 的链接配置,并且指定了链接名称,
  
  在 2.2 接口测试中说明了数据库的操作,配置中 Vavriable Name 指定为 bfip,即为使用上述的链接配置进行操作。
  

共收到 4 条回复 时间 点赞

写的很详细啦。不过 jmeter4.0 已经自带各种 json 插件,不用另外装插件啦。

donly 回复

thank you,我应该补充下版本号,基于 3.3 版本😀

现在的很多业务都需要加签解签的,可以出一个 beanshell 的第二版。

Yakamoz 回复

我是通过 JavaSample 使用 java 代码处理的,beanshell 还没有用过。😀

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册