文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
接口测试
简介
测试过程中我们将接口测试定义为两个维度来执行:1.冒烟测试,2.集成测试
冒烟测试:目的是能在每次构建部署后快速验证 P0-P1 级别的接口正确性,只做正向测试用例
集成测试:目的是进行全量的接口测试,除正向测试用例外,还会执行参数容错、错误码便利、业务逻辑分支的测试用例,结合单元测试用例能达到 80% 以上的覆盖率
冒烟测试
基于 YAPI 平台来执行
在对应项目中选中测试集合,点击“服务端测试”即可一键执行全套冒烟测试用例并查看测试报告。
使用指南
- 用公司邮箱自行注册一个账号即可
- 平台的介绍可以访问官方文档
- 接口测试用例中对顺序执行的接口数据依赖使用比较多,详细使用案例见平台 “样例”组 中的 接口依赖项目,具体的用例写法如下:
请求:变量参数用法
用前面接口的 参数
或 返回值
作为 后面接口的参数
,即接口之间存在依赖
Tips: 参数只能是测试过程中排在前面的接口中的变量参数
格式:$.{key}.{params|body}.{path}
测试:变量参数用法
在测试断言区域需要用到前面接口的 参数
或 返回值
假设需要获取 key 为 555 的接口参数或者响应数据,可通过 records[555].params 获取 key 值为 269 用例的请求参数,records[555].body 获取 key 值为 269 用例的返回值。
其中 $. 是使用 动态变量 的标志,即表示值为用例的请求参数,.269.body 即表示 key 值为 269 用例的返回值。
- 部分接口运行后的数据写入结果将有一定的延时,此时我们通常需要进行一定时长的等待,具体的用例写法如“样例”中的 TimeSleeper项目
集成测试
基于 PythonUnitTest 封装好的框架来编辑并执行测试用例,项目地址:https://github.com/mijiawei/apitestrunner
框架缺点:用例yaml文件多起来会因为肉眼维护导致错误,有时间有机会可以写一个web前台操作管理
框架优点:能实现 Postman 所有的功能,能参数化驱动,能接入locast无编码实现压测
执行测试
- 单独运行/调试一个接口测试
$ hrun showcase/api/v1-moment-detail.yaml
- 批量运行一组测试用例/一个测试套件
$ hrun showcase/testcases/moment-detail.yaml
$ hrun showcase/testsuites/....yaml
测试用例分层模型
目录结构如下所示:
├── api
│ ├── v1-moment-create.yaml
│ ├── v1-moment-delete.yaml
│ ├── v1-moment-detail.yaml
│ └── ......
├── debugtalk.py
├── testcases
│ ├── moment.yaml
│ └── .....yaml
└── testsuites
├── moment_with_join.yml
└── moment_with_like.yml
├── reports
├── .env
测试用例编写与维护
关键字 | 作用 | 写法 |
---|---|---|
config | 当前 yaml 文件下全局变量的设置;Config作用域优先级:testsuites > testcases > api | - config: name: testcase description variables: {} base_url: http://123.345.455 #base_url即host |
variables | 定义变量,variables 优先级:test > config | 写在 test 的下级 variables: user_agent: 'iOS/10.3' device_sn: $device_sn os_platform: 'ios' app_version: '2.8.6' |
test | 一个测试点的标识,与 config 同级 | |
testcases | 一个测试用例的表示,与 config 同级 | |
name | 用来描述 api,testcase;体现在测试报告中 | 可以写在 config 或 test 的下级 |
request | 根据 https://2.python-requests.org//en/master/api/ 描述节点 | 写在 test 的下级,本项目 Content-Type 是表单形式的,所以传值使用 data或params,而非 json |
validate | 测试断言,- eq 表示一串断言结果的交集;validate作用域为并集 testsuites + testcases + api | 写在 test 的下级 validate: - eq: [status_code, 201] - eq: [headers.Content-Type, application/json] - eq: [content.success, true] 几种断言方法 eq = equals, not_equals = ne, string_equals = str_eq, less_than = lt, length_equals = len_eq, less_than_or_equals = le, greater_than=gt, length_greater_than = len_gt, count_greater_than_or_equals = len_ge, length_less_than = len_lt, count_less_than_or_equals = len_le |
extract | 存在接口数据依赖时,需要"取出"返回值中将被本文件中接下来的 test 引用的参数 | 写在 test 的下级 extract: token: content.token |
api | 在 testcases 中直接引用已定义好的 api | 写在 test 的下级 |
testcase | 在 testcases/testsuite 中直接引用已定义好的 testcase | 写在 testcases 或 test 的下级 |
output | 与 extract 类似,作用域更大,可以被其他文件引用 | 写在 config 的下级,在对应 test 下也需要标记 |
parameters | 参数化驱动标识,定义参数并指定数据源取值方式 | parameters: user_id: [user1, user2, user3] 或写作成对的 parameters: username-password: - ["user1", "111111"] - ["user2", "222222"] - ["user3", "333333"] |
参数引用标识符: 可以使用在任意字符串中,$name
函数引用标识符: 可以使用在任意字符串中,${func($var)}
环境变量标识符: 可以使用在任意字符串中,${ENV(keyname)}
引用CSV文件标识符: 可以使用在任意字符串中,${P(name.csv)}
快速生成测试脚本工具
HAR(HTTP Archive)
文件转YAML / JSON
$ pip install har2case (已经可以执行测试用例的,不需要另外安装)
$ har2case xxxxx.har -2y
不加参数默认转 JSON
Postman Collection Format
文件转YAML / JSON
$ cd postman2case
$ python3 main.py xxxx.json output.json
根据 postman 中录入的接口集中生成在 output.json 中
$ python3 main.py xxxx.json
在当前文件生成 api 文件夹,根据 postman 中录入的接口单个生成 YAML 文件
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论