共计 3056 个字符,预计需要花费 8 分钟才能阅读完成。
本文次要介绍测试小团队在接口测试实际过程中遇到的一些事,如有雷同纯属巧合😊。
从 0 到 0.1——引入 HttpRunner
对于一个简直是从零开始做接口测试的人来说,最简略的办法当然是要站在伟人的肩膀上了。于是我找了测试童鞋常常拜访的网站 TesterHome,在为数不多的我的项目里看到了点赞数最多的 HttpRunner,大抵浏览过后决定开干😂。
HttpRunner 我的项目构造简洁明了,对于初学者来说非常敌对。
├── .env
├── .gitignore
├── debugtalk.py
├── data
├── reports
└── testcases
├── demo_testcase1.yml
└── demo_testcase2.yml
大抵装置应用步骤如下:
- 执行 pip 装置命令
pip3 install httprunner
; - 查看 HttpRunner 版本:
hrun -V
; - 应用脚手架疾速创立我的项目:
httprunner startproject PROJECT_NAME
; - 依据本人的我的项目批改疾速创立的 demo;
- 执行
hrun
命令,查看报告。
下图粘贴的是咱们我的项目的结构图和之前运行过的报告。
这里附上 官网文档,大家的疑难简直都能查阅官网文档解决。
装置好工具,搭好我的项目框架,就得着手本身我的项目了。大部分接口咱们都能够通过抓包工具取得,参数也很好解决,然而对一些有时效性的、须要加密、解密的参数来说,就须要咱们和开发童鞋多沟通学习了。等理解分明参数含意、参数作用域以及如何获得等问题后,咱们就能够好好利用 HttpRunner 的 hook 机制来解决咱们须要的参数:
- setup_hooks: 在整个用例开始执行前触发 hook 函数,次要用于筹备工作,如参数加密;
- teardown_hooks: 在整个用例完结执行后触发 hook 函数,次要用于测试后的清理工作,如 token 保留。
上面截取的是咱们我的项目中登录接口的一条用例,在 setup_hooks 中调用了 set_signatures 函数进行参数加密、验签解决;在 teardown_hooks 中调用了 save_token 函数进行登录之后的 token 保留,这样在之后的接口中能够间接应用,不必反复调用登录接口。
- name: /xxxx/xxx/v1/codeLogin -- 验证码登录
request:
headers:
signature: ??????
aaaaaaaaa: ??????
bbbbbbbbb: ??????
json:
CCCCCCCCC: ??????
DDDDDDDDD: ??????
phone: $phone
method: POST
url: xxxx/xxx/v1/codeLogin
setup_hooks:
- ${set_signatures($request)}
teardown_hooks:
- ${save_token($response)}
至此,咱们的接口测试算是开始了。
0.1 到 1.0——HttpRunner V3.x
随着工夫的推动,大家感觉下面的工作越来越干燥。每次新增接口就是反反复复的——抓包、抓包数据导出、yml 文件生成、testcase 文件批改、运行。反复且无成长的工作让团队的成员都不太违心做这个事。
起初团队小伙伴组织学习 python 的过程中理解了 pytest 框架,于是乎咱们的接口测试迎来了一次迭代更新。咱们理解到 HttpRunner 3.x 完满反对 pytest 框架,就把之前的框架进行了降级。而且因为大家正处于学习 python 的阶段,每个测试小伙伴都踊跃地参加了这次革新工作,进步了大家的工作激情,同时也帮大家坚固了学到的常识。
下图是革新过程中 yml 文件和 py 文件并存的状况(此处感激开发童鞋铁柱帮咱们依据模板批量解决 yml 文件转化 py 文件❤️)。
也是在本次革新过程中,咱们发现了之前忽略的问题。因为测试小组全员参加,各个童鞋负责不同的模块,大家只是增加了本人负责的接口而疏忽了接口间的依赖关系,导致新模块增加结束后一执行就呈现大量报错。
这也是官网文档中揭示大家留神的一个问题——测试用例(testcase)和测试用例集(testsuite)。 每一条测试用例都应该是残缺且能够独立运行的,而测试用例集的呈现是为了不便大家定期地批量执行。 大家肯定记得在初期设计的时候就划分好各自的功能模块。
(👆🏼上图来自官网文档)
整个 0.1 到 1.0 的迭代也使咱们明确了一个情理,无论是搭建测试框架还是做接口测试这件事件,不要纠结于用什么语言、或者是用什么框架比拟好,应该利用团队成员相熟的、易上手的“工具”来实现。说到底,工具只是辅助咱们更高效地工作,不能轻重倒置。
1.0 到 2.0——Apifox
为什么引入 Apifox 就变成了 1.0 到 2.0 呢——我的项目人员不足但我的项目任务艰巨的艰难实在存在,刚刚好开发童鞋引入 Apifox 工具,解决了测试、前后端开发一起高效合作的问题。上面一段话摘自 Apifox 在 github 我的项目中的介绍,我认为是毫不夸大的。
Apifox 是 API 文档、调试、Mock、测试一体化合作平台,定位 Postman + Swagger + Mock + JMeter。通过一套零碎、一份数据,解决多个零碎之间的数据同步问题。只有定义好 API 文档,API 调试、API 数据 Mock、API 自动化测试就能够间接应用,无需再次定义;API 文档和 API 开发调试应用同一个工具,API 调试实现后即可保障和 API 文档定义完全一致。高效、及时、精确!
上面简略介绍一下 Apifox 的应用:
-
我的项目设置:我的项目设置➡️导入数据➡️批改配置➡️立刻导入。每次运行之前都刷新一下数据,再也不必放心跟不上开发童鞋的脚步了。
-
全局变量配置、环境配置:
-
公共脚本配置,蕴含前置操作和后置操作:
截取局部前置操作代码:
var sign = createSignatureJson(pm.request.method, req); // 把申请的入参替换掉 pm.request.body.raw = JSON.stringify(sign.sortData); // 把 sign 设置到 headers 中 pm.request.headers.add({key: 'signature', value: sign.signature});
截取局部后置操作代码:
// 获取 JSON 格局的申请返回数据 var jsonData = pm.response.json(); var data = JSON.parse(jsonData.data) // 将 jsonData.token 的值写入变量 pm.globals.set('token', data.token); pm.globals.set('member_id', data.member_id);
-
新增接口:接口治理➡️新建分组➡️新建接口。如果接口开发曾经增加了,间接用就好。如果没有的话,快捷办法就是间接在抓包工具复制整条 URL,粘贴在接口门路(2)的地位,Apifox 会主动填充 params,其余标红的字段要手动增加、保留。运行之后的用例也记得及时保留。
-
新建接口测试用例:自动化测试➡️测试用例➡️新建分组➡️新建用例(如果后期的开发 mock、联调做的好的话,这里能够主动导入大部分用例)。
-
运行用例,查看报告:
总结
至此本篇文章就要完结啦,心愿文中介绍的办法可能为大家提供一点小小的帮忙,不足之处大家也能够在评论区留言。最初还是揭示一句——不要自觉的跟风抉择,在某一阶段 适宜的才是最好的。
更多精彩请关注咱们的公众号「百瓶技术」,有不定期福利呦!