简介

测试过程中我们将接口测试定义为两个维度来执行: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 文件

results matching ""

    No results matching ""