配置全局设置和拆卸

简介: 配置全局设置和拆卸

有两种方法可以配置全局设置和拆卸:使用全局设置文件并将其设置在 globalSetup 下的配置中或使用 项目依赖。通过项目依赖,你可以定义一个在所有其他项目之前运行的项目。这是配置全局设置的推荐方法,因为项目依赖你的 HTML 报告将显示全局设置,跟踪查看器将记录设置的跟踪,并且可以使用夹具。

选项 1:项目依赖
项目依赖 是在另一个项目中的测试运行之前需要运行的项目列表。它们对于配置全局设置操作非常有用,以便一个项目首先依赖于此运行。使用依赖允许全局设置生成跟踪和其他工件。

设置
首先我们添加一个名为 '设置数据库' 的新项目。然后我们给它一个 testProject.testMatch 属性以匹配名为 global.setup.ts 的文件:

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
testDir: './tests',
// ...
projects: [
{
name: 'setup db',
testMatch: /global.setup.ts/,
},
// {
// other project
// }
]
});

然后,我们将 testProject.dependencies 属性添加到依赖于安装项目的项目中,并将我们在上一步中定义的依赖目的名称传递到数组中:
然后,我们将 testProject.dependencies 属性添加到依赖于安装项目的项目中,并将我们在上一步中定义的依赖目的名称传递到数组中:

playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
testDir: './tests',
// ...
projects: [
{
name: 'setup db',
testMatch: /global.setup.ts/,
},
{
name: 'chromium with db',
use: { ...devices['Desktop Chrome'] },
dependencies: ['setup db'],
},
]
});

在此示例中,'具有 db 的 chromium' 项目依赖于 '设置数据库' 项目。然后,我们创建一个设置测试,存储在项目的根级别(请注意,设置和拆卸代码必须通过调用 test() 函数定义为常规测试):

tests/global.setup.ts
import { test as setup } from '@playwright/test';

setup('create new database', async ({ }) => {
console.log('creating new database...');
// Initialize the database
});
tests/menu.spec.ts
import { test, expect } from '@playwright/test';

test('menu', async ({ page }) => {
// Your test that depends on the database
});

拆除
你可以通过向安装项目添加 testProject.teardown 属性来拆卸你的安装。这将在所有依赖目运行后运行。

首先,我们将 testProject.teardown 属性添加到我们的安装项目中,名称为 '清理数据库',这是我们在上一步中为拆卸项目指定的名称:
playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
testDir: './tests',
// ...
projects: [
{
name: 'setup db',
testMatch: /global.setup.ts/,
teardown: 'cleanup db',
},
{
name: 'cleanup db',
testMatch: /global.teardown.ts/,
},
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
dependencies: ['setup db'],
},
]
});

然后我们在项目的 tests 目录中创建一个 global.teardown.ts 文件。这将用于在所有测试运行后从数据库中删除数据。

tests/global.teardown.ts
import { test as teardown } from '@playwright/test';

teardown('delete database', async ({ }) => {
console.log('deleting test database...');
// Delete the database
});
选项 2:配置 globalSetup 和 globalTeardown
你可以在运行所有测试之前使用 配置文件 中的 globalSetup 选项进行一次设置。全局设置文件必须导出一个采用配置对象的函数。该函数将在所有测试之前运行一次。

同样,在所有测试之后使用 globalTeardown 运行一次。或者,让 globalSetup 返回一个将用作全局拆卸的函数。你可以使用环境变量将端口号、身份验证令牌等数据从全局设置传递到测试。

注意
使用 globalSetup 和 globalTeardown 不会产生痕迹或伪影,配置文件中指定的选项(如 headless 或 testIdAttribute)不适用。如果你想要生成跟踪和工件并尊重配置选项,请使用 项目依赖。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
globalSetup: require.resolve('./global-setup'),
globalTeardown: require.resolve('./global-teardown'),
});

示例
以下是一个全局设置示例,该示例仅进行一次身份验证并在测试中重用身份验证状态。它使用配置文件中的 baseURL 和 storageState 选项。

global-setup.ts
import { chromium, type FullConfig } from '@playwright/test';

async function globalSetup(config: FullConfig) {
const { baseURL, storageState } = config.projects[0].use;
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(baseURL!);
await page.getByLabel('User Name').fill('user');
await page.getByLabel('Password').fill('password');
await page.getByText('Sign in').click();
await page.context().storageState({ path: storageState as string });
await browser.close();
}

export default globalSetup;
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalSetup: require.resolve('./global-setup'),
use: {
baseURL: 'http://localhost:3000/',
storageState: 'state.json',
},
});

测试开始时已经经过身份验证,因为我们指定了由全局设置填充的 storageState。

import { test } from '@playwright/test';

test('test', async ({ page }) => {
await page.goto('/');
// You are signed in!
});
你可以通过 process.env 将任意数据设置为环境变量,从而使全局设置文件中的任意数据在测试中可用。

global-setup.ts
import type { FullConfig } from '@playwright/test';

async function globalSetup(config: FullConfig) {
process.env.FOO = 'some data';
// Or a more complicated data structure as JSON:
process.env.BAR = JSON.stringify({ some: 'data' });
}

export default globalSetup;

测试可以访问全局设置中设置的 process.env 属性。

import { test } from '@playwright/test';

test('test', async ({ page }) => {
// environment variables which are set in globalSetup are only available inside test().
const { FOO, BAR } = process.env;

// FOO and BAR properties are populated.
expect(FOO).toEqual('some data');

const complexData = JSON.parse(BAR);
expect(BAR).toEqual({ some: 'data' });
});

捕获全局设置期间的故障痕迹
在某些情况下,捕获全局设置期间遇到的故障的踪迹可能很有用。为此,你必须在设置中执行 开始追踪,并且必须确保在发生错误时执行 停止追踪,然后才会引发该错误。这可以通过将你的设置封装在 try...catch 块中来实现。下面是扩展全局设置示例以捕获跟踪的示例。

global-setup.ts
import { chromium, type FullConfig } from '@playwright/test';

async function globalSetup(config: FullConfig) {
const { baseURL, storageState } = config.projects[0].use;
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
try {
await context.tracing.start({ screenshots: true, snapshots: true });
await page.goto(baseURL!);
await page.getByLabel('User Name').fill('user');
await page.getByLabel('Password').fill('password');
await page.getByText('Sign in').click();
await context.storageState({ path: storageState as string });
await context.tracing.stop({
path: './test-results/setup-trace.zip',
});
await browser.close();
} catch (error) {
await context.tracing.stop({
path: './test-results/failed-setup-trace.zip',
});
await browser.close();
throw error;
}
}

export default globalSetup;

目录
相关文章
|
7月前
|
网络虚拟化
VLANIF配置
VLANIF配置
64 0
|
7月前
|
Ubuntu 安全 算法
UbuntuSSH配置
UbuntuSSH配置
88 0
|
Web App开发 网络协议 网络安全
启用ECH的配置
开启 Encrypted Client Hello (Secure SNI)
5220 0
|
安全 Shell 网络安全
安全配置
一、 密码配置1、 全局明文密码:控制路由器从用户模式登录到特权模式的密码,显示为明文。Router (confi g)#enable password yujieRouter (config)#Router>enablePassword:明文密码加密:输入明文密码后,通过该命令将密码加密。Router (config)#service password-encryptionRouter(config)#2、 全局密文密码:控制路由器从用户模式登录到特权模式的密码,显示为密文。Router(config)#enable secret cntc-edu.comRoute(通过设置可使用用户在本地
安全配置
|
开发工具 git
Git命令集之一——配置参数
Git命令集之一——配置参数
119 0
|
缓存 安全 网络架构
在启用属性的情况下启动 Confluence 6
在一些情况下,你可以希望 Confluence 在系统启动的时候就对属性文件进行打印。如果你的 Confluence 经常进行重启,并且你可能忘记来启动针对系统诊断的属性文件日志开关。
1196 0
Confluence 6 自定义主面板
主面板(dashboard)是你 Confluence 站点的默认载入页面。这个页面能够给用户能够找到其他页面的所有必须的工具,重新进入未完成的工作或者快速导航到喜欢的空间和页面 站点的欢迎信息将会在 Confluence 站点的页面的右侧部分,这个位置是为用户介绍你站点的的最好的位置。
992 0
|
SQL 存储 关系型数据库