在beforeEach中清理数据库状态?

时间:2019-12-11 11:57:21

标签: cypress

Using after or afterEach hooks中,建议清理beforeEachbefore中的服务器/数据库状态。我理解基本原理,但我认为本文缺乏实际的用例。这是一个我不知道如何遵循最佳实践来解决的用例。

想象一下,我正在测试自己的github克隆。为了有一个干净的测试环境,我希望赛普拉斯使用一个干净的临时用户和一个干净的临时存储库。为了避免针对同一服务器的多个赛普拉斯实例之间的冲突(例如,多个前端开发人员并行测试其更改),每个赛普拉斯实例应有一个用户和一个存储库。这可以通过生成具有众所周知的随机ID(例如temp-user-13432481temp-repo-134234)的用户和存储库来实现。清理数据库中的混乱情况只是删除了temp-*个数据库。

问题是何时进行清理。如果按照建议在beforeEach()中进行清理,则在Cypress实例中运行测试将删除并行运行的其他Cypress实例的数据。

是否有一个我找不到的明显解决方案?人们通常如何清理数据库中的临时测试数据?

1 个答案:

答案 0 :(得分:0)

显而易见的答案是不针对单个远程服务器以分布式方式运行测试(而是在每个客户端上本地运行数据库服务器),但是由于这不能解决您的问题,因此,这里有一些建议:

  1. 设置一项cron作业,该作业将在每天结束时清理旧的测试存储库/用户。

    如果您仅清理早于例如几个小时,它将避免清理运行测试仍可能使用的资源。

    您必须确保ID随机且足够大(即具有足够的熵),即使您不清理它们一段时间也不会发生冲突。

  2. 让每个客户端(即运行测试的PC)使用指纹,以在数据库中对存储库/用户进行命名空间,并在每次测试运行前对其进行清理。

    这样,每个客户端只会清理自己的资源。

我倾向于解决方案(1)。