如果我们可以传递一个选项来禁用将操作系统名称附加到拍摄的快照,那就太好了,因为当我在 Macos 上的本地计算机上运行测试时,“darwin”会附加到快照名称,但测试失败,因为名称将linux 在管道中运行时
[microsoft/playwright][功能] 添加选项以禁用将操作系统名称添加到快照
回答
你的 darwin 屏幕与 linux 非常不同,所以更新\混合它们可能是非常错误的
@dimkin-eu 那么解决这个问题的正确方法是什么?
@amrsa1你可以覆盖testinfo
对象。对我来说,不推荐这种方法,因为你不能确定截图功能(例如,在Linux中可能会有所不同,并且你的macos测试可能会失败)
https://playwright.dev/docs/api/class-testinfo#test-info-snapshot-suffix 示例
import {test} from '@playwright/test';
test('demo', async ({page}, testinfo) => {
testinfo.snapshotSuffix = ''; // by default is `process.platform`
// your test
expect(page).toHaveScreenshot();
});
也许您可以使用 Docker 映像运行/更新您的映像,如下所示:
https://playwright.dev/docs/test-snapshots
If you are not on the same operating system as your CI system, you can use Docker to generate/update the screenshots:
@ltsuda,但如果我更新屏幕截图,则意味着我要拍摄屏幕截图,然后从应用程序本身进行验证。如果我做对了,我认为这不会是有效的测试
@dimkin-eu 那么解决这个问题的正确方法是什么?
@amrsa1,我们仅在 CI 上执行图像比较和更新,您可以在本地比较更改前后的屏幕,但本地.png
在.gitignore
如果你愿意,你可以在本地启动 CI 中使用的相同的 docker 镜像,并在本地与 CI 中相同的操作系统+浏览器进行比较
但我们甚至从未做过前面的步骤——只是为了一些奇怪的调试。
@dimkin-eu 我有点困惑,据我所知,当我们进行快照比较时,第一次运行会失败,因为还没有参考,然后第二轮将通过,因为屏幕截图将保存在本地环境上的上一次运行中
如果我们在 Circle CI 上运行,更新快照然后将其与“本身”进行比较有什么意义,我不确定我是否正确理解了这个过程
就我而言,我推送已在本地保存的屏幕截图,并将它们用作参考或测试数据进行比较
我认为就我而言,最好的方法是首先在 docker 容器内本地运行它们,然后将快照目录卷到我的存储库的根目录中,然后将代码推送到 CI
@aslushnikov 你能详细说明一下你发现的一些适合你更新 CI 屏幕截图的工作流程吗?我相信这与https://github.com/microsoft/playwright/issues/14218#issuecomment-1129020335的建议类似。
这是我们正在考虑改善体验的一个活跃领域。
如果您在不同的平台上运行屏幕截图测试,您可能希望保留平台后缀不变,因为它们可能存在细微的差异。然而,这确实使得管理你的笔记本电脑屏幕截图与 CI 屏幕截图变得有点麻烦。
如果您确实想禁用该后缀,请参阅https://github.com/microsoft/playwright/issues/11226#issue-1095625280了解建议的解决方法。
@dimkin-eu 我有点困惑,据我所知,当我们进行快照比较时,第一次运行会失败,因为还没有参考,然后第二轮将通过,因为屏幕截图将保存在本地环境上的上一次运行中
如果我们在 Circle CI 上运行,更新快照然后将其与“本身”进行比较有什么意义,我不确定我是否正确理解了这个过程
就我而言,我推送已在本地保存的屏幕截图,并将它们用作参考或测试数据进行比较
所以这样的工作流程
- 运行截图测试/比较
- 如果阶段失败 - 运行屏幕比较
--update-snapshots
- 因此丢失/失败的将被更新/创建/添加到 MR - (在我们的 CI 中,推动屏幕的阶段启动了新的 CI 工作 - 魔法:))
- 检查 MR 更改是否正常并合并它们(或修复/更改您的 MR)
下一个 MR 使用之前合并的 MR 中准备的屏幕验证自己的运行
是的,使用 git LFS 进行屏幕截图存储
如果您保存 darwin 屏幕,然后将它们提交给 Linux 测试运行器,它们肯定会有所不同,因为渲染引擎非常不同。这样的选择根本没有意义。
作为分类的一部分结束。这是我们希望在未来改进的已知领域!感谢大家在此期间分享您当前的工作流程!