playwright.config.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { defineConfig, devices } from '@playwright/test';
  2. const BASE_URL = 'http://127.0.0.1:3000';
  3. const FRONTEND_URL = process.env.FRONTEND_URL || 'http://127.0.0.1:5173';
  4. export default defineConfig({
  5. // 测试目录(项目根 tests/ 下)
  6. testDir: '.',
  7. // 全局超时
  8. timeout: 120000,
  9. expect: { timeout: 15000 },
  10. // 失败重试
  11. retries: process.env.CI ? 1 : 0,
  12. // 并行数
  13. workers: process.env.CI ? 2 : 1,
  14. // 报告配置(含 AI 可读的 Markdown 摘要)
  15. reporter: [
  16. ['list'],
  17. ['json', { outputFile: 'test-results/results.json' }],
  18. ['html', { outputFolder: 'test-results/report', open: 'never' }],
  19. ['./helpers/reporter.ts'],
  20. ],
  21. // 全局设置
  22. use: {
  23. baseURL: BASE_URL,
  24. trace: 'retain-on-failure',
  25. screenshot: 'on',
  26. video: 'retain-on-failure',
  27. },
  28. // 项目配置:冒烟测试 & 回归测试 & 关键旅程 & 根目录散件
  29. projects: [
  30. {
  31. name: 'smoke',
  32. testDir: './smoke',
  33. use: { ...devices['Desktop Chrome'] },
  34. },
  35. {
  36. name: 'regression',
  37. testDir: './regression',
  38. use: { ...devices['Desktop Chrome'] },
  39. },
  40. {
  41. name: 'critical-journeys',
  42. testDir: './e2e/ui/critical-journeys',
  43. use: { ...devices['Desktop Chrome'] },
  44. },
  45. {
  46. // 核心业务 E2E:书籍 大纲→内容→音频 完整链路
  47. // 每次修改 book-generator / 发布上线前必跑
  48. name: 'core-business',
  49. testDir: './e2e/core-business',
  50. use: { ...devices['Desktop Chrome'] },
  51. // 单个 describe 内串行,因为所有断言共享同一本书的 bookId
  52. fullyParallel: false,
  53. workers: 1,
  54. // 单测超时:8 分钟(LLM + TTS 真实调用)
  55. timeout: 480_000,
  56. },
  57. {
  58. name: 'root-singles',
  59. testDir: '.',
  60. testMatch: /(example-rotation|page-cleanup-screenshot|textarea-size)\.spec\.ts$/,
  61. use: { ...devices['Desktop Chrome'] },
  62. },
  63. ],
  64. // 全局 setup / teardown
  65. globalSetup: './global-setup.ts',
  66. globalTeardown: './global-teardown.ts',
  67. // Web 服务器(可选,也可手动启动)
  68. webServer: process.env.START_SERVER
  69. ? [
  70. {
  71. command: 'npx tsx server/src/app.ts',
  72. port: 3000,
  73. timeout: 30000,
  74. reuseExistingServer: true,
  75. },
  76. {
  77. command: 'npm run dev:h5',
  78. cwd: 'my-uniapp-vue3',
  79. port: 5173,
  80. timeout: 30000,
  81. reuseExistingServer: true,
  82. },
  83. ]
  84. : undefined,
  85. });