When running @playwright/test tests in parallel, using global variables in the beforeEach
hook can lead to unexpected results. This is because each test runs in its own worker process, and they cannot share state or global variables.
To handle this situation, you have a few options:
You can disable parallelism by allowing only a single worker at any time. Set the workers: 1
option in the configuration file or pass --workers=1
to the command line. This ensures that all tests run sequentially and do not interfere with each other's state.
// playwright.config.ts
import { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
workers: 1,
// other configurations...
};
export default config;
If you have many independent tests in a single file and want to run them in parallel, use test.describe.configure()
to parallelize them within that file. Keep in mind that each test executes all relevant hooks just for itself, including beforeEach
and afterEach
.
const parallelTests = test.describe.configure({ workers: 4 });
parallelTests.describe('Independent tests', () => {
parallelTests.beforeEach(async ({ page }) => {
await page.goto('https://ray.run/');
});
parallelTests('Test 1', async ({ page }) => {
// Test code...
});
parallelTests('Test 2', async ({ page }) => {
// Test code...
});
});
Make your tests isolated so they can run independently without relying on shared state or global variables. Avoid using global variables as much as possible and pass necessary data between functions using parameters or return values.
async function fetchData(url: string) {
// Fetch data from the URL...
}
test('Test 1', async ({ page }) => {
const data = await fetchData('https://ray.run/');
// Test code using the fetched data...
});
In conclusion, to handle global variables in parallel tests, either disable parallelism, parallelize independent tests, or make your tests isolated by avoiding shared state and passing necessary data between functions explicitly.
If you still have questions, please ask a question and I will try to answer it.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].