框架设计思路
明确接口自动化测试实施步骤如下:

逐步拆解需要完成的工作:
1)需求分析: 了解接口要实现的功能。
2)数据准备: 根据开发文档确定接口基本情况,知晓接口的 URL、请求方式、入参等信息,然后根据业务逻辑及入参预期接口输出。
- 需要配置文件存储接口基本信息;
- 需要方法读取配置文件;
- 需要 Excel 或 YAML 格式文件存储测试数据;
- 需要方法读取测试数据;
- 需要方法将配置文件和测试数据组装为测试执行所需的参数化数据;
- 若预期结果需通过数据库查询验证,则需具备 SQL 执行能力。
3)设计与执行测试: 生成测试文件,根据入参调用接口获得输出并验证。
- 利用 pytest 特性,将参数化准备工作放在
conftest.py下; - 编写调用接口及断言验证的测试文件,命名规则为
xxx_test.py或test_xxx.py; - 封装系统自带断言以优化输出与预期输出的验证;
- 封装 requests 模块,制定统一输入输出标准;
- 引入日志记录模块记录执行错误信息。
4)查看结果: 根据断言结果判定接口是否满足需求。
框架最终执行顺序如下图所示:

框架基本结构

各目录功能说明:
- 测试数据文件:每个文件对应一个接口所需测试数据,命名规则为
nameA.xlsx或nameA.yaml(nameA泛指待测接口名称)。文件内存放调用接口所需参数 name、value、所需 cookie、预期输出结果。

- 核心脚本文件:
assertion.py:封装断言方法,验证接口返回值与预期结果一致性;config.py:封装读取配置文件的方法;get_caseparams.py:将测试数据加工成接口所需格式;log.py:封装日志记录方法;request.py:封装 HTTPS 请求方法,主要支持 POST 和 GET;selectDB.py:查询 SQL 并将结果加工为列表格式,每条数据为一个字典;testcasetemplate.py:根据caseparams文件夹下的测试数据自动在testcase文件夹下生成测试文件的脚本。

- 配置文件:存放两个配置文件,
base.ini用于数据库连接配置,interface.ini存储所有测试接口所需配置。

- 日志文件:记录测试日志,
log.log为当天文件,其他为历史日期日志。

- 参数化与测试文件:
conftest.py为固定名称文件,放置于被测接口脚本同目录下,为每个被测脚本提供参数化支持。test_XXX.py为接口测试文件,XXX为被测接口名称。

- 执行入口:
run.py为测试执行主入口。若将框架部署至 Jenkins 进行持续集成,可通过配置 Jenkins 替代此入口。
使用说明
当需要使用本框架对接口(假定名称为 abc)进行自动化测试时,操作步骤如下:
- 在
interface.ini文件下添加名称为 abc 的节点,配置好接口的参数文件格式、HTTP 请求方式、接口 URL、接口 Wiki。 - 在
caseparams文件夹下创建名称为abc.xlsx的用例数据文件。 - 执行
common文件夹下的testcasetemplate.py,脚本会自动根据前两步配置内容在casefile文件夹下生成test_abc.py脚本文件。 - 编辑
test_abc.py添加所需断言,验证接口准确性。 - 执行
run.py完成测试。
测试执行详情:run.py 指定要执行测试的文件路径(testcase 目录)。根据 pytest 运行机制,会先调用 testcase 目录下的 conftest.py。该文件遍历 testcase 目录下以 test_ 开头的测试文件,调用 config.py 读取配置文件、get_caseparams.py 读取并组装参数,将测试用例数据参数化传递给测试文件。测试文件执行时将参数拆分,调用 request.py 发送 HTTP 请求,获取 JSON 格式返回结果,并通过以下方式验证:
- 若根据产品业务逻辑已知入参可得出预期结果,可直接将预期结果放入 Excel 或 YAML 测试数据文件中,执行时一并传递,直接取出来与接口输出验证。
- 需查库验证的情况,将接口入参作为 SQL 条件写好 SQL,调用
selectDB.py得到查询结果,再拿 SQL 返回结果与接口输出验证。 - 复杂场景可根据接口入参及业务逻辑自行编写脚本获取预期结果,然后与接口输出验证。

