README.md
5.51 KB
浏览器自动化测试
基于 Python 3.7.8 和 Playwright 的 Apple ERP 系统浏览器自动化测试框架。
环境要求
- Python 3.7.8+
- Playwright 浏览器自动化框架
安装依赖
# 安装 Python 依赖
pip install -r requirements.txt
# 安装 Playwright 浏览器
playwright install chromium
项目结构
tests/browser/
├── __init__.py # 包初始化
├── base_test.py # 基础测试类
├── test_login.py # 登录功能测试
├── test_order_management.py # 订单管理功能测试
├── test_runner.py # 测试运行器
├── requirements.txt # 依赖文件
├── README.md # 说明文档
├── screenshots/ # 测试截图目录
└── reports/ # 测试报告目录
使用方法
1. 单独运行测试
# 运行登录测试
python test_login.py
# 运行订单管理测试
python test_order_management.py
2. 运行所有测试
# 运行所有测试并生成报告
python test_runner.py
3. 环境变量配置
# 设置前端应用地址(默认: http://localhost:3000)
export FRONTEND_URL=http://localhost:3000
# 设置浏览器模式(默认: 非无头模式)
export HEADLESS=false
测试功能
登录测试 (test_login.py)
- ✅ 成功登录测试
- ✅ 无效用户名测试
- ✅ 无效密码测试
- ✅ 空凭据测试
- ✅ 记住我功能测试
订单管理测试 (test_order_management.py)
- ✅ 订单列表显示测试
- ✅ 按订单编号搜索测试
- ✅ 按经销商搜索测试
- ✅ 订单状态筛选测试
- ✅ 重置搜索测试
- ✅ 分页功能测试
- ✅ 表格操作测试
- ✅ 操作按钮测试
测试报告
测试完成后会自动生成两种格式的报告:
HTML 报告
- 美观的可视化界面
- 测试统计信息
- 详细的测试结果
- 截图链接
JSON 报告
- 机器可读的格式
- 完整的测试数据
- 便于集成到CI/CD
截图功能
- 每个测试步骤都会自动截图
- 失败测试会额外截图错误状态
- 截图保存在
screenshots/目录 - 支持全页面截图
配置选项
BaseBrowserTest 配置
# 创建测试实例
test = BaseBrowserTest(
headless=False, # 是否无头模式
slow_mo=500 # 操作间隔时间(毫秒)
)
元素定位策略
基于前端代码分析,使用以下定位策略:
登录页面元素:
- 用户名输入框:
input[placeholder="请输入用户名"] - 密码输入框:
input[placeholder="请输入密码"] - 登录按钮:
button:has-text("登录") - 记住我复选框:
input[type="checkbox"]
订单管理页面元素:
- 订单编号搜索:
input[placeholder="请输入订单编号"] - 经销商编码搜索:
input[placeholder="请输入经销商编码"] - 经销商名称搜索:
input[placeholder="请输入经销商名称"] - 搜索按钮:
button:has-text("🔍 搜索") - 重置按钮:
button:has-text("🔄 重置") - 数据表格:
.data-table
扩展测试
添加新的测试用例
- 继承
BaseBrowserTest类 - 实现测试方法
- 使用提供的辅助方法进行元素操作
- 添加截图和断言
class MyTest(BaseBrowserTest):
def test_my_feature(self):
# 设置页面
self.setup_my_page()
# 执行测试操作
self.click_element('button:has-text("我的按钮")')
# 验证结果
assert self.is_element_visible('.success-message')
# 截图
self.take_screenshot('my_test_result')
自定义测试运行器
def run_my_tests():
test = MyTest(headless=False, slow_mo=500)
tests = [
('我的测试1', test.test_feature_1),
('我的测试2', test.test_feature_2),
]
results = []
for test_name, test_func in tests:
result = test.run_test(test_name, test_func)
results.append(result)
return results
故障排除
常见问题
-
浏览器启动失败
# 重新安装浏览器 playwright install chromium -
元素定位失败
- 检查页面是否完全加载
- 增加等待时间
- 使用更精确的选择器
-
截图保存失败
- 确保
screenshots/目录存在 - 检查文件权限
- 确保
-
测试超时
- 增加超时时间
- 检查网络连接
- 确认前端服务正常运行
调试技巧
-
使用非无头模式
test = BaseBrowserTest(headless=False, slow_mo=1000) -
增加等待时间
self.page.wait_for_timeout(2000) # 等待2秒 -
查看页面内容
print(self.page.content()) # 打印页面HTML -
检查元素状态
print(self.page.is_visible('selector')) # 检查元素可见性
最佳实践
- 测试独立性: 每个测试都应该独立运行
- 数据清理: 测试后清理测试数据
- 错误处理: 适当的异常处理和重试机制
- 截图记录: 关键步骤都要截图
- 断言验证: 使用明确的断言验证结果
- 性能考虑: 合理设置等待时间和超时
持续集成
可以将测试集成到CI/CD流程中:
# GitHub Actions 示例
- name: Run Browser Tests
run: |
cd tests/browser
pip install -r requirements.txt
playwright install chromium
python test_runner.py
许可证
本项目遵循 MIT 许可证。