如何让 playwright 运行的更快
· 1,097 词 · 6 分钟 读完 playwright进阶 翻译
在这篇文章中,我将解释如何使用 Playwright 将测试速度提高至少 10 倍。
首先,让我们来了解一下什么是 Playwright。
Playwright 是一个 Node.js 库,它允许你使用相同的 API 脚本和自动化浏览器,如 Chrome、Firefox 和 Safari。
如果你想知道为什么要使用 Playwright,可以看看这个链接。现在让我们通过一个例子来看看如何使用 Playwright 加速测试。
并行化
加速测试的一种方法当然是并行运行。首先,我们打开一个名为 example.spec.ts 的文件,放入 20 个测试用例,并在每个测试用例中写入以下代码,让其静态等待 30 秒。
await new Promise((resolve) => setTimeout(resolve, 30000));
这个数字将帮助我们理解通过并行运行获得的收益。我们的文件最终版本如下。
test.describe("20个示例测试", () => {
test('测试 - 1', async ({ page }) => {
await new Promise(resolve => setTimeout(resolve, 30000));
});
test('测试 - 2', async ({ page }) => {
await new Promise(resolve => setTimeout(resolve, 30000));
});
test('测试 - 3', async ({ page }) => {
await new Promise(resolve => setTimeout(resolve, 30000));
});
.
.
.
test('测试 - 19', async ({ page }) => {
await new Promise(resolve => setTimeout(resolve, 30000));
});
test('测试 - 20', async ({ page }) => {
await new Promise(resolve => setTimeout(resolve, 30000));
});
});
如果我们一个一个地运行这些测试(是的,你猜对了!)需要 10 分钟。
20 个测试一个一个运行需要 10 分钟
10 分钟对于每个运行 30 秒的 20 个测试用例来说太多了。让我们把这个时间缩短一些。Playwright 使用同时运行的工作进程来并行运行。让我们用 5 个工作进程并行运行这些测试,看看区别。
20 个测试用 5 个工作进程运行需要 2 分钟
是的,我们成功地用 5 个工作进程在 2 分钟内运行了 20 个测试。这里我们用了 5 个工作进程作为例子,但你可以根据你的系统增加或减少这个数量,直到找到最适合你的测试数量。
那么我们能跑得更快吗?5 倍的加速对我们来说够了吗?当然不够,我们需要更快。那么我们该怎么做呢?让我们看看 Playwright 的分片定义。
分片
如果我们使用多台机器,每台机器上分配相同数量的测试用例并并行运行,会怎么样?听起来不错。为此,Playwright 为我们提供了分片功能。
用分片运行 20 个测试
在同一台机器上,我们将测试用例分成 5 个相等的部分,并进行 4 次并行运行。如果我们在 5 台不同的机器上运行这些命令,所有测试用例将在 30 秒后运行完毕。这意味着本来需要 10 分钟逐一运行的所有测试用例现在可以在 30 秒内运行完成。不可思议吧?
npx playwright test - shard=index/total-shard
在这里你可以根据你拥有的机器数量划分资源。我这里举了 5 个的例子。
Gitlab 集成
让我们在 Gitlab 中创建一个流水线并在 5 台机器上试一试。创建一个.gitlab-ci.yaml 文件,让我们开始吧。
stages:
- test
tests:
stage: test
image: mcr.microsoft.com/playwright:v1.38.0-focal
parallel:
matrix:
- SHARD_INDEX: [1, 2, 3, 4, 5]
SHARD_TOTAL: 5
script:
- npm ci
- npx playwright test --shard=$SHARD_INDEX/$SHARD_TOTAL
我们使用“npm ci”命令安装我们的依赖项。
然后我们通过运行“npx playwright test — shard=$SHARD_INDEX/$SHARD_TOTAL”命令来运行测试。让我们看看等待我们的是什么。
流水线
总共 5 个作业
第一个作业的详细信息
正如你在这里看到的,流水线在大约 1 分钟内完成了 5 个并行运行的作业。实际上,测试运行了 30 秒,剩下的时间是环境准备时间,如你在截图中看到的。实际上,它从 10 分钟变成了 30 秒。
通过使用 Playwright 的工作进程和分片功能,你可以在短时间内运行大量测试用例。下次文章再见!