返回介绍

接口测试

发布于 2023-06-19 20:49:11 字数 13555 浏览 0 评论 0 收藏 0

简介

测试过程中我们将接口测试定义为两个维度来执行:1.冒烟测试,2.集成测试

冒烟测试:目的是能在每次构建部署后快速验证 P0-P1 级别的接口正确性,只做正向测试用例

集成测试:目的是进行全量的接口测试,除正向测试用例外,还会执行参数容错、错误码便利、业务逻辑分支的测试用例,结合单元测试用例能达到 80% 以上的覆盖率

冒烟测试

基于 YAPI 平台来执行

在对应项目中选中测试集合,点击“服务端测试”即可一键执行全套冒烟测试用例并查看测试报告。

使用指南

  1. 用公司邮箱自行注册一个账号即可
  2. 平台的介绍可以访问官方文档
  3. 接口测试用例中对顺序执行的接口数据依赖使用比较多,详细使用案例见平台 “样例”组 中的 接口依赖项目,具体的用例写法如下:

请求:变量参数用法

​ 用前面接口的 参数返回值 作为 后面接口的参数,即接口之间存在依赖

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文