快速复制大型MySQL数据库进行测试

时间:2015-06-16 13:46:22

标签: php mysql testing transactions acceptance-testing

在运行我们的验收测试套件时,我们希望在定义的数据库状态下执行每个单独的测试。如果其中一个测试会写入数据库(如创建用户或其他内容),那么它当然不会影响以后的测试。

我们已经考虑了几种方法来实现这一点,但是在每次测试之前复制整个数据库似乎不是最佳解决方案(考虑可能的性能问题)。

另一个想法是使用MySQL事务,但是我们的一些测试会导致许多HTTP请求,因此会产生不同的PHP进程,并且在完成完整测试后,它们会过早地丢失事务以进行干净回滚。

是否有更好的方法来保证每个验收测试的已定义数据库状态?我们希望比aufsbtrfs等解决方案更容易在系统级解决它。

1 个答案:

答案 0 :(得分:0)

您可以使用PhpUnit解决此问题。

它用于PHP的自动化测试。不是唯一的库,而是最扩展的库之一。

您也可以将它与数据库测试一起使用(https://phpunit.de/manual/current/en/database.html)。基本上,它可以让您完全满足您的需求。最初导入整个数据库,然后在每个测试套件中,加载您需要的内容,然后恢复到以前的状态。例如,您可以临时保存表A的当前状态,在完成套件的所有测试后,只需将其恢复即可。而不是重新加载整个数据库。

顺便说一句,拥有一个只有测试所需信息的最小数据库也会有很大帮助。在这种情况下,您不必处理大的性能问题,只需在每个测试套件之后恢复它。