前言:
基于之前累积的知识点,集思广益,形成了一套基于当前公司环境的自动化测试方案,该套方案针对RESTful接口风格开发,解决了测试团队代码基础差、维护接口测试用例繁琐的难点,基本上只需要一个人懂代码就行。
该套方案主要由以下部分组成:
- 1、通过 csv 格式文档管理接口测试用例,并与JMeter交互。
- 2、通过 EmEditor 工具进行 csv 文档的操作。
- 3、通过 JMeter 工具执行脚本和生成报告。
- 4、通过 Java 第三方类库 opencsv 拓展对csv文件的读写功能。
- 5、通过 Java 第三方类库 org.json.JSONObject 拓展对Json对象的读写操作。
- 6、通过 Java 第三方类库 mvel2 拓展应用字符串表达式的操作。
- 7、通过 MySQL连接驱动 连接 MySQL 进行数据校验。
- 8、通过 Git 工具拉起仓库中的最新代码。
- 9、通过 Maven 工具构建代码成 jar 包。
- 10、通过 Jenkins 工具实现自动化部署与通知。
在做接口测试过程中,测试质量的优劣,最关键因素便是接口测试用例的设计,再加上我们这套方案面向的对象是我们不熟悉代码设计的组员,而他们在自动化测试过程中,接触最多的也是接口测试用例文档。所以,此篇作为接口自动化实战攻略的开篇,就先来讲下我们设计的接口测试用例文档。
CSV文档的优劣:
- JMeter原生支持,比excel更方便,轻量级些。(优点)
- 需要注意分隔符,避免csv格式错误。(缺点)
- 需要注意文件编码格式,避免读写乱码。(缺点)
上述提到的缺点可通过 EmEditor工具来规避,能规避的问题那也就不算大问题了,具体规避方法后面会介绍。
CSV文档演示:
csv 接口测试用例文档简单展示,附带下载链接。
用例文档分析:
文档包含20个字段,这里将讲述每个关键字段的作用( * 为人为准备的,不带 * 是通过自动化脚本写入的):
字段名 | 描述 |
---|---|
* 接口编号(interfaceNo) | 通过接口名、请求方式等方式来确认一个接口,一个接口对应一个编号。 |
* 域名/IP(interfaceIP) | 与JMeter Http请求中的“服务器名称或IP”对应。 |
* 端口(interfacePort) | 与JMeter Http请求中的“端口号”对应。 |
* 接口地址(interfaceAddress) | 不包含请求参数的接口请求地址。 |
* 用例编号(caseNo) | 接口中的编号,与接口编号配套组合使用后可唯一,用于确认接口测试用例的行数。 |
* 用例名称(caseName) | 简述该条用例的测试目的。 |
* 接口类型(interfaceType) | 接口的请求方式,如get、post、put、delete等。 |
* headers | 接口请求中的头部参数,适配了json-body和from-body头。 头部参数中的动态参数,用#{}包裹表示: "{""Content-Type"": ""application/x-www-form-urlencoded"",""Authorization"": ""#{token}""}" |
* 测试数据(testData) | 分为两种格式:基本分为 GET 请求和 POST 请求格式。 GET: ?param1=value1¶m2=value2 POST:"{""name"": ""咖啡"",""number"": 2}" 动态参数,用#{}包裹表示:"{""Authorization"": ""#{token}""}" |
* 关联数据(associatedData) | 用于接口关联,存储格式为json格式,将当前行的key、value存储在JMeter变量中,供后续接口。如下列表达式格式: "{""token"":""#{token}""}" 表示key为token,value为未知变量,通过#{}的标识从当前接口测试用例的响应结果中获取(注意:key必须出现在响应结果中,否则为空;多个匹配的情况,优先匹配第一个出现的)。 |
* 预期结果(expectedResults) | 预期结果,该处仅填写需要进行匹配的key、value,与实际结果做匹配。 由于公司的项目返回的都是json对象,所以就仅适配了json格式的响应结果。 |
实际结果(actualResults) | 实际结果,存放接口的响应结果,与预期结果匹配校验。 |
* 是否验证sql(ifVerifySql) | TRUE 或 FALSE,值为TRUE时,进行sql校验,值为FALSE时,忽略。 |
* 执行sql(executeSql) | SQL 语句,查询数据库中表数据 |
* 预期sql结果(expectedSqlResults) | 预期SQL执行出来的结果,使用java中的表达式,如: "#{number}>0 && #{number}<10" |
实际sql结果(actualSqlResults) | 实际结果,存储sql执行出来的结果 |
用例状态(caseStatus) | 测试通过 或 测试不通过 |
执行人(expecteMan) | 执行的操作人 |
执行时间(executionTime) | 该条用例完成执行的时间 |
备注(remarks) | 预留,后续人为添加备注用 |
CSV文档缺点的解决方案:
1、双引号分隔符导致的格式错误,解决方法:
EmEditor编辑器对csv文件有语法校验功能。
使用 EmEditor 工具打开 csv 格式的问题文件,右键依次选择“CSV”、“转换为”、“分号分隔”,然后再重复一次,选回“逗号分隔”即可。
2、csv文件编码格式与JMeter不符,导致读写文件乱码,解决方法:
使用 EmEditor 工具打开 csv 格式文件,右下角可更换编码格式。
至此,文档便介绍完了,下一篇就介绍JMeter脚本的编写。
评论区