- 为 core 目录下主要模块 (models, context, creator, base_api, exchange, executor) 添加了详细的类和方法 Docstring。 - 新增 docs/架构改进.md 文件。
22 lines
3.6 KiB
Markdown
22 lines
3.6 KiB
Markdown
本次重构核心总结:升级为“模型驱动+混合模式”的自动化测试框架我们本次重构的目标是将现有框架从基于字典(dict)的松散操作,升级为一个结构严谨、易于扩展的现代化测试框架。其核心包含以下四大支柱:1.
|
||
核心驱动力:Pydantic 模型层•目标:用强类型、带校验的模型对象取代脆弱的字典操作。•实现:创建 commons/models/case_model.py
|
||
文件,并定义 CaseInfo 类。•关键收益:•健壮性:在执行测试前,通过模型实例化,对 YAML
|
||
文件中的字段、类型、结构进行严格校验,提前发现拼写错误或格式问题。•可维护性:代码中不再出现 case.get("request")
|
||
这类“魔法字符串”,而是通过 case.request 这样的属性访问,IDE 可以提供智能提示和补全,代码更清晰、更安全。•灵活性:支持使用
|
||
alias,让 YAML 中的字段名(如 validate)与模型属性名(如 validate_data)解耦,使模型设计更符合 Python 规范。2.
|
||
执行模式:支持混合模式(Hybrid Mode)•目标:让框架同时适应简单的数据驱动测试和复杂的业务流测试。•实现:•YAML 驱动模式:保留并优化
|
||
TestAPI 类。它负责扫描 tests/features/ 目录下的 test_*.yaml 文件,并动态生成 pytest 用例。此模式非常适合单接口、多场景的数据验证。•手动脚本模式:允许在
|
||
tests/flows/ 目录下直接编写 test_*.py 脚本。开发者可以像写普通 pytest 用例一样,通过导入业务方法来编排复杂的、跨多个接口的业务流程。3.
|
||
架构设计:清晰的三层分离•目标:遵循最佳实践,分离关注点,让框架结构清晰,避免混乱。•实现:•数据层 (YAML + Pydantic Model)
|
||
:定义测试的输入数据和预期结果(是什么)。•业务层/服务层 (api/*.py):将原始的 HTTP 请求封装成具有业务含义的方法,如
|
||
api.auth.login()。它定义了如何执行具体业务操作(怎么做)。•测试层 (TestAPI 或 test_*.py)
|
||
:作为“导演”,负责编排测试流程。它从数据层获取数据,调用业务层的方法执行动作,并进行最终断言(测什么)。4.
|
||
上下文与状态:统一的会话与变量池•目标:打通 YAML 驱动和手动脚本之间的数据壁垒,实现真正的端到端流程测试。•实现:•所有测试(无论来源)共享同一个
|
||
core.session.Session 实例,确保 Cookie、Header 等会话状态的连续性。•所有测试共享同一个 commons.exchange.Exchange
|
||
实例(变量交换器)。•关键收益:手动脚本(.py)中通过登录获取的 token,可以被无缝地注入到后续的 YAML 用例中;反之,YAML 用例提取的
|
||
ID 也能被后续的 .py 脚本使用。重构后的标准执行流程(以 YAML 为例):1.加载:TestAPI 扫描并加载 test_*.yaml
|
||
文件。2.数据驱动:DataDriver 将 YAML 文件内容解析为多个独立的、参数化的测试用例。3.执行:在 pytest 的 test_func 内部: a.
|
||
变量替换:exchanger.replace() 将用例中的 ${variable} 替换为实际值。 b. 模型校验:CaseInfo(**replaced_case_data) 将替换后的字典实例化为
|
||
CaseInfo 模型对象,完成数据校验。(这是与旧流程最核心的区别) c. 请求发送:使用模型对象的数据发送请求 session.request(**
|
||
case.request.model_dump())。 d. 变量提取:exchanger.extract() 从响应中提取数据,并存入全局变量池。 e.
|
||
断言:validator.assert_all(case.validate_data) 使用模型中的断言数据进行校验。 |