前言
为什么选择 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,即为使用上述的链接配置进行操作。