关于 create-regression-test
用于生成 Playwright 回归或冒烟测试规格的技能,并涵盖配套测试数据与 fixture 集成。它规定通过 POM 操作、保持测试独立,并运行测试进行验证。
主要功能
- 01选择回归或冒烟套件
- 02集成 POM 与 fixture
- 03使用外部 JSON 测试数据
- 04独立且可并行运行的测试
- 05运行测试验证规格
适用场景
- 01为功能添加回归覆盖
- 02为关键流程创建冒烟测试
- 03准备可并行运行的端到端测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ agentmantis/ test-skills --skill create-regression-test安装后在 Claude Code 中输入/create-regression-test确认已加载。
附带文件references/spec-template.mdreferences/test-data-template.md
详细介绍
创建回归/冒烟测试
生成完整的测试规范,并集成相关测试数据和 fixture。
工作流
- 根据用户请求确定功能名称
- 确定测试套件——回归(默认)或冒烟
- 检查是否存在 POM:
e2e/poms/{feature}.page.ts- 如果存在,阅读其公共方法和 JSDoc,了解可用操作
- 如果不存在,先使用
create-pom技能创建
- 检查是否存在测试数据:
e2e/test-data/{feature}.json- 如果存在,读取并使用现有数据结构
- 如果不存在,使用模板数据创建 JSON 文件
- 检查 fixtures:
e2e/fixtures/base.ts- 如果尚未注册此功能,添加接口和加载器
- 在相应目录中创建 spec 文件
- 运行测试以验证其通过:
npx playwright test --project="chromium:regression" {feature}.spec.ts
Spec 文件结构
每个 spec 都必须遵循此模式:
import { test } from '../../fixtures/base';
import { getAuthFilePath } from '../../helpers/env-config';
import { FeaturePage } from '../../poms/feature.page';
const authFile = getAuthFilePath();
test.describe('Feature Name Tests', () => {
// One-time setup: clean stale data from previous failed runs
test.beforeAll(async ({ browser }) => {
const context = await browser.newContext({
storageState: authFile,
});
const page = await context.newPage();
const pom = new FeaturePage(page);
await pom.setUp();
await page.close();
await context.close();
});
test('should create a new item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[0];
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.verifyItemExists(item.name);
});
test('should edit an existing item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[0];
const updated = testData.feature.updatedItem;
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.editItem(item.name, updated.name, updated.value);
await pom.verifyItemExists(updated.name);
});
test('should delete an item', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const item = testData.feature.items[1];
await pom.navigateToPage();
await pom.createItem(item.name, item.value);
await pom.deleteItem(item.name);
await pom.verifyItemNotExists(item.name);
});
});
关键规则
Spec 中禁止直接调用页面方法
Spec 绝不能调用 page.getByRole()、page.locator()、page.waitForTimeout() 或任何 Playwright 原始页面方法。所有交互都必须通过 POM 进行。
Spec 中唯一允许使用 page 的情况:
- 将其传递给 POM 构造函数:
new FeaturePage(page) - 在
beforeAll中创建上下文:browser.newContext()/context.newPage()
测试独立性
- 每个测试都通过
pom.navigateToPage()独立导航 - 每个测试都创建自己的数据,绝不依赖其他测试的数据
- 测试会并行运行——使用带唯一后缀的测试数据以避免冲突
自定义测试导入
始终从项目的自定义 fixtures 导入 test:
// CORRECT
import { test } from '../../fixtures/base';
// WRONG — loses access to testData fixture
import { test } from '@playwright/test';
测试数据
JSON 文件:e2e/test-data/{feature}.json
{
"items": [
{ "name": "ItemA", "key": "keyA", "value": "some-value" },
{ "name": "ItemB", "key": "keyB", "value": "other-value" }
],
"updatedItem": { "name": "Updated", "value": "new-value" }
}
规则
- 绝不在 spec 或 POM 文件中硬编码数据
- 所有字符串值都会通过 testData fixture 自动添加唯一后缀
- 数据结构应符合 POM 方法所需的参数格式
完整模板请参阅 references/spec-template.md 和 references/test-data-template.md。
beforeAll 清理模式
beforeAll 块必须:
- 手动创建新的浏览器上下文(而不是使用测试的 page fixture)
- 加载用于身份验证的
storageState - 实例化 POM 并调用
setUp() - 完成后关闭页面和上下文
这样可以确保在任何测试执行前,清理之前失败运行留下的过期数据。
文件检查清单
创建回归/冒烟测试时,应生成:
-
e2e/poms/{feature}.page.ts— POM(创建或更新) -
e2e/test-data/{feature}.json— 测试数据 -
e2e/fixtures/base.ts— 添加功能接口和加载器(如果是新功能) -
e2e/tests/regression/{feature}.spec.ts(或tests/smoke/)— Spec 文件 - 所有测试彼此独立且可安全并行运行
- Spec 中没有原始
page调用 - 没有硬编码的测试数据
- 测试在 chromium 上通过:
npx playwright test --project="chromium:regression" {feature}.spec.ts
评论
支持 Markdown