Files
Yb-QaAutomationHub/output/execution/安徽运八需求/playwright_tests.py
T
xst e34a3c64ce feat: knowledge sync — 安徽运八需求知识沉淀回写知识库
知识库更新:
- historical_defects.md: +4条数据上报领域真实缺陷模式
  (阶段依赖链断裂/重试幂等/跨模块数据不一致/省份代码硬编码)
- common_missed_scenes.md: +11条数据上报专项易漏场景
  (多阶段依赖/第三方核验逐项/重试并发/跨模块一致性/省份隔离等)
- data_reporting_cases.md: 新增数据上报类需求优秀用例范式
  (8大覆盖框架+5条示例用例+7项关键风险点)
- terminology.md: +14条数据上报领域术语

系统修复:
- case_pipeline.py: 注册 data_reporting_cases.md + order_manage_cases.md
- governance_audit.py: 更新 case_generate/AGENTS 关键词期望(旧→新架构)
- AGENTS.md/README.md/.claude: 补全缺失关键词,治理审计通过
- .claude/skills/case_generate/: 创建向后兼容别名 skill
2026-07-13 14:22:31 +08:00

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 = "https://ybxcx.ynyun8.com:8000/admin" # ⚠️ 请修改为实际测试环境地址
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())