如何中途终止PHPUnit测试仍获取失败列表/测试报告?
我们团队有一套运行时长超过30分钟的测试套件,经常会碰到这样的情况:测试运行中出现失败,但后续还有大量测试待执行。
我通常不想用--stop-on-failure参数在首次失败时就终止测试,但也实在不想再等10-15分钟直到整个套件跑完。可如果直接按Ctrl+C终止进程,又会立刻停止,完全看不到已经执行的测试结果。
我特别喜欢PHPUnit默认的控制台输出格式,它实用又直观。试过用--testdox-text参数把结果记录到文件,生成的列表虽然简洁但细节不足;而--log-teamcity生成的日志又太冗长,充满技术细节,用起来很不方便。
所以想请教各位:有没有办法在测试套件完全结束前,就能查看到类似控制台格式的PHPUnit测试信息?
更新
我已经在PHPUnit官方仓库提交了相关Issue。
我的解决方案
嘿,这个问题我太有共鸣了——长测试套件真的很磨人!给你几个实用的方案试试:
实时输出到文件+实时监控:
你可以把PHPUnit的控制台输出同时保存到文件,并且实时查看内容。在Linux/macOS下可以用以下命令:phpunit > test_output.log 2>&1 & tail -f test_output.log这条命令会把测试运行的所有输出(包括错误信息)写入
test_output.log,同时用tail -f实时监控文件内容。就算中途按Ctrl+C终止进程,你也能直接打开test_output.log查看已经执行的测试结果,格式和控制台输出完全一致。
如果你用Windows,可以在PowerShell里用类似的命令:phpunit > test_output.log 2>&1 Get-Content test_output.log -Wait用
tee命令同步输出到控制台和文件:
另一个更简单的方式是用tee命令,它能让输出同时显示在控制台和写入文件:phpunit --verbose | tee test_output.log加上
--verbose参数还能看到更详细的实时进度,就算中途终止,文件里也已经保存了截至那一刻的所有控制台输出,直接查看文件就能拿到你想要的信息。自定义PHPUnit监听扩展:
如果上面的方案还不够满足你的需求,你可以写一个简单的PHPUnit测试监听扩展,实现TestListener接口。这个扩展可以在每个测试用例执行完成后,就把结果以控制台格式追加到指定文件里。这样你随时都能打开文件查看最新的测试结果,完全不用等整个套件跑完。
另外,你提到已经提交了官方Issue,这很棒!如果后续官方支持了“中途终止仍保留已执行结果输出”的原生功能,那肯定会更方便。不过上面的几个方案应该能解你的燃眉之急~
内容的提问来源于stack exchange,提问作者Borek Bernard

