如何加快PHPUnit + DBUnit测试套件的执行速度?

Wil*_*gan 11 php phpunit dbunit pdo unit-testing

我正在使用PHPUnit/DBUnit来解决一些真正的速度问题.任何扩展都PHPUnit_Extensions_Database_TestCase需要永远运行.通过189次测试,该套件大约需要8-9分钟.我有点希望最多需要30秒;-)

看起来将数据库恢复到其初始状态是花费时间的过程,因此我们使数据集尽可能小并限制每个测试用例所需的表数.我正在使用灯具并尽可能地分享.

我可以使用任何设置或修改来加快执行速度吗?看看MySQL服务器在整个测试过程中做了什么,似乎发生了大量的截断/插入,但是将测试数据集打包到临时表中然后只需为每个测试选择它们会更快吗?

我正在使用的驱动程序是带有XML测试数据集的PDO/MySQL.

Wil*_*gan 20

通过谷歌搜索,我设法将所需的时间从10分钟减少到1分钟.事实证明,更改my.ini/my.cnf中的一些InnoDB配置设置会有所帮助.

设置innodb_flush_log_at_trx_commit = 2似乎可以完成这项工作.更改后,重新启动MySQL服务器.

有关dev.mysql.com的更多信息:innodb_flush_log_at_trx_commit

该设置控制ACID如何兼容日志的刷新.默认值为1,即完全ACID合规性,这意味着

日志缓冲区在每次事务提交时写入日志文件,并在日志文件上执行刷新到磁盘操作.

值为2时,会发生以下情况:

日志缓冲区在每次提交时写入文件,但不对其执行刷新到磁盘操作.

这里的关键区别在于,由于日志不会在每次提交时写出,因此操作系统崩溃或断电都可以将其清除.对于生产,坚持使用值1.对于使用测试数据库进行本地开发,值2应该是安全的.

如果您正在使用将传输到实时数据库的数据,我建议坚持使用值1.

  • 是的,这似乎有奇迹......只要确保把它放在[mysqld]部分(不是其他任何地方). (3认同)