💡 项目背景
在软件测试领域,自动化测试是提高效率和质量的关键手段。然而,传统的测试框架往往存在配置僵化、执行模式单一等问题。本项目基于pytest 进行了深度改进,打造了一个支持灵活控制任意用例组合的测试框架,让测试执行更加智能高效。
🎯 核心特性
1. 灵活的用例控制机制
通过配置文件即可精确控制哪些测试用例需要执行,支持多种组合方式:
- 按模块选择:可以指定执行特定测试模块中的用例
- 按标签筛选:基于pytest mark 实现用例分类执行
- 混合模式:支持同时使用多种筛选策略
2. 模块化的目录结构
TESTPROJECT/
├── aw/ # 方法库 - 封装通用测试方法
├── config/ # 配置中心 - 控制用例执行逻辑
├── allure-results/ # 报告输出 - Allure 测试报告生成
├── resource/ # 测试资源 - 存放测试所需文件
└── testcases/ # 测试用例 - 具体测试脚本
3. 可视化测试报告
集成 Allure 报告系统,支持实时查看测试结果:
- 精美的 HTML 可视化报告
- 详细的测试步骤展示
- 失败用例快速定位
- 趋势分析和统计图表
🚀 快速开始
环境准备
# 安装 Python 依赖
pip install pytest
pip install allure-pytest
pip install uiautomator2
# 验证安装
pytest --version
allure --version
执行方式
方式一:按配置文件执行
python D:\TESTPROJECT\main.py
该方式会读取 config 目录下的配置文件,按照配置的用例列表执行测试。
方式二:按标记分类执行
python D:\TESTPROJECT\main.py -m
根据 pytest 的 mark 装饰器对用例进行分类执行,适合按功能模块或优先级筛选。
查看测试报告
# 实时查看 Allure 报告
allure serve ./allure-results
# 或生成静态报告
allure generate ./allure-results -o ./allure-report
allure open ./allure-report
🔧 核心技术实现
Pytest 配置化控制
在 config 目录中定义测试用例的执行策略,示例配置:
# config/test_config.py
TEST_CASES = [
"testcases/test_login.py::test_login_success",
"testcases/test_order.py::test_create_order",
"testcases/test_payment.py"
]
# 支持通配符和正则表达式
PATTERNS = [
"testcases/smoke/*.py",
"testcases/**/test_*.py"
]
UIAutomation 集成
项目集成了 uiautomator2 库,用于移动端 UI 自动化测试。提供了便捷的页面布局查看工具:
# 启动 UI 查看器
sdk/tools/bin/uiautomatorviewer.bat
通过可视化工具可以快速了解应用界面结构,编写精准的定位器。
方法库封装
aw 目录封装了常用的测试方法,提高代码复用性:
- 基础操作封装:点击、输入、滑动等常用手势
- 断言封装:统一的断言方法和错误处理
- 日志记录:自动记录测试过程和截图
- 数据驱动:支持从外部文件读取测试数据
✨ 最佳实践
1. 用例组织原则
- 每个测试文件专注于一个功能模块
- 使用清晰的命名规范(test_前缀)
- 合理运用 fixture 管理测试前置和后置
- 为关键用例添加详细描述(docstring)
2. 标记使用策略
import pytest
@pytest.mark.smoke
def test_critical_feature():
"""冒烟测试用例 - 核心功能"""
pass
@pytest.mark.regression
def test_existing_feature():
"""回归测试用例 - 已有功能"""
pass
@pytest.mark.slow
def test_performance_sensitive():
"""性能敏感测试 - 执行较慢"""
pass
3. 报告优化技巧
- 使用
@pytest.allure.step标注关键步骤 - 附加截图和日志到报告
- 为测试用例添加 severity 标签
- 自定义报告模板和样式
📦 项目地址:GitHub - TESTPROJECT
💬 欢迎交流:如果你有任何问题或建议,欢迎在 GitHub 上提 Issue 或 PR!