0

[Playwright Interview question #20]: Cách handle flaky tests trong Playwright?

Câu hỏi phỏng vấn #20: Cách handle flaky tests trong Playwright?

Trả lời mẫu:

1. Test retry configuration:

// playwright.config.js
export default {
  retries: 2, // Retry failed tests up to 2 times
  workers: 1, // Run serially to avoid race conditions
}

// Per test retry
test('flaky test', async ({ page }) => {
  test.info().annotations.push({ type: 'issue', description: 'JIRA-123' });
  // test code
});

2. Improve waits:

// ❌ Bad - fixed timeout
await page.waitForTimeout(2000);

// ✅ Good - wait for condition
await page.waitForLoadState('networkidle');
await expect(page.locator('.spinner')).toBeHidden();

3. Test isolation:

test.beforeEach(async ({ page }) => {
  // Fresh context for each test
  await page.goto('/');
  await page.evaluate(() => localStorage.clear());
});

4. Stabilize animations:

// Disable animations
const context = await browser.newContext({
  reducedMotion: 'reduce',
  // or globally
  extraHTTPHeaders: {
    'X-Disable-Animations': '1'
  }
});

5. Debug flaky tests:

// Trace on retry
export default {
  use: {
    trace: 'on-first-retry',
    video: 'on-first-retry',
    screenshot: 'only-on-failure'
  }
}

// Slow mode for debugging
test.slow(); // Triple the timeout

6. Handle timing issues:

// Wait for stable state
await page.waitForFunction(() => {
  const element = document.querySelector('#dynamic-content');
  return element && element.innerText.length > 0;
});

💡 Tips:

  • Analyze test reports để identify patterns
  • Use test.fixme() cho known flaky tests
  • Mock external dependencies
  • Run tests locally nhiều lần: --repeat-each=10
  • Monitor flakiness trends trong CI

Lời Kết

Playwright đang trở thành một trong những automation frameworks phổ biến nhất cho web testing. Thông qua series này, hy vọng bạn sẽ:

  • Nắm vững kiến thức từ cơ bản đến nâng cao
  • Tự tin trong các buổi phỏng vấn
  • Áp dụng hiệu quả vào dự án thực tế
  • Trở thành một phần của cộng đồng Playwright Việt Nam năng động

📚 Bắt đầu hành trình của bạn với: Bài 1: Playwright vs Selenium

💬 Có câu hỏi? Tham gia group Facebook của chúng mình!

Theo dõi series để không bỏ lỡ bài viết mới!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí