mcpField
C
create-regression-test

create-regression-test

github.com/agentmantis测试与质量12115 次安装29 周前更新
代码仓库

关于 create-regression-test

用于生成 Playwright 回归或冒烟测试规格的技能,并涵盖配套测试数据与 fixture 集成。它规定通过 POM 操作、保持测试独立,并运行测试进行验证。

主要功能

  1. 01选择回归或冒烟套件
  2. 02集成 POM 与 fixture
  3. 03使用外部 JSON 测试数据
  4. 04独立且可并行运行的测试
  5. 05运行测试验证规格

适用场景

  1. 01为功能添加回归覆盖
  2. 02为关键流程创建冒烟测试
  3. 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。


工作流

  1. 根据用户请求确定功能名称
  2. 确定测试套件——回归(默认)或冒烟
  3. 检查是否存在 POM:e2e/poms/{feature}.page.ts
    • 如果存在,阅读其公共方法和 JSDoc,了解可用操作
    • 如果不存在,先使用 create-pom 技能创建
  4. 检查是否存在测试数据:e2e/test-data/{feature}.json
    • 如果存在,读取并使用现有数据结构
    • 如果不存在,使用模板数据创建 JSON 文件
  5. 检查 fixtures:e2e/fixtures/base.ts
    • 如果尚未注册此功能,添加接口和加载器
  6. 在相应目录中创建 spec 文件
  7. 运行测试以验证其通过:
    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 的情况:

  1. 将其传递给 POM 构造函数:new FeaturePage(page)
  2. 在 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 块必须:

  1. 手动创建新的浏览器上下文(而不是使用测试的 page fixture)
  2. 加载用于身份验证的 storageState
  3. 实例化 POM 并调用 setUp()
  4. 完成后关闭页面和上下文

这样可以确保在任何测试执行前,清理之前失败运行留下的过期数据。


文件检查清单

创建回归/冒烟测试时,应生成:

  • 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