【发布时间】:2019-12-11 11:57:21
【问题描述】:
在Using after or afterEach hooks中,建议清理beforeEach或before中的server/db状态。我理解其中的原理,但我相信文本缺乏一些真实的用例。这是一个我不知道如何按照最佳实践解决的用例。
想象一下,我正在测试我自己的 github 克隆。为了让我的测试有一个干净的环境,我希望赛普拉斯使用一个干净的临时用户和一个干净的临时存储库。为了避免针对同一服务器的多个赛普拉斯实例之间的冲突(例如,多个前端开发人员并行测试他们的更改),应该有一个用户和一个专用于每个赛普拉斯实例的存储库。这可以通过生成具有众所周知的随机 id(例如,temp-user-13432481 和 temp-repo-134234)的用户和存储库来实现。清理数据库中的混乱只是删除temp-* 数据库。
问题是何时清理。如果按照建议在beforeEach() 中完成清理,则在 Cypress 实例中运行测试将删除并行运行的其他 Cypress 实例的数据。
我是否缺少明显的解决方案?人们通常如何清理数据库中的临时测试数据?
【问题讨论】:
-
我通常不推荐这种类型的数据库测试混乱。但我意识到人们做事的方式不同。我所做的是模拟我所有的 API 调用以返回我想要的,所以我永远不会访问数据库。我认为您应该使用其他类型的测试来测试数据库。我并不是说你的做法是错误的。我只是相信 cypress 是为了测试 UX,而不是搞乱数据库。因此,如果我需要一份客户列表,我会对其进行模拟并带回虚假数据。如果我保存一些东西,我也会嘲笑它。我从不碰数据库。我想重复一遍,我并不是说你所做的事情是错误的或不应该这样做..
-
@Maccurt 我看不到在复杂项目中模拟整个 API 的机会。您将不得不维护大量的固定装置,并随着 API 的每一次变化而调整它们。此外,在使用真正的 API 时,您可以在许多场景中免费获得 API 测试。
-
我们分两步清理我们的测试数据。第一步是套件范围的存储,其中存储了一些创建的 testdata-id。在每个
it之后,这些 id 都会被清除,具体取决于 testdata 的类型(某些 testdata 无法完全删除)。然后在第二步中,每次在 jenkins 中运行测试后,都会启动后续的 jenkins 作业以清理那些未清理的数据(例如,如果 cypress chrashes 等) -
做对是一件很棘手的事情,每个人都有不同的需求。我确实有一些针对真实 API 和数据库的测试,但它们都在我的测试环境中。我试图模拟任何数据可能发生变化并因此破坏测试结果的东西。我还想要一个将数据库设置回基线的脚本。我有所有的混合物。我个人希望 API 由编写 API 的人测试,在我的环境中,一个 C# 开发人员编写了 REST-API,我们设置了 C# N-“单元测试”(或集成测试)来命中 API。我们正在使用邮递员,但是......祝你好运......愉快的谈话
-
@Maccurt 您如何确保您的客户端能够使用最新的 API 更改?您可以根据需要单独测试每个,但除非您有集成测试 (e2e),否则无法确保正确性。
标签: cypress