我正在尝试为基于API的服务组建测试环境。理想情况下,我希望每个测试都以默认数据库开头。
让我感兴趣的是,我希望通过API触发写入,读取和更新,这将像其他任何正常日子一样触及数据库。我只是想确定回滚这些变化的最佳方法。我知道交易,但这些似乎与连接有关,因为Web应用程序的性质,我不能保证每个操作都使用相同的连接。
我的第一次尝试可能涉及每次导入整个数据库。我知道这会奏效,但可能会很慢。
交易似乎可以起作用,但我以这种方式使用它们相对较新。
答案 0 :(得分:0)
如果您确实需要验证测试数据是否已写入数据库,则事务不是您要查找的内容。您永远不会有对未提交的事务的可见访问权。
如果您正在执行此操作以进行代码的单元测试,并且您实际上不需要验证数据库中写入的数据,那么您应该创建一个数据库mock来使用而不是真正的数据库。如果您需要实际验证数据库写入,并且如果您知道每个测试只会改变数据库中的几个表,那么您可能想要做的一件事是让SQL可以删除/创建/填充关注的表,以便您可以在每次测试执行之前执行此操作,而不必处理mysqldump的完全导入。
我之前使用过的一个测试人员在他的测试数据库中使用了类似的方法,在每次测试运行之前制作了每个适用表的副本(使用CREATE TABLE test_table LIKE template_table
和INSERT INTO test_table SELECT * FROM template_table
)然后丢弃了每个测试的拆卸阶段的测试表。