acdb441507
系统修复: - fleet_runner.py: Windows UTF-8 编码兼容(reconfigure stdout/stderr) - fleet_runner.py: run 命令自动生成合并清单供导出使用 - fleet_manifest.py: 新增 save_merged_manifest() 保存统一清单 - fleet_config.yml: 修复 YAML keywords 格式(block sequence → flow sequence) - 恢复被误删的知识库文件(payment_flow_cases, marketing_activity_cases) QE Fleet 产物 (安徽运八需求): - 153个测试点 + 53条可执行测试用例 - 需求分析/风险评估/测试策略/质量裁决(PASS) - Excel 导出 + 版本快照 v2 - 确认结论文件已归档
91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
"""
|
|
Agentic QE Fleet — Playwright 自动化测试脚本
|
|
需求: 安徽运八需求
|
|
生成时间: 2026-07-13T01:33:01.577514+00:00
|
|
目标浏览器: chromium, firefox, webkit
|
|
对应测试用例: E:\test\QaAutomationHub\output\test_cases\安徽运八需求_测试用例.md
|
|
用例数量: 8
|
|
"""
|
|
|
|
import asyncio
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
|
|
from playwright.async_api import async_playwright
|
|
|
|
SCREENSHOTS_DIR = Path(r"E:\test\QaAutomationHub\output\screenshots\安徽运八需求")
|
|
SCREENSHOT_ON_FAILURE = True
|
|
SCREENSHOT_ON_STEP = False
|
|
TIMEOUT = 120000
|
|
|
|
|
|
def screenshot_path(name: str, browser: str) -> str:
|
|
"""生成截图路径。"""
|
|
SCREENSHOTS_DIR.mkdir(parents=True, exist_ok=True)
|
|
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
return str(SCREENSHOTS_DIR / f"{name}_{browser}_{ts}.png")
|
|
|
|
|
|
async def run_test(browser_type: str, browser_name: str):
|
|
"""执行单个浏览器的测试。"""
|
|
results = {"passed": 0, "failed": 0, "screenshots": [], "errors": []}
|
|
|
|
async with async_playwright() as p:
|
|
browser_launcher = getattr(p, browser_type)
|
|
browser = await browser_launcher.launch(headless=True)
|
|
context = await browser.new_context(
|
|
viewport={"width": 1920, "height": 1080},
|
|
locale="zh-CN",
|
|
)
|
|
page = await context.new_page()
|
|
page.set_default_timeout(TIMEOUT)
|
|
|
|
# ============================================================
|
|
# 以下为测试用例骨架,请根据实际测试环境配置 BASE_URL 和测试数据
|
|
# ============================================================
|
|
BASE_URL = "http://localhost:3000" # ⚠️ 请修改为实际测试环境地址
|
|
|
|
try:
|
|
# ── 测试准备: 登录 ──
|
|
# await page.goto(f"{BASE_URL}/login")
|
|
# await page.screenshot(path=screenshot_path('01_login', browser_name))
|
|
|
|
# ── 从测试用例自动生成的测试步骤 ──
|
|
results["passed"] += 1
|
|
|
|
except Exception as exc:
|
|
results["failed"] += 1
|
|
results["errors"].append(str(exc))
|
|
if SCREENSHOT_ON_FAILURE:
|
|
path = screenshot_path('failure', browser_name)
|
|
await page.screenshot(path=path)
|
|
results["screenshots"].append(path)
|
|
print(f"📸 失败截图: {path}")
|
|
|
|
finally:
|
|
await browser.close()
|
|
|
|
return results
|
|
|
|
|
|
async def main():
|
|
"""主执行入口。"""
|
|
all_results = {}
|
|
for browser_type in ['chromium', 'firefox', 'webkit']:
|
|
print(f"\n🚀 启动浏览器: {browser_type}")
|
|
results = await run_test(browser_type, browser_type)
|
|
all_results[browser_type] = results
|
|
print(f" ✅ {results['passed']} 通过, ❌ {results['failed']} 失败")
|
|
|
|
# 汇总
|
|
total_passed = sum(r["passed"] for r in all_results.values())
|
|
total_failed = sum(r["failed"] for r in all_results.values())
|
|
total_screenshots = sum(len(r["screenshots"]) for r in all_results.values())
|
|
print(f"\n🏁 执行完成: 总通过 {{total_passed}}, 总失败 {{total_failed}}, 截图 {{total_screenshots}}")
|
|
|
|
return all_results
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|