Playwright 测试重试

简介: Playwright 测试重试

测试重试是一种在测试失败时自动重新运行测试的方法。当测试不稳定并且间歇性失败时,这非常有用。测试重试在 配置文件 中配置。

失败
Playwright Test 在工作进程中运行测试。这些进程是操作系统进程,独立运行,由测试运行器编排。所有工作线程都有相同的环境,并且每个工作线程都启动自己的浏览器。

考虑以下片段:

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

test.describe('suite', () => {
test.beforeAll(async () => { / ... / });
test('first good', async ({ page }) => { / ... / });
test('second flaky', async ({ page }) => { / ... / });
test('third good', async ({ page }) => { / ... / });
test.afterAll(async () => { / ... / });
});
当所有测试通过后,它们将在同一个工作进程中按顺序运行。

工作进程启动

beforeAll 钩子运行

first good 次通过

second flaky 次通过

third good 次通过

afterAll 钩子运行

如果任何测试失败,Playwright Test 将丢弃整个工作进程以及浏览器,并启动一个新的工作进程。从下一个测试开始,测试将在新的工作进程中继续进行。

工作进程 #1 启动

beforeAll 钩子运行

first good 次通过

second flaky 失败

afterAll 钩子运行

工作进程 #2 启动
beforeAll 钩子再次运行

third good 次通过

afterAll 钩子运行

如果启用 retries,第二个工作进程将通过重试失败的测试来启动,并从那里继续。

工作进程 #1 启动

beforeAll 钩子运行

first good 次通过

second flaky 失败

afterAll 钩子运行

工作进程 #2 启动

beforeAll 钩子再次运行

重试 second flaky 并通过

third good 次通过

afterAll 钩子运行

该方案非常适合独立测试,并保证失败的测试不会影响健康的测试
重试
Playwright 支持测试重试。启用后,失败的测试将重试多次,直到通过,或达到最大重试次数。默认情况下,不会重试失败的测试。

Give failing tests 3 retry attempts

npx playwright test --retries=3

你可以在配置文件中配置重试次数:

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

export default defineConfig({
// Give failing tests 3 retry attempts
retries: 3,
});

Playwright 测试将测试分类如下:

"passed" - 第一次运行时通过的测试;

"flaky" - 第一次运行失败但重试时通过的测试;

"failed" - 第一次运行失败且所有重试均失败的测试。
Running 3 tests using 1 worker

✓ example.spec.ts:4:2 › first passes (438ms)
x example.spec.ts:5:2 › second flaky (691ms)
✓ example.spec.ts:5:2 › second flaky (522ms)
✓ example.spec.ts:6:2 › third passes (932ms)

1 flaky
example.spec.ts:5:2 › second flaky
2 passed (4s)

你可以使用 testInfo.retry 在运行时检测重试,任何测试、钩子或夹具都可以访问该重试。下面是一个在重试之前清除某些服务器端状态的示例。

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

test('my test', async ({ page }, testInfo) => {
if (testInfo.retry)
await cleanSomeCachesOnTheServer();
// ...
});

你可以使用 test.describe.configure() 指定对特定测试组或单个文件的重试。
import { test, expect } from '@playwright/test';

test.describe(() => {
// All tests in this describe group will get 2 retry attempts.
test.describe.configure({ retries: 2 });

test('test 1', async ({ page }) => {
// ...
});

test('test 2', async ({ page }) => {
// ...
});
});

目录
相关文章
|
7月前
|
测试技术 Shell API
Playwright系列(3):运行测试用例
Playwright系列(3):运行测试用例
228 1
|
7月前
|
测试技术 Python
Playwright系列(4):录制测试脚本
Playwright系列(4):录制测试脚本
229 0
|
1月前
|
Web App开发 测试技术 API
Playwright 测试报告中显示的标签和注释。
Playwright 测试报告中显示的标签和注释。
101 57
|
1月前
|
JSON 测试技术 数据格式
Playwright 测试报告器
Playwright 测试报告器
60 4
|
1月前
|
Web App开发 JavaScript 测试技术
Playwright 测试夹具
Playwright 测试夹具
17 1
|
1月前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
67 1
|
1月前
|
Web App开发 数据库 索引
Playwright 测试并行性
Playwright 测试并行性
43 0
|
4月前
|
数据采集 测试技术 数据安全/隐私保护
Playwright测试中避免使用no-wait-for-timeout的原因
在Web应用自动化测试中,Playwright作为首选框架,其稳定性至关重要。不当使用`no-wait-for-timeout`会导致测试结果不稳定、不符合真实用户体验且难以调试。推荐采用显式等待策略和合理设置超时时间,结合代理IP技术提高测试成功率和数据多样性。示例代码展示了如何在Playwright中配置代理IP进行数据抓取及分类统计。遵循这些最佳实践可确保测试既可靠又贴近实际用户场景。
288 4
Playwright测试中避免使用no-wait-for-timeout的原因
|
7月前
|
IDE 测试技术 开发工具
从零开始:使用 Playwright 脚本录制实现自动化测试
Playwright提供了一种便捷的脚本录制功能,类似于Selenium IDE。通过运行`playwright codegen`命令,你可以启动一个浏览器并记录你的操作,生成Python或异步代码。在示例中,展示了如何录制登录百度的过程,生成的代码可以直接用于自动化测试。Playwright Inspector允许你编辑和转换测试代码,支持生成Pytest格式的测试用例,方便Python开发者使用。这个功能使Playwright成为强大的Web自动化测试工具。
|
7月前
|
Web App开发 测试技术 C++
Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
Playwright是新兴的跨浏览器测试工具,相比Selenium,它支持Chrome、Firefox、WebKit,执行速度快,选择器更稳定。安装Playwright只需一条`pip install playwright`的命令,随后的`playwright install`会自动添加浏览器,无需处理浏览器驱动问题。这一优势免去了Selenium中匹配驱动的烦恼。文章适合寻求高效自动化测试解决方案的开发者。