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

扩展测试

添加新的测试用例

  1. 继承 BaseBrowserTest
  2. 实现测试方法
  3. 使用提供的辅助方法进行元素操作
  4. 添加截图和断言
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

故障排除

常见问题

  1. 浏览器启动失败

    # 重新安装浏览器
    playwright install chromium
    
  2. 元素定位失败

    • 检查页面是否完全加载
    • 增加等待时间
    • 使用更精确的选择器
  3. 截图保存失败

    • 确保 screenshots/ 目录存在
    • 检查文件权限
  4. 测试超时

    • 增加超时时间
    • 检查网络连接
    • 确认前端服务正常运行

调试技巧

  1. 使用非无头模式

    test = BaseBrowserTest(headless=False, slow_mo=1000)
    
  2. 增加等待时间

    self.page.wait_for_timeout(2000)  # 等待2秒
    
  3. 查看页面内容

    print(self.page.content())  # 打印页面HTML
    
  4. 检查元素状态

    print(self.page.is_visible('selector'))  # 检查元素可见性
    

最佳实践

  1. 测试独立性: 每个测试都应该独立运行
  2. 数据清理: 测试后清理测试数据
  3. 错误处理: 适当的异常处理和重试机制
  4. 截图记录: 关键步骤都要截图
  5. 断言验证: 使用明确的断言验证结果
  6. 性能考虑: 合理设置等待时间和超时

持续集成

可以将测试集成到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 许可证。