Community编程与开发github.com

bentoms-dev/测试工程师

编写能够捕获真实缺陷并经受重构考验的测试。适用于为新代码或现有代码添加测试、选择单元测试/集成测试/端到端测试、修复不稳定测试、搭建 Vitest/Jest/Playwright 或审查测试套件的缺口与脆弱性。

测试工程师 是什么?

该技能旨在帮助 AI 代理或开发者编写高质量、可维护且富有弹性的测试用例,重点捕捉真实缺陷而非仅仅覆盖代码行。它提供了一个分层决策框架,用于选择最经济有效的测试级别(单元、集成或端到端),并强调遵循“行为驱动”的测试命名规范和结构(Arrange-Act-Act)。它指导在系统边界进行模拟,避免为了便利而模拟内部模块,并推荐用于前端测试的特定库(Testing Library、MSW、userEvent)、端到端测试(Playwright)的 Web 优先断言模式。此外,该技能还解决了不稳定测试的调试方法,建议将其视为缺陷而非回避,并澄清代码覆盖率指标的实际用途(仅指示未测试部分,而非质量)。整体而言,它提供了一套实用、可操作的测试准则,显著提升了测试套件的可靠性和开发者的信心。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bentoms-dev/skills/tree/HEAD/skills/engineering/test-engineer

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

测试工程师 是做什么的?

你编写的测试能让团队充满信心地发布。一个好的测试在行为发生变更时失败,在仅实现细节变化时通过。

编写测试之前

  1. 检测现有技术栈(测试运行器、断言风格、文件命名方式、测试夹具、工厂函数、模拟方法)并保持一致。不要引入第二个框架。
  2. 用通俗语言识别被测行为:例如“购物车中有过期折扣时,结账显示全价”。
  3. 选择能证明该行为的最廉价的测试级别。

选择测试级别

  • 单元测试:纯逻辑、计算、解析器、化简器、校验。速度快,数量多。
  • 集成测试:模块与其真实协作者(数据库、HTTP 处理器、含真实子组件的渲染组件)一起测试。对于典型 Web 应用,这是价值最高的部分。
  • 端到端测试:少量关键用户流程(注册、登录、结账、支付)。速度慢且成本高,因此保持少量且稳定。

仅在系统边界进行模拟:第三方 HTTP API、电子邮件、支付、时间、随机性。不要为了图省事而模拟你自己的模块;那样测试的是模拟对象,而非代码。

编写好的测试

  • 按照** Arrange(安排)、Act(执行)、Assert(断言)** 结构组织。每个测试只测试一个行为。
  • 用描述行为的句子命名测试:it('拒绝过期优惠券'),而不是 it('工作正常') 或 it('调用 validateCoupon')。
  • 断言输出和可观察的效果,而不是私有方法或调用次数,除非该调用本身就是行为(例如“恰好发送一封邮件”)。
  • 覆盖缺陷实际隐藏的案例:空值、单值、多值、边界值、无效输入、null、Unicode、极大值、并发、依赖失败、权限拒绝。
  • 使用带有合理默认值的工厂函数或构建器,仅覆盖测试关心的部分。避免大型共享夹具。
  • 保持测试独立:不依赖顺序或其他测试遗留的状态。在测试之间重置数据库和模拟。
  • 使用虚假定时器和种子生成器控制时间和随机性。
  • 对于缺陷修复,先编写会失败的测试,并确认其因正确原因失败。

前端测试

  • 按优先级使用 Testing Library 查询:getByRole(带 name)、getByLabelText、getByText。避免使用 data-testid,除非没有语义化的替代方案,并且绝不通过 CSS 类名查询。
  • 使用 userEvent 进行交互,而不是 fireEvent。
  • 通过 findBy* 或 waitFor 等待 UI 变化,绝不使用固定睡眠。
  • 使用 MSW 在 HTTP 层模拟网络,而不是在组件内部模拟 fetch 调用。

使用 Playwright 进行端到端测试

  • 使用基于角色的定位器和 Web 优先断言(await expect(locator).toBeVisible());它们会自动等待。
  • 通过 API 或数据库预置测试数据,而不是通过 UI,除非该流程本身正是要测试的。
  • 使用 storageState 复用已认证状态,而不是在每个测试中登录。
  • 并行运行,每个 worker 使用隔离的数据。失败时捕获跟踪、屏幕截图和视频。

不稳定测试

将不稳定测试视为缺陷。常见原因:共享状态、真实网络、真实定时器、动画、未等待的 Promise、顺序依赖、时区或区域设置。通过重复运行(Playwright 中使用 --repeat-each=50,单元运行器中使用循环)复现问题,找到原因并修复。不要通过增加重试来掩盖问题。

代码覆盖率

覆盖率指示了什么未被测试;它不能证明质量。关注关键路径和复杂分支,而不是追求百分比。变异测试(例如 Stryker)是重要模块更好的衡量指标。

输出

列出添加的测试(按行为)、它们覆盖和有意未覆盖的内容、编写测试时发现的任何生产缺陷,以及运行这些测试的命令。


深入阅读: Scale & Load Engineer 是一个高级技能包,包含关联技能、生产模板、脚本和评估提示。

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

bentoms-dev/ai-feature-engineer

Build reliable, safe and affordable LLM-powered features in real products. Use when adding chat, summarisation, extraction, classification, RAG search, tool calling or agents to an app, when writing prompts or evals, choosing models, controlling cost and latency, or defending against prompt injection.

bentoms-dev/docs-readme-writer

Write developer documentation people actually read and trust. Use when creating or improving a README, getting-started guide, API reference, architecture decision record (ADR), runbook, onboarding guide, changelog or contributing guide, or when docs are outdated, confusing or missing.

bentoms-dev/github-actions-cicd-engineer

Build fast, secure and maintainable CI/CD pipelines with GitHub Actions. Use when creating or fixing workflows, speeding up slow CI, adding caching, matrices or deployments, managing secrets and environments, hardening workflows against supply-chain attacks, or setting up releases and preview deployments.

bentoms-dev/postgres-migrations-engineer

Design PostgreSQL schemas, write zero-downtime migrations and fix slow queries. Use when adding tables, columns, indexes or constraints, changing data on a live database, reviewing a migration for locking risks, reading EXPLAIN ANALYZE output, or working with Prisma, Drizzle, Knex, TypeORM, Rails or Django migrations.

bentoms-dev/shopify-theme-architect

Build, refactor and review Shopify Online Store 2.0 themes. Use when creating or editing Liquid sections, blocks, snippets, templates, theme settings, locales, or theme CSS/JS, and when reviewing a theme for performance, accessibility or merchant editability.

相关技能