From efa3756c1620502d715a4595b91e8e41ad6a320f Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Mon, 19 Dec 2022 13:47:05 -0800 Subject: [PATCH] cherry-pick(#19574): chore: replace worker index w/ parallel index in the docs --- docs/src/auth.md | 49 ++++++------------------------------------------ 1 file changed, 6 insertions(+), 43 deletions(-) diff --git a/docs/src/auth.md b/docs/src/auth.md index ea6a5ab2734f1..8ee81d32d6291 100644 --- a/docs/src/auth.md +++ b/docs/src/auth.md @@ -319,46 +319,9 @@ export default globalSetup; By default, Playwright Test runs tests in parallel. If you reuse a single signed-in state for all your tests, this usually leads to the same account being signed in from multiple tests at the same time. If this behavior is undesirable for your application, you can sign in with a different account in each [worker process](./test-parallel.md#worker-processes) created by Playwright Test. -In this example we [override `storageState` fixture](./test-fixtures.md#overriding-fixtures) and ensure we only sign in once per worker, using [`property: TestInfo.workerIndex`] to differentiate between workers. +In this example we [override `storageState` fixture](./test-fixtures.md#overriding-fixtures) and ensure we only sign in once per worker, using [`property: TestInfo.parallelIndex`] to differentiate between workers. -```js tab=js-js -// fixtures.js -const { test: base } = require('@playwright/test'); - -const users = [ - { username: 'user-1', password: 'password-1' }, - { username: 'user-2', password: 'password-2' }, - // ... put your test users here ... -]; - -exports.test = base.extend({ - storageState: async ({ browser }, use, testInfo) => { - // Override storage state, use worker index to look up logged-in info and generate it lazily. - const fileName = path.join(testInfo.project.outputDir, 'storage-' + testInfo.workerIndex); - if (!fs.existsSync(fileName)) { - // Make sure we are not using any other storage state. - const page = await browser.newPage({ storageState: undefined }); - await page.goto('https://github.com/login'); - await page.getByLabel('User Name').fill(users[testInfo.workerIndex].username); - await page.getByLabel('Password').fill(users[testInfo.workerIndex].password); - await page.getByText('Sign in').click(); - await page.context().storageState({ path: fileName }); - await page.close(); - } - await use(fileName); - }, -}); -exports.expect = base.expect; - -// example.spec.js -const { test, expect } = require('./fixtures'); - -test('test', async ({ page }) => { - // page is signed in. -}); -``` - -```js tab=js-ts +```js // fixtures.ts import { test as baseTest } from '@playwright/test'; export { expect } from '@playwright/test'; @@ -371,15 +334,15 @@ const users = [ export const test = baseTest.extend({ storageState: async ({ browser }, use, testInfo) => { - // Override storage state, use worker index to look up logged-in info and generate it lazily. - const fileName = path.join(testInfo.project.outputDir, 'storage-' + testInfo.workerIndex); + // Override storage state, use parallel index to look up logged-in info and generate it lazily. + const fileName = path.join(testInfo.project.outputDir, 'storage-' + testInfo.parallelIndex); if (!fs.existsSync(fileName)) { // Make sure we are not using any other storage state. const page = await browser.newPage({ storageState: undefined }); await page.goto('https://github.com/login'); // Create a unique username for each worker. - await page.getByLabel('User Name').fill(users[testInfo.workerIndex].username); - await page.getByLabel('Password').fill(users[testInfo.workerIndex].password); + await page.getByLabel('User Name').fill(users[testInfo.parallelIndex].username); + await page.getByLabel('Password').fill(users[testInfo.parallelIndex].password); await page.getByText('Sign in').click(); await page.context().storageState({ path: fileName }); await page.close();