在运行我们的验收测试套件时,我们希望在定义的数据库状态下执行每个单独的测试。如果其中一个测试会写入数据库(如创建用户或其他内容),那么它当然不会影响以后的测试。
我们已经考虑了几种方法来实现这一点,但是在每次测试之前复制整个数据库似乎不是最佳解决方案(考虑可能的性能问题)。
另一个想法是使用MySQL事务,但是我们的一些测试会导致许多HTTP请求,因此会产生不同的PHP进程,并且在完成完整测试后,它们会过早地丢失事务以进行干净回滚。
是否有更好的方法来保证每个验收测试的已定义数据库状态?我们希望比aufs
或btrfs
等解决方案更容易在系统级解决它。
答案 0 :(得分:0)
您可以使用PhpUnit解决此问题。
它用于PHP的自动化测试。不是唯一的库,而是最扩展的库之一。
您也可以将它与数据库测试一起使用(https://phpunit.de/manual/current/en/database.html)。基本上,它可以让您完全满足您的需求。最初导入整个数据库,然后在每个测试套件中,加载您需要的内容,然后恢复到以前的状态。例如,您可以临时保存表A的当前状态,在完成套件的所有测试后,只需将其恢复即可。而不是重新加载整个数据库。
顺便说一句,拥有一个只有测试所需信息的最小数据库也会有很大帮助。在这种情况下,您不必处理大的性能问题,只需在每个测试套件之后恢复它。