使用Codeception为我们的自定义(使用Symfony组件和Doctrine)框架编写验收测试。我们有一套实用方法,由我们的Phpunit测试单独使用,用于创建各种要测试的实体。这包括用户和其他相关数据。MySQL上的数据库事务中的代码验收测试
对于我们的Codeception测试,我们希望利用这个功能,允许我们将自定义数据播种并在之后进行清理。在我们的单元测试中,这是由一个事务处理的。鉴于Codeception通过HTTP通过Phantomjs向我们的应用程序提出请求,它不能使用事务作为单独的数据库连接创建到测试所使用的连接(看起来这可能使用Dbh,但不支持这种连接由于MySQL不支持嵌套事务)。这样做的结果是验收测试可以播种数据,但除非数据持续存在,否则这些数据不会存在于外部请求中。
我能想到的唯一的其他解决方案是在测试套件运行之前触发数据库转储。将我们的测试数据保存到数据库,以便可以访问外部请求,然后在测试套件完成时恢复转储的数据库。尽管我们有一个非常大的数据库,但这会增加运行测试套件的大量开销。
我希望有其他选择可用,或其他我们可以尝试。 谢谢。
如何跟踪需要删除的内容?从每个表中获取最大主键并删除id> stored_key? – robjmills
我已更新答案,以显示如何定位需要删除的记录。 – sunomad