用途
该技能是一个综合性测试专业化能力,用于在软件项目中覆盖从测试策略、自动化搭建、TDD 方法论、测试编写到 Web 应用测试的完整测试工作。它可以在以下情况使用:为项目搭建测试基础设施;创建测试策略与测试计划;编写单元、集成或 E2E 测试;实施 TDD/测试优先开发;分析测试覆盖率与质量;将测试集成到 CI/CD 流水线;使用 Playwright 测试 Web 应用;调试测试失败或提升测试可靠性;编写测试夹具、模拟数据或工厂函数;模拟外部依赖(API、数据库、文件系统);组织测试文件结构与测试套件;测试异步代码、Promise 或事件驱动行为;为 UI 组件实施快照测试;配置测试覆盖率阈值。
主要能力
- 测试策略:设计覆盖单元、集成、E2E 的综合测试策略,并给出测试金字塔建议分布(单元 70%、集成 20%、E2E 10%)。
- 测试自动化:搭建测试框架与自动化工具,并按语言给出框架选择参考。
- TDD 方法论:实施测试驱动开发工作流(红-绿-重构)。
- 测试编写:以合适模式编写聚焦、可维护的测试。
- 覆盖率分析:分析并改进测试覆盖率。
- CI/CD 集成:将测试集成到持续集成流水线。
- Web 应用测试:使用 Playwright 测试 Web 应用。
- 测试质量:提升测试的可靠性与可维护性。
测试策略
测试金字塔建议分布:单元测试 70%(快速、隔离、测试单个函数)、集成测试 20%(测试组件交互)、E2E 测试 10%(测试完整用户工作流)。测试类型包括:功能测试(正常路径、边缘用例、错误处理)、非功能测试(性能、安全、可访问性)、回归测试(防止破坏性变更)、冒烟测试(关键路径验证)。
框架选择参考:
- JavaScript/TypeScript:Jest、Vitest、Mocha 用于单元/集成;Playwright、Cypress 用于 E2E;React Testing Library 用于组件测试。
- Python:pytest 用于单元/集成;Selenium、Playwright 用于 E2E;unittest 用于标准库测试。
- Java:JUnit 用于单元测试;TestNG 用于集成;Selenium 用于 E2E。
- Go:内置 testing 包;Testify 用于断言。
- Rust:内置测试框架;Cargo test 用于运行测试。
TDD 方法论
TDD 是一种设计技术,而不只是测试技术;它通过小而自律的步骤产生设计更好、更易维护的代码。核心原则是始终先写测试再写代码,强制思考:需要什么行为?如何知道它有效?最简实现是什么?
三条法则(不可违反):未先写失败测试,不写任何生产代码;只写足以展示一个失败的测试;只写足以让该测试通过的代码。
红-绿-重构成循环:
- 阶段 1 RED:编写一个定义期望行为的失败测试,运行并验证它以正确原因失败,此时不写实现。
- 阶段 2 GREEN:编写最小代码让测试通过,抵制添加额外功能的冲动,若仍失败则修实现而非改测试。
- 阶段 3 REFACTOR:消除重复(DRY)、改进命名、抽取复杂逻辑,运行全部测试必须保持绿色,检查变更行的覆盖率;随后开始下一个行为的 RED 阶段。
测试编写模式
- Arrange-Act-Assert(AAA):Arrange 准备数据与条件,Act 执行被测代码,Assert 验证预期结果。文档给出 describe/it 示例。
- Given-When-Then(BDD 风格):Given 初始上下文,When 触发行为,Then 预期结果。
- 测试组织:给出目录结构(src/components 与 tests/unit、tests/integration、tests/e2e,加配置文件)。
覆盖率分析
建议阈值:行、函数、分支、语句均 80%+。关键路径(认证与授权、支付处理、数据校验)应追求 100%。常见缺口:错误处理路径、边缘用例、边界条件、集成点。改进策略:识别未覆盖代码路径、为错误场景添加测试、测试边缘与边界、提升集成测试覆盖。
CI/CD 集成
测试流水线阶段:单元测试(每次提交快速反馈)、集成测试(拉取请求)、E2E 测试(合并到 main 前)、性能测试(main 分支)。质量门:所有测试必须通过、覆盖率达标、无关键安全问题、性能基准达标。
使用方式:Playwright Web 应用测试
该技能在 scripts/ 目录包含 Python 辅助脚本,其中 with_server.py 管理服务器生命周期(支持多个服务器),应先运行 --help 查看用法。
单服务器:
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
多服务器(例如后端 + 前端):
python scripts/with_server.py
--server "cd backend && python server.py" --port 3000
--server "cd frontend && npm run dev" --port 5173
-- python your_automation.py
决策树:用户任务若为静态 HTML,则直接读取 HTML 文件识别选择器;成功则用选择器编写 Playwright 脚本,失败/不完整则按动态处理。若为动态 Web 应用,服务器未运行则先运行 python scripts/with_server.py --help,再用辅助脚本与简化 Playwright 脚本;服务器已运行则先侦察再行动:导航并等待 networkidle、截图或检查 DOM、从渲染状态识别选择器、用发现的选择器执行操作。
Playwright 最佳实践:将捆绑脚本当黑盒使用(用 --help 查看用法后直接调用);同步脚本使用 sync_playwright();完成后始终关闭浏览器;使用描述性选择器(text=、role=、CSS 选择器或 ID);添加适当等待(page.wait_for_selector() 或 page.wait_for_timeout());关键是在动态应用检查前等待 page.wait_for_load_state('networkidle')。
基础示例:
from playwright.sync_api import sync_playwright
with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto('http://localhost:5173') page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute # ... your automation logic browser.close()
示例目录 examples/ 包含:element_discovery.py(发现页面按钮、链接与输入)、static_html_automation.py(使用 file:// URL 处理本地 HTML)、console_logging.py(自动化期间捕获控制台日志)。
参考文件:references/framework_workflows.md(Python pytest、JavaScript Jest/Vitest、Java JUnit、Go、Rust 的框架专属 TDD 工作流与示例)、references/test_patterns.md(常见测试模式、测试组织、命名约定、测试替身 mock/stub/spy、参数化与反模式)、references/webapp_testing.md(Web 应用测试模式、Playwright 最佳实践、E2E 测试策略)、references/TESTING_REPORT.template.md(测试质量报告模板,含覆盖率指标、审计发现与建议)。
最佳实践
测试质量:隔离(测试独立、任意顺序可运行)、确定性(结果一致)、快速(单元测试每个 <100ms)、清晰(名称描述被测内容)、可维护(代码变化时易于更新)。TDD 最佳实践:每个测试验证一个行为、描述性名称、测试互相独立、模拟外部依赖保持快速、断言清晰。常见错误:一次写多个测试、跳过重构阶段、先实现后测试、GREEN 阶段过度设计、写立即通过的测试(必须先失败)。测试维护:需求变化时审查更新测试、移除过时测试、重构测试减少重复、保持测试数据工厂最新、监控测试执行时间。
与其他技能集成
debugging:测试意外失败时使用。code-review:TDD 产生的代码更易审查。dead-code-removal:测试帮助识别未使用代码。performance:用于性能测试策略。
元原则
TDD 是设计技术而非测试技术;循环始终是 RED → GREEN → REFACTOR → Repeat;先写测试迫使思考需要什么行为、如何知道有效、最简实现是什么,从而产生设计更好、更易维护的代码。
限制
资料未提供该技能的收费、价格、平台支持范围或具体使用步骤以外的信息;以上内容均依据提供的技能文档整理,缺失事实暂未提供。