接口测试 基于 http 四种提交方式的接口自动化实例

ye · 2018年01月09日 · 最后由 ye 回复于 2018年01月10日 · 2791 次阅读

四种方式包括 POST、DELETE、PUT、GET,对应的功能是增、删、改、查。

1.POST

POST:向指定资源提交数据进行处理请求。
url 格式:http://IP:port/xx
测试数据格式:{aa:11,bb:‘BB’}
详情参考前面的文章
https://testerhome.com/topics/10714

2.PUT

PUT:向指定资源位置上传其最新内容。
url 格式:http://IP:port/xx/id}{
测试数据格式:{aa:11,bb:‘BB’}

2.1.转换测试数据

2.1.1.将用例数据(蓝色部分)从 excel 读取出来,并保存在列表中

测试用例写在 excel 里面,第一列是编号,第二列到倒数第 7 列是填写的测试数据,
最后五列分别是用例描述,提交数据,结果返回,预期结果,实际结果,是否一致。
其作用:
用例描述:描述这条用例的设计的意义
提交数据:记录由测试数据转换成的 json 字符串,
结果返回:记录的接口提交测试数据后所返回的结果
预期结果:用例的预期,是通过还是不通过
实例结果:测试后,该用例是否通过
是否一致:预期结果与实际结果是否一致

2.1.2.相关代码

2.1.3.代码流程图

2.1.4.生成字典格式的字符串,并保存到 txt 文件中

使用 zip 函数,将列表的 dataresult 的第 1 项 (name、remark、type) 与第 2、3、...、最后 项的数据合并起来,以字典的形式放入列表 result 中。

最后将列表 result 中的每一条数据写到 txt 文件中

2.1.5.备注

涉及操作文件:
1:保存测试用例的 excel 文件
2:保存每条测试数据转换成 json 格式的 txt 文件
涉及方法 changDataToJson()

2.2.提交数据并且记录返回结果

2.2.1.使用接口循环提交参数

2.2.2.修改 url

因为 put 方式的提交格式是http://IP:port/xx/id
所有 url 必须加上 id 值

2.2.3.记录返回的结果

2.2.4.相关代码

2.2.5.测试流程图

2.3.写入结果

2.3.1.另存结果文件

原用例

结果文件

2.3.2.写入实际结果

获取结果返回信息
如果返回信息中含有 “true”,实际结果项写入 “pass”
如果返回信息中含有 “false”,实际结果项写入 “no pass”

2.3.3.判断预期与实际是否一致

实例化类 getExcelData,
调用方法 getData2
获取原用例文件中,预期列的所有数据,并保存在列表 expect

类 getExcelData 相关代码

将预期结果与实际结果对比,如一致,写入 “是”,否则,写入 “否”

2.3.4.相关代码

2.4.读取并运行所有用例

2.4.1.汇总信息

将每个模块的接口及对应用例文件等信息都记录在一个汇总的 Excel 文件中

2.4.2.读取列信息

读取每一列信息,并保存到对应列表中

2.4.3.运行用例

3.DELETE

DELETE:删除指定资源
格式:http://IP:port/xx/id}{

3.1.用例设计

3.1.1.用例文件各项解释

编号:用例编号
模块:该接口属于系统的模块项
接口描述:该接口 url 的作用
接口:提交系统的接口 url
描述:该用例的意义
预期:提交接口 url 后,指定的记录能否成功删除
涉及 sql 语句:能够在数据库查询到对应资源的 sql 语句
测试前判断:提交接口 url 前,执行 sql 语句,判断该资源是否存在
返回:提交接口 url 后,系统返回的信息
测试后判断:提交接口 url 后,再次执行 sql 语句,判断该资源是否存在
实际:判断是否成功删除
是否一致:判断预期结果是实际结果是否一致

3.2.测试流程

3.2.1.流程图

3.3.步骤对应代码

3.3.1.读取并运行 sql

类 sqlHelper_get 的方法 getCount,以 sql 语句为参数进行查询,并返回结果记录数

类 getExcelSql 的方法 runSql,读取用例文件的指定 sql 语句列的内容,并存放到列表 sql 中
实例化类 sqlHelper_get,并且以列表 sql 中的每个元素为参数,调用方法 getCount,
每一次调用方法后的返回结果,保存在列表 result 中

类 request_delete 的方法 isExist,
实例化类 getExcelSql,并且以用例文件为参数调用 runSql
将返回结果保存到列表 sqlresult 中
将列表 sqlresult 中元素依次写入新文件中,如果元素为 0,写入 “记录不存在”,否则,写入 “存在记录”

新文件内容如下

3.3.2.读取、执行接口 url

类 getExcelData 的方法 getData2,获取指定 Excel 文件指定列的内容,并存放到列表中

类 request_delete 的方法 run_test
实例化类 getExcelData,并且调用方法 getData2,获取用例文件的第四列数据(接口 url),并存放到列表 url 中。
依次提交列表 url 的每一个元素,并记录返回信息

3.3.3.写入结果

提交接口 url 后,再查询 sql,查询记录是否存在,结果保存在 sqlresult
列表中
获取第六列与第八列的数据,分别保存在列表 expect 与 before 中

将返回信息写入
如果执行 SQL 后,查无记录,则写入 “记录不存在”;反之,写入 “记录存在”

判断实际情况
1:如果在提交接口 url 前,执行 sql 并查无记录的话,写入 “无法删除”(本来就没有那条记录)
2:如果分别在提交接口 url 前后,执行 sql 并查有记录的话,写入 “无法删除”(执行删除接口后,记录依旧存在,删除功能出 bug)
3:提交接口 url 前,执行 sql 并查有记录;执行接口 url 后,执行 sql 并查无记录的话,写入 “成功删除”(删除前,存在记录,删除后,记录不存在)

将预期结果与实际结果对比,如果一致,则 “是否一致” 项写入 “是”;
反之,写 “否”
最后将内容另存到新文件

最终结果文件

4.GET

GET:向指定位置获取资源
格式:http://IP:port/xx?(参数)

4.1.用例设计

编号:用例编号
模块:该接口属于系统的模块项
接口描述:该接口 url 的作用
接口:提交系统的接口 url
参数:接口提交的参数,如果是 0,提交时不需要提交参数
描述:该用例的意义
涉及 sql 语句:能够在数据库查询到对应条件的 sql 语句
数据库查询总数:执行 sql 语句后,数据库返回的记录数
实际结果返回:提交接口 url 后,系统返回的信息
实际查询总数:提交接口所返回的记录数
是否一致:查询数据库的结果与提交接口系统返回的结果对比

4.2.测试流程

4.2.1.流程图

4.3.步骤对应代码

4.3.1.将测试数据转换为 json 格式

略,参考前面

4.3.2.使用接口提交对应参数,并记录返回结果

略,参考前面

4.3.3.运行 sql 并记录结果

类 sqlHelper_get 的方法 getCount,以 sql 语句为参数进行查询,并返回结果记录数

类 getExcelSql 的方法 runSql,读取用例文件的指定 sql 语句列的内容,并存放到列表 sql 中
实例化类 sqlHelper_get,并且以列表 sql 中的每个元素为参数,调用方法 getCount,
每一次调用方法后的返回结果,保存在列表 result 中

4.3.4.写入结果

将查询数据库的结果与接口提交参数后系统返回的结果做对比
如果一致,“是否一致” 项写 “是”,反之,写 “否”

最终结果展示

共收到 6 条回复 时间 点赞

感谢楼主分享,只是个人感觉准备 excel 有点太耗费时间精力了😂

我现在也在做一个类似的例子,和楼主的思路有以下区别:

  1. 数据在数据库中保存。
  2. 把接口定义里的参数、每个参数的长度、格式等信息以 json 格式保存起来。
  3. 定义一些通用规则,对每个接口生成一批测试用例。 如对每个参数都进行长度校验、为空校验、签名校验、格式错误校验,等。

接口例子:

按定义的规则,生成如下一批测试用例:

具体用例执行结果

ye #3 · 2018年01月09日 Author
Joo 回复

这确实有点麻烦,特别是 put,delete,get 这些涉及 id 的

ye #1 · 2018年01月09日 Author
Jerry li 回复

以后多多交流💪 💪

感谢分享!
提一个建议,最后结果在 excel 里的话,如果几千条用例,结果密密麻麻的,可以考虑 FAIL 的测试结果标红,多写一个 IF 判断就 OK。
另外,建议 SHOW 出来,总计多少用例,PASS 多少,FAIL 多少,呈现在最后的表格里。

ye #6 · 2018年01月10日 Author
KK 回复

谢谢您的宝贵意见,以后多交流学习💪 💪

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