docs: document environment variables usage (#12294)

This commit is contained in:
Dmitry Gozman 2022-02-22 15:24:35 -08:00 committed by GitHub
parent 114edecd3a
commit 26d6537119
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -181,3 +181,149 @@ export const test = base.test.extend<TestOptions>({
:::note
Parametrized projects behavior has changed in version 1.18. [Learn more](./release-notes#breaking-change-custom-config-options).
:::
## Passing Environment Variables
You can use environment variables to configure tests from the command line.
For example, consider the following test file that needs a username and a password. It is usually a good idea not to store your secrets in the source code, so we'll need a way to pass secrets from outside.
```js js-flavor=js
// example.spec.js
test(`example test`, async ({ page }) => {
// ...
await page.locator('#username').fill(process.env.USERNAME);
await page.locator('#password').fill(process.env.PASSWORD);
});
```
```js js-flavor=ts
// example.spec.ts
test(`example test`, async ({ page }) => {
// ...
await page.locator('#username').fill(process.env.USERNAME);
await page.locator('#password').fill(process.env.PASSWORD);
});
```
You can run this test with your secrect username and password set in the command line.
```bash bash-flavor=bash
USERNAME=me PASSWORD=secret npx playwright test
```
```bash bash-flavor=batch
set USERNAME=me
set PASSWORD=secret
npx playwright test
```
```bash bash-flavor=powershell
$env:USERNAME=me
$env:PASSWORD=secret
npx playwright test
```
Similarly, configuration file can also read environment variables passed throught the command line.
```js js-flavor=js
// playwright.config.js
// @ts-check
/** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = {
use: {
baseURL: process.env.STAGING === '1' ? 'http://staging.example.test/' : 'http://example.test/',
}
};
module.exports = config;
```
```js js-flavor=ts
// playwright.config.ts
import { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
use: {
baseURL: process.env.STAGING === '1' ? 'http://staging.example.test/' : 'http://example.test/',
}
};
export default config;
```
Now, you can run tests against a staging or a production environment:
```bash bash-flavor=bash
STAGING=1 npx playwright test
```
```bash bash-flavor=batch
set STAGING=1
npx playwright test
```
```bash bash-flavor=powershell
$env:STAGING=1
npx playwright test
```
### .env files
To make environment variables easier to manage, consider something like `.env` files. Here is an example that uses [`dotenv`](https://www.npmjs.com/package/dotenv) package to read environment variables directly in the configuration file.
```js js-flavor=js
// playwright.config.js
// @ts-check
// Read from default ".env" file.
require('dotenv').config();
// Alternatively, read from "../my.env" file.
require('dotenv').config({ path: path.resolve(__dirname, '..', 'my.env') });
/** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = {
use: {
baseURL: process.env.STAGING === '1' ? 'http://staging.example.test/' : 'http://example.test/',
}
};
module.exports = config;
```
```js js-flavor=ts
// playwright.config.ts
import { PlaywrightTestConfig } from '@playwright/test';
import dotenv from 'dotenv';
import path from 'path';
// Read from default ".env" file.
dotenv.config();
// Alternatively, read from "../my.env" file.
dotenv.config({ path: path.resolve(__dirname, '..', 'my.env') });
const config: PlaywrightTestConfig = {
use: {
baseURL: process.env.STAGING === '1' ? 'http://staging.example.test/' : 'http://example.test/',
}
};
export default config;
```
Now, you can just edit `.env` file to set any variables you'd like.
```bash
# .env file
STAGING=0
USERNAME=me
PASSWORD=secret
```
Run tests as usual, your environment variables should be picked up.
```bash
npx playwright test
```