接口测试day8之参数化和接口自动化测试框架

发布时间:2026/7/23 7:40:32
接口测试day8之参数化和接口自动化测试框架 今日目标1.能够提取测试脚本中的测试数据实现测试数据参数化2.能够对员工管理接口实现接口对象封装并编写测试脚本参数化参数化的核心数据驱动用数据驱动测试用例执行数据驱动针对一个接口只写一个测试方法。用一份测试数据文件管理各个测试用例的测试数据。如登录接口共 15 条测试用例。但只需要一个 测试方法对应 有 15 组数据的 json数据文件进行测试。练手案例加法加法案例原始参数化实现从json文件读取参数化步骤将 测试数据按 [{},{},{}] 格式 组织到 json文件中。读取 json文件将数据转换为 [(),(),()]在通用测试方法上一行添加 pytest.mark.parameterize()给 parameterize() 传参。参1字符串类型内容为 json文件中一组数据的 key。参2[(),(),()]格式数据。给 通用测试方法添加形参与 parameterize() 参1 字符串的内容一致。修改 通用测试方法 内部实现使用形参。接口自动化测试框架目录结构api/接口对象层代码python packagescripts/测试脚本层代码python packagecommon/通用工具方法、函数代码python packagedata/测试数据文件文件dirreport/测试报告文件dirconfig.py: 项目中的 配置信息。全局变量pytest.ini: pytest 配置登录接口参数化组织数据文件[ { desc: 登录成功, req_data: { mobile: 13800000002, password: 123456 }, status_code: 200, success: true, code: 10000, message: 操作成功 }, { desc: 手机号不存在, req_data: { mobile: 13874893701, password: 123456 }, status_code: 200, success: false, code: 20001, message: 用户名或密码错误 }, { desc: 密码错误, req_data: { mobile: 13800000002, password: 123456890 }, status_code: 200, success: false, code: 20001, message: 用户名或密码错误 }, { desc: 手机号为空, req_data: { mobile: null, password: 123456 }, status_code: 200, success: false, code: 20001, message: 用户名或密码错误 }, { desc: 多参, req_data: { mobile: 13800000002, password: 123456, abc: 123 }, status_code: 200, success: true, code: 10000, message: 操作成功 }, { desc: 少参, req_data: { mobile: 13800000002 }, status_code: 200, success: false, code: 20001, message: 用户名或密码错误 }, { desc: 无参, req_data: null, status_code: 200, success: false, code: 99999, message: 抱歉系统繁忙请稍后重试 } ]读取数据文件在 common/ 下创建 文件 read_json_file.py在 文件内创建 函数读取json文件中的数据转换成 [(),(),()] 格式数据测试此函数功能通过4.建议读取 json文件时使用 绝对路径法传入文件名1)在 config.py 中添加 全局变量获取 项目目录BASE_DIR os.path.dirname(__file__)2)拼接 json文件的绝对路径filename BASE_DIR/data/login_data.json3)使用 绝对路径传入 json文件读取函数。read_json_data(filename)parameterize参数化员工管理接口普通方法实现接口对象层接口测试用例层解决反复修改手机号解决思路在 测试 添加员工接口前setup保证 数据库中无此手机号执行 delete SQL语句将欲使用的手机号删除。使用 这个手机号展开 添加员工接口的 测试。在 测试 添加员工接口结束后teardown删除 添加员工接口测试时使用的手机号。实现流程将 数据库操作 工具类添加项目代码中存入 common/ 下在 测试脚本代码中添加 setup方法写入 SQL语句执行 指定一个手机号删除。在 测试脚本代码中添加 teardown 方法写入 SQL语句执行 指定同一个手机号删除。保证我们测试方法中使用的 手机号也是 1350001111完成后的代码from common.assert_tools import common_assert from api.ihrm_emp_api import IhrmEmpApi from common.db_tools import DBTools from config import TEL # 定义测试类 class TestAddEmp(object): def setup(self): del_sql delete from bs_user where mobile13500001111; DBTools.db_uid(del_sql) def teardown(self): del_sql delete from bs_user where mobile13500001111; DBTools.db_uid(del_sql) # 定义测试方法 - 添加成功 def test01_add_ok(self): # 调用自己封装的 api发送 添加员工请求 req_header {Authorization: 58ad27cc-cb05-48f4-9812-becaa72308e5} req_data { username: user87655430, mobile: 13500001111, workNumber: 9527890aa } resp IhrmEmpApi.add_emp(req_header, req_data) print(必选-添加成功, resp.json()) # 断言 common_assert(resp, 200, True, 10000, 操作成功) def test02_add_ok_all(self): # 调用自己封装的 api发送 添加员工请求 req_header {Authorization: 58ad27cc-cb05-48f4-9812-becaa72308e5} req_data { username: 齐天小圣朱小姐001, mobile: 13500001111, timeOfEntry: 2022-02-01, formOfEmployment: 1, workNumber: 9009, departmentName: 研发部, departmentId: 1480198742740082688, correctionTime: 2022-02-27T16:00:00.000Z } resp IhrmEmpApi.add_emp(req_header, req_data) print(全部-添加成功, resp.json()) # 断言 common_assert(resp, 200, True, 10000, 操作成功) def test03_username_None(self): # 调用自己封装的 api发送 添加员工请求 req_header {Authorization: 58ad27cc-cb05-48f4-9812-becaa72308e5} req_data { username: None, mobile: 13500001111, timeOfEntry: 2022-02-01, formOfEmployment: 1, workNumber: 9009, departmentName: 研发部, departmentId: 1480198742740082688, correctionTime: 2022-02-27T16:00:00.000Z } resp IhrmEmpApi.add_emp(req_header, req_data) print(用户名为空, resp.json()) # 断言 common_assert(resp, 200, False, 20002, 新增员工失败)拓展1.在 config.py 中定义一个 全局变量 统一管理 测试使用的 手机号。# config.py 文件中 # 定义全局变量测试用的手机号 TEL 135000011112.在 测试脚本中使用手机号的位置使用 TEL 代替。def setup(self): del_sql fdelete from bs_user where mobile{TEL}; DBTools.db_uid(del_sql) def teardown(self): del_sql fdelete from bs_user where mobile{TEL}; DBTools.db_uid(del_sql)