5

我最近一直在运行几千个 phpunit 测试。我使用--process-isolation选项,因此完成测试需要大约 40 分钟。

有时在积极重构之后,很多测试开始失败(感谢上帝,我有测试!)。如果测试在测试套件中间失败,那么我必须再等 20 分钟才能看到它是什么测试以及它的消息。

--stop-on-failure如果不中断整个过程,我会使用。基本上我正在寻找--log-on-failure选择。

我正在寻找的是某种方式来查看测试失败后的失败/错误消息,而不是在所有其他测试完成后。但不应中断其他测试执行的整个过程。记录到文件也足够了。

我会很感激你的建议。

编辑:我很高兴看到您的建议,我如何总体上改进我的测试,我将尝试遵循它们,但是我想找到解决我确切问题的方法。

4

2 回答 2

2

即使你忽略了它,你也在寻找--stop-on-failure.

因为当您看到错误在哪里时,您可以编写修复程序。然后你需要再次运行测试。

如果您只登录失败,您还不能再次运行测试,因为假设 10 秒后第一个失败可见并在另一分钟内修复。但是,您仍然需要等待大约。38 分钟,直到您可以运行测试。

您遇到的另一个问题是您的测试花费的时间太长。您需要更快地获得它们。您使用--process-isolation的最终表明您进行了集成测试。将它们与您的单元测试分开,它们通常需要更长的时间。

然后,您可以单独并连续地运行集成测试(始终在循环中),并在保存文件时运行单元测试。

于 2013-01-29T15:13:19.057 回答
1

很高兴你编写了所有这些测试。正如您所说,当您开始一项大型重构任务时,它们可以迅速证明自己的价值!但是 40 分钟听起来像是一组非常慢的测试,即使是几千个测试——我在大约 10 秒内跑了几百个。也许你有一些特别慢的测试?

如果您的系统适合这样做,则可能值得将它们分成组,以便您可以将其设置为仅运行与正在更改的代码相关的测试。PHPUnit 支持对测试进行分组,并在命令行上指定要运行的组。

如果您的大多数测试都非常快,但您有少数非常慢的测试占用了大部分时间,这可能是一种特别有效的策略。如果你能让它跳过一些不相关的非常慢的测试,那将会有很大的不同。

此外,这种将测试分组的策略还允许您--stop-on-failure为每个组使用,同时仍然能够运行其他组中的所有测试。

有关分组测试的更多信息,请参阅PHPUnit 手册

希望有帮助。

于 2013-01-29T10:12:39.180 回答