端到端测试模拟真实用户:打开浏览器、输入网址、点击按钮、填表单、断言页面真的渲染出了期望内容。它验证的是从路由、接口、状态到渲染的整条链路,因此它是唯一能回答「这个流程用户真能走通吗」的测试。主流工具是 Playwright(微软,跨浏览器、API 现代化)与 Cypress(交互式时间长、单浏览器为主)。
它贵:跑一个用例要数秒,一次 CI 中等规模套件几分钟起,且对环境与接口数据敏感,flaky(偶发失败)率明显高于单元测试。实践要点是少而精——只覆盖核心商业链路(登录、下单、支付),接口数据用 mock server 锁死,用 id 或 testid 定位元素而非易变的文案,跑失败先查是不是自己的用例脆。
// login.spec.js —— Playwright 写法 import { test, expect } from '@playwright/test'; test('用户登录成功后跳转首页', async ({ page }) => { await page.goto('http://localhost:3000/login'); await page.fill('[data-testid="username"]', 'admin'); await page.fill('[data-testid="password"]', '123456'); await page.click('[data-testid="submit"]'); // 断言 URL 跳转 + 页面出现用户名 await expect(page).toHaveURL('/'); await expect(page.locator('.welcome')).toContainText('admin'); }); // 配置:playwright.config.js // export default { // testDir: './tests', // use: { baseURL: 'http://localhost:3000' }, // webServer: { command: 'npm run dev', url: 'http://localhost:3000', reuseExistingServer: true } // };