🚀 剧作家MCP自动化框架
📋 项目概述
Playwright MCP自动化框架是一个全面的端到端测试解决方案,用于使用Playwright与Python、Pytest和MCP(模型上下文协议)进行AI辅助测试生成的web应用程序。它支持跨浏览器测试、模块化代码结构和详细报告,以实现高效自动化。
🛠️ 技术栈
- 语言: python
- 测试框架: 剧作家Pytest
- 报告: 诱惑,HTML报告
- 浏览器: Chromium、Firefox、WebKit
- 版本控制: Git
- 代码质量: Pytest插件,模块化结构
🏗️ 建筑
该框架遵循模块化页面对象模型(POM)架构:
- 测试层: 包含使用Pytest夹具的测试用例。
- 页面对象: 用于UI交互的可重用类。
- 公用设施: 数据管理和常用功能的助手。
- 配置: Pytest和Playwright配置用于设置。
框架结构
playright-mcp-automation-framework/
├── pages/ # Page Object classes
│ ├── LoginPage.py
│ ├── InventoryPage.py
│ ├── CartPage.py
│ └── CheckoutPage.py
├── tests/ # Test files
│ ├── test_login.py
│ ├── test_inventory.py
│ ├── test_cart.py
│ └── test_checkout.py
├── utils/ # Utilities and helpers
│ ├── helpers.py
│ └── test-data.json
├── allure-results/ # Allure report data
├── allure-report/ # Generated Allure HTML report
├── test-results/ # HTML reports
├── pytest.ini # Pytest configuration
├── requirements.txt # Python dependencies
├── package.json # Node.js dependencies (MCP)
├── server.py # MCP server for AI integration
└── README.md数据流图
[User/Test Runner] --> [Pytest] --> [Test Files] --> [Page Objects] --> [Playwright Browser]
| | |
| | --> [Utils/Helpers]
| |
--> [Allure Reporting] --> [allure-results/]
--> [HTML Reporting] --> [test-results/]🧰 测试覆盖率
该框架包括 39个综合测试用例 涵盖整个SauceDemo电子商务流程:
登录功能(9项测试)
| 测试用例 | 描述 |
|---|---|
test_valid_login_standard_user | 验证标准用户是否可以成功登录 |
test_invalid_username | 验证无效用户名的错误 |
test_invalid_password | 验证无效密码的错误 |
test_locked_out_user | 验证锁定用户是否收到错误消息 |
test_empty_username_and_password | 验证空凭据的验证 |
test_logout_flow | 验证注销重定向到登录页面 |
test_direct_url_access | 验证防止未经授权访问的保护措施 |
test_session_handling | 清除cookie后验证会话无效 |
test_performance_user | 验证性能故障用户登录 |
库存功能(12次测试)
| 测试用例 | 描述 |
|---|---|
test_add_single_item_to_cart | 验证单个商品是否可以添加到购物车 |
test_add_multiple_items_to_cart | 验证是否可以添加多个项目 |
test_remove_item_from_cart_on_inventory_page | 验证从库存中删除项目 |
test_sort_products_by_name_a_to_z | 验证A-Z字母排序 |
test_sort_products_by_name_z_to_a | 验证Z-A字母排序 |
test_sort_products_by_price_low_to_high | 验证从低到高的价格排序 |
test_sort_products_by_price_high_to_low | 验证从高到低的价格排序 |
test_navigate_to_cart_from_inventory | 验证库存中的购物车导航 |
test_view_product_details | 验证产品详细信息页面访问权限 |
test_add_item_from_product_details_page | 验证是否从详细信息页面添加项目 |
test_ui_state_consistency | 在操作过程中验证UI一致性 |
test_multi_tab_behavior | 验证多标签功能 |
购物车功能(5次测试)
| 测试用例 | 描述 |
|---|---|
test_view_cart_with_items | 验证购物车是否正确显示商品 |
test_remove_item_from_cart | 验证从购物车中删除商品 |
test_continue_shopping_from_cart | 验证导航返回库存 |
test_checkout_from_cart | 验证购物车中的结账导航 |
test_cart_persists_after_page_refresh | 验证刷新后购物车是否仍然存在 |
检查功能(13项测试)
| 测试用例 | 描述 |
|---|---|
test_valid_checkout | 使用有效信息验证完整结账 |
test_missing_first_name | 验证是否缺少名字 |
test_missing_last_name | 验证是否缺少姓氏 |
test_missing_postal_code | 验证是否缺少邮政编码 |
test_cancel_checkout | 验证取消结账返回购物车 |
test_checkout_with_multiple_items | 使用多个项目验证结账 |
test_checkout_overview_page | 验证概述页面是否显示项目 |
test_cancel_from_checkout_overview | 从概览页面验证取消 |
test_complete_order_and_return_to_inventory | 验证结账后导航 |
test_checkout_with_empty_cart | 使用空购物车验证结账按钮 |
test_price_validation | 验证总价计算的准确性 |
test_tax_validation | 验证税务计算 |
test_remove_item_from_overview | 验证从概览中删除项目 |
📸 截图
该框架在测试执行期间自动捕获屏幕截图以进行视觉验证。Allure报告附有截图:
- 登录测试:登录成功、错误消息、注销确认
- 库存测试:产品列表、排序、购物车徽章更新
- 购物车测试:购物车商品、空购物车、结账按钮
- 检查测试:结账单、订单完成、错误状态
截图附件存储在 allure-report/data/attachments/ 并显示在Allure HTML报告中。
📸 证据
下表显示了测试执行期间捕获的通过测试的证据截图:
| # | 截图 | 测试用例 | 描述 |
|---|---|---|---|
| 1 | Login Successful | test_valid_login_standard_user | 标准用户登录成功-重定向到库存页面 |
| 2 | Invalid Username | test_invalid_username | 无效用户名的错误消息 |
| 3 | Locked Out User | test_locked_out_user | 显示锁定用户错误消息 |
| 4 | Empty Credentials | test_empty_username_and_password | 空凭据的验证错误 |
| 5 | Logout Successful | test_logout_flow | 注销成功-重定向到登录页面 |
| 6 | Cart with Items | test_view_cart_with_items | 购物车正确显示商品计数 |
| 7 | Checkout Complete | test_valid_checkout | 订单已成功完成,并显示确认消息 |
| 8 | Inventory Page | test_add_single_item_to_cart | 具有添加到购物车功能的库存页面 |
| 9 | Multiple Items Cart | test_checkout_with_multiple_items | 购物车显示多个商品 |
| 10 | test_add_multiple_items_to_cart | 购物车徽章显示正确计数 | |
| 11 | Product Sorting | test_sort_products_by_name_a_to_z | 按字母顺序a-z排序的产品 |
| 12 | Checkout Overview | test_checkout_overview_page | 包含项目详细信息的结账概述 |
| 13 | Price Validation | test_price_validation | 含税价格明细 |
| 14 | Cart Empty State | test_checkout_with_empty_cart | 空购物车结账按钮状态 |
| 15 | UI Consistency | test_ui_state_consistance | 操作过程中ui状态一致 |
| 16 | Remove from Cart | test_remove_item_from_cart | 商品已删除-购物车显示零商品 |
| 17 | Tax Calculation | test_tax_validation | 正确计算和显示税款 |
| 18 | Order Complete | test_complete_order_and_return_to_库存 | 显示订单完成消息 |
注: 所有18个屏幕截图都代表了通过的测试执行,展示了SauceDemo电子商务流程的功能。
🎯 特性
- 头部模式下的跨浏览器测试(Chromium、Firefox、WebKit)
- 使用Pytest并行执行测试
- 可重用代码的模块化页面对象模型
- 通过MCP服务器生成人工智能辅助测试
- 综合报告(Allure和HTML)
- 目视验证的带头执行
- 使用JSON夹具进行测试数据管理
⚙️ 安装说明
- 克隆存储库:
git clone https://github.com/AbhishekKandari/playright-mcp-automation-framework.git
cd playright-mcp-automation-framework- 创建虚拟环境:
python -m venv .venv
.venv\Scripts\activate # On Windows- 安装依赖项:
pip install -r requirements.txt
playwright install # Install browser binaries- 设置环境变量 (如有需要)
.env文件。
🧪 测试执行
运行所有测试:
pytest运行特定的测试文件:
pytest tests/test_login.py使用特定浏览器运行:
pytest --browser chromium并行运行(默认):
pytest # Uses fullyParallel: true in config以头部模式运行(默认):
pytest # headless: false in playwright.config.js📊 报告
该框架通过多种渠道提供全面的报告功能:
HTML报告
自动生成于 test-results/report.html:
pytest --html=test-results/report.html诱惑报告
生成诱惑结果:
pytest --alluredir=allure-results生成并打开诱惑报告:
allure generate allure-results --clean -o allure-report
allure open allure-report或者,直接提供Allure报告(需要Allure CLI):
allure serve allure-results📈 报告仪表板预览
注: Allure报告提供了测试执行的全面视图,包括: - 测试类别:Epic→ 特性→ 故事层次结构 - 视觉趋势:随着时间的推移,通过/失败趋势 - 附件支持:屏幕截图、日志和视频 - 重试:重试分析和历史记录
报告内容
| 报告类型 | 位置 | 描述 |
|---|---|---|
| HTML报告 | test-results/report.html | 带有测试结果的Pytest HTML报告 |
| 诱惑结果 | allure-results/ | 原始JSON测试结果数据 |
| 魅力HTML | allure-report/ | 带图表的交互式HTML报告 |
| 截图 | allure-report/data/attachments/ | 测试执行的视觉证据 |
______________________________________________________________________
📁 注: 这attachments_passed/和reporting_screenshots/文件夹包含专门用于README文档目的的屏幕截图。这些不是自动测试执行输出的一部分。
💡 最佳实践
- 模块化代码: 使用页面对象进行UI交互,以确保可重用性。
- 测试数据: 将测试数据存储在
utils/test-data.json并通过助手加载。 - 断言: 使用
assert用于简单检查;expect来自Playwright的复杂验证。 - 固定装置: 利用Pytest夹具进行安装/拆卸(例如,自动登录)。
- 并行执行: 并行运行测试以加快执行速度。
- 头部模式: 使用头部执行进行调试和视觉验证。
- 报告: 始终生成测试分析报告。
- 版本控制: 定期提交更改,并为功能使用分支。
- 代码质量: Python代码遵循PEP8;保持职能小而集中。
- 错误处理: 使用try-exclusion in页面对象进行健壮的交互。
- 文档: 更新README并将文档字符串添加到类/函数中。
🔧 命令摘要
- 安装依赖项:
pip install -r requirements.txt - 安装浏览器:
playwright install - 运行所有测试:
pytest - 运行特定测试:
pytest tests/.py - 生成HTML报告:
pytest --html=test-results/report.html - 生成诱惑结果:
pytest --alluredir=allure-results - 生成诱惑报告:
allure generate allure-results --clean -o allure-report - Open Allure报告:
allure open allure-report - Serve Allure报告:
allure serve allure-results - 运行MCP服务器:
python server.py
🚀 未来的增强功能
该框架被设计为可扩展的。计划在未来实施以下增强功能:
1.API集成
- REST API测试:添加对使用Python的API端点测试的支持
requests库或Playwright的API路由处理 - API测试层:创建专用的API测试文件(
tests/api/) - API实用程序:实施
utils/api_client.py用于可重复使用的API调用 - 响应验证:将API响应与预期架构进行比较
# Planned API test structure
def test_api_create_user():
response = api_client.post('/api/users', data=user_payload)
assert response.status_code == 201
assert response.json()['id'] is not None2.数据库集成
- 数据库连接:添加SQLAlchemy或直接数据库连接(PostgreSQL、MySQL)
- 数据固定装置:从数据库而不是JSON文件加载测试数据
- 状态验证:通过查询数据库验证应用程序状态
- 测试数据管理:创建用于播种和清理测试数据的实用程序
# Planned database fixture
@pytest.fixture
def db_connection():
return create_engine('postgresql://user:pass@localhost/testdb')
def test_verify_user_in_database(db_connection):
result = db_connection.execute("SELECT * FROM users WHERE username = 'test'")
assert result.fetchone() is not None3.CI/CD的实施
- GitHub 操作:添加
.github/workflows/配备自动化测试流程 - Jenkins管道:添加
Jenkinsfile用于企业CI/CD集成 - Docker支持:添加
Dockerfile和docker-compose.yml用于容器化执行 - 云执行:支持Sauce Labs、BrowserStack或LambdaTest执行
CI/CD框图
┌─────────────────────────────────────────────────────────────────────────────┐
│ CI/CD Pipeline Architecture │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ CODE │ │ BUILD │ │ TEST │ │ DEPLOY │
│ PUSH │────▶│ STAGE │────▶│ STAGE │────▶│ STAGE │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ GitHub │ │ Install │ │ Run │ │ Publish │
│ Trigger │ │ Deps │ │ Tests │ │ Reports │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Playwright│ │ Allure │ │ Slack/ │
│ Install │ │ Report │ │ Email │
│ Browsers │ │ HTML │ │ Notify │
└──────────┘ └──────────┘ └──────────┘增强架构框图
┌─────────────────────────────────────────────────────────────────────────────┐
│ Enhanced Framework Architecture │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ CI/CD Server │
│ (GitHub Actions) │
└────────┬────────┘
│
┌──────────────────┼──────────────────┐
│ │ │
┌─────▼─────┐ ┌──────▼──────┐ ┌─────▼─────┐
│ Docker │ │ Pytest │ │ MCP AI │
│ Container│───▶│ Runner │───▶│ Server │
└───────────┘ └──────┬──────┘ └───────────┘
│
┌────────────────────────────┼────────────────────────────┐
│ │ │
┌─────▼─────┐ ┌──────▼──────┐ ┌─────▼─────┐
│ UI/API │ │ Database │ │ Reports │
│ Tests │ │ Tests │ │ (Allure) │
└─────┬─────┘ └──────┬──────┘ └───────────┘
│ │
┌────▼────┐ ┌────▼────┐
│Playwright│ │ SQLAlchemy│
│Browser │ │Database │
└─────────┘ └──────────┘实施路线图
| 阶段 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| 阶段1 | API测试 | 添加REST API测试支持 | 高 |
| 第二阶段 | 数据库集成 | 连接到PostgreSQL/MySQL | 中等 |
| 第3阶段 | CI/CD管道 | GitHub操作工作流 | 高 |
| 第4阶段 | Docker支持 | 容器化测试执行 | 中等 |
| 第5阶段 | 云集成 | Sauce Labs/BrowserStack | 低 |
GitHub操作工作流示例
name: Playwright Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
playwright install --with-deps
- name: Run tests
run: pytest --alluredir=allure-results
- name: Upload Allure results
uses: actions/upload-artifact@v3
if: always()
with:
name: allure-results
path: allure-results/🔄 CI/CD设置(GitHub操作)
该项目包括通过GitHub Actions自动执行测试。工作流每6小时运行一次测试,并在每次推送/PR上运行测试。
安装说明
1.启用GitHub操作
- 转到GitHub上的存储库
- 导航至 行动 标签
- 工作流将从以下位置自动检测
.github/workflows/
2.配置GitHub页面(可选)
要自动托管Allure报告,请执行以下操作:
- 首选 设置 → 页面
- 在“构建和部署”下,选择 GitHub 操作 作为来源
- 工作流将在每次运行后部署报告
3.手动运行工作流
- 首选 行动 → 剧作家预定测试
- 点击 运行工作流 → 运行工作流
工作流功能
| 特性 | 描述 |
|---|---|
| 计划运行 | 每6小时(协调世界时00:00、06:00、12:00、18:00) |
| 多浏览器 | Chromium、Firefox、WebKit |
| 人工制品 | 诱人的结果、HTML报告、截图 |
| 自动部署 | 部署到主分支GitHub Pages的报告 |
查看结果
- 诱惑报告:从Actions工件下载或在GitHub页面上查看
- 测试结果:检查 行动 运行历史记录选项卡
- 人工制品:每次运行都会生成可下载的测试工件
定制
修改 .github/workflows/playwright-tests.yml 更改:
- 计划时间:编辑
cron表达 - 浏览器矩阵:添加/删除浏览器
- 环境变量:为API密钥、URL等添加机密。
📊 CI/CD证据
本节提供了CI/CD管道执行和自动化测试运行的直观证据。
CI/CD管道执行
CI/CD报告
完整的CI/CD报告,包括详细的测试执行历史、工件和Allure报告,可在以下网址获得:
🔗 CI/CD报告
报告包括:
- 测试执行历史
- 诱惑力测试结果
- HTML测试报告
- 屏幕截图伪影
- 生成日志和状态
______________________________________________________________________
🤝 贡献
遵循上述最佳实践。在提交之前,确保测试通过。使用描述性提交消息。
