如何在表中找到相对于初始SQL fixture的更改?

Amb*_*ber 8 mysql database testing fixtures

我有许多针对MySQL数据库运行的测试,该数据库预先加载了来自一组SQL文件的模式和示例数据.其中一些测试在运行期间也会在数据库中创建新数据.

通常,测试负责自行清理(因此不会污染数据库环境以进行其他测试).但是,似乎这些测试中的一些并没有完全这样做,因此在不应该的情况下留下额外/修改的记录.

由于正在测试的复杂代码集,在整个测试中运行单个事务是不可行的,所以我不能让MySQL回滚所有东西(有多个游标和多个复制的数据库服务器)涉及,以及其他因素).

我想有更容易识别这些测试被污染DB的方式,但由于它允许的测试写入DB(只要他们删除的东西后),我不能只是看所有对DB的更改 - 我只需要有效的更改,删除了取消修改.

我有一个想法是,如果有一种简单的方法来比较一个表的内容与另一个表的内容,我可以在运行每个测试之后这样做,将使用fixture初始化的表的内容与测试后的表的内容进行比较.

Amb*_*ber 1

到目前为止,我通过其他渠道得到的一些不同建议:

  • CHECKSUM TABLE- 这几乎可以完美满足我的需求,除了它仅适用于 MyISAM 表(我们使用 InnoDB)。

  • SHOW TABLE STATUS- 这提供了Data_length,这可能是一个简单的比较。如果我找不到更好的东西,这可能就足够了。