在使用Playwright、Puppeteer、Cypress等工具进行端到端测试时,我相信所有这些工具(除了后者,如果我错了请原谅)只允许你使用最新版本与每个版本捆绑在一起的每个浏览器。
在这种情况下,我想知道运行端到端验收测试的真正好处是什么,这些测试只会针对更有限的场景验证功能,而不是确保您的应用程序仍然可以在 Chrome 70 上运行?
任何关于为什么只考虑最新的浏览器版本而忘记其余的都是一个好主意的见解,通过使用 Playwright 而不是允许针对特定浏览器二进制文件进行定向测试的工具,例如,并让您的 E2E 测试结果如下:
PASS. Shopping-Cart (Modern)
FAIL. Shopping-Cart (chrome 70)
// Refactor
而不是
PASS. Shopping-Cart
// Yay! Release
首先,让我们澄清一下,在 Chrome/Chromium 的情况下,可以使用捆绑可执行文件以外的其他可执行文件来启动 Puppeteer 和 Playwright,因此它不是特定于 Cypress 的。
const browser = await puppeteer.launch({ executablePath: '/path/to/Chrome70' });
const browser = await chromium.launch({ executablePath: '/path/to/Chrome70' });
其次,即使Puppeteer和Playwright的功能列表中存在“测试”,它们也不是测试框架,而Cypress主要是一个测试工具。 更新(2023):自从我写了这个答案以来,我对我的说法争论不休,即 Playwright 主要不是一个测试框架。它确实主要是一个测试框架,请参阅
@playwright/test
比常规 playwright
库本身更受欢迎。
几年前,跨所有浏览器和大量用户使用的尽可能多的版本进行测试至关重要。
随着时间的推移,情况发生了变化。
I.) 这意味着对于大多数产品来说它已经足够了,并且是针对最新浏览器版本进行测试的最佳选择。
您提到了 Chrome 70,这是一个相对较旧的版本,于 2018 年 10 月发布,对于大多数产品而言,不需要支持它,它们与 Internet Explorer 11 或旧版 Edge 在同一桶中。
II.) 对于某些产品,您可能必须支持特定的(较旧的)浏览器版本,在这种情况下,使用特定的可执行文件会有所帮助。
顺便说一句,如果您决定针对多个浏览器版本运行测试,也可以使用 Puppeteer 或 Playwright,您只需要在迭代测试套件时提供正确的可执行文件(例如,在 Jest 的情况下:
describe.each()
可以运行相同的测试或具有不同配置和测试数据的测试套件)。