侧边栏壁纸
博主头像
一朵云的博客博主等级

拥抱生活,向阳而生。

  • 累计撰写 67 篇文章
  • 累计创建 25 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

接口自动化 -- 基于JMeter的实战攻略(1)

一朵云
2022-05-11 / 0 评论 / 2 点赞 / 8989 阅读 / 5500 字

前言:

  基于之前累积的知识点,集思广益,形成了一套基于当前公司环境的自动化测试方案,该套方案针对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 接口测试用例文档简单展示,附带下载链接

image.png

用例文档分析:

文档包含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&param2=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文件有语法校验功能。

image.png

  使用 EmEditor 工具打开 csv 格式的问题文件,右键依次选择“CSV”、“转换为”、“分号分隔”,然后再重复一次,选回“逗号分隔”即可。

image.png

2、csv文件编码格式与JMeter不符,导致读写文件乱码,解决方法:

  使用 EmEditor 工具打开 csv 格式文件,右下角可更换编码格式。

image.png



至此,文档便介绍完了,下一篇就介绍JMeter脚本的编写。
2

评论区