構造(何のテストか)と 実行制約(どう実行できるか)を混ぜない
✗ tests/parallel-safe/
✗ tests/serial-only/
これは:
…だけで ディレクトリ再編が発生します。
現実のテストはこうです:
ディレクトリ分割だと:
tests/order/
tests/serial/
tests/admin/
→ どこに置く?問題
tests/serial/order.spec.ts
👉 理由がコードに残らない
tests/
auth/
order/
payment/
admin/
describe レベルで表現するPlaywright には 公式に用意された解 があります。
test.describe('order lifecycle', () => {
test.describe.configure({ mode: 'serial' });
test('create order', async () => {});
test('pay order', async () => {});
});
test('change global setting', { tag: '@global-lock' }, async () => {});
test('read global setting', { tag: '@global-lock' }, async () => {});
CI 側で:
# global-lock は worker=1 で実行
npx playwright test --grep @global-lock --workers=1
--grep <pattern>
--grep-invert <pattern>
@lock:global-setting
@lock:delivery
@lock:billing
// playwright.config.ts
export default defineConfig({
projects: [
{
name: 'parallel-safe',
grepInvert: /@lock:/,
},
{
name: 'lock-global-setting',
grep: /@lock:global-setting/,
workers: 1,
},
{
name: 'lock-delivery',
grep: /@lock:delivery/,
workers: 1,
},
{
name: 'lock-billing',
grep: /@lock:billing/,
workers: 1,
},
],
});
# GitHub Actions
- run: npx playwright test --grep-invert @serial
- run: npx playwright test --grep @serial --workers=1
「グループ内並列・グループ間直列」