在Apache环境下使用PHPUnit时如何捕获控制台输出?
在Apache环境下使用PHPUnit时如何捕获控制台输出?
我太懂你这种困境了!在Apache环境里通过网页触发PHPUnit测试,没法直接看到控制台输出确实闹心,尤其是你还在折腾需要OAuth授权的API测试,总得确认测试到底跑没跑对、过没过对吧?给你几个亲测好用的办法:
让PHPUnit直接输出到文件
你可以在调用PHPUnit的时候,指定把测试结果写入到文本或者XML文件里。如果是在PHP代码里调用的,就给命令加上输出参数就行:// 示例:调用PHPUnit并将结果写入文本文件 $phpunitCmd = 'php path/to/phpunit.phar --log-text test_results.txt path/to/your/testsuite'; exec($phpunitCmd);这样执行完测试,
test_results.txt里就会有完整的测试报告,包括通过的用例、失败的原因这些细节。要是喜欢结构化的XML格式,就把--log-text换成--log-junit就行。用PHP输出缓冲捕获所有输出
要是不想改PHPUnit的调用参数,也可以用PHP的输出缓冲功能,把测试过程中所有的输出都抓下来,再存到文件或者显示在页面上:// 开启输出缓冲 ob_start(); // 这里执行你调用测试套件的代码 require 'path/to/your/testsuite.php'; // 获取缓冲里的内容并关闭缓冲 $testOutput = ob_get_clean(); // 把结果写入文件 file_put_contents('test_output.txt', $testOutput); // 要是临时调试,也可以直接在浏览器里输出 // echo nl2br($testOutput);注意哦,如果PHPUnit有错误信息输出到STDERR,单纯的输出缓冲可能抓不到,这时候可以用
proc_open函数来同时捕获标准输出和错误输出,这个方法更全面,适合排查问题的时候用。修改PHPUnit配置文件自动生成日志
你还可以在phpunit.xml配置文件里添加日志配置,这样不管你怎么触发测试,结果都会自动写入指定文件:<phpunit> <!-- 其他配置项 --> <logging> <!-- 生成文本格式的测试报告 --> <log type="text" target="logs/test_results.txt"/> <!-- 生成XML格式的报告,方便后续解析 --> <log type="junit" target="logs/test_results.xml"/> </logging> </phpunit>这个方法一劳永逸,不用每次调用都加参数,适合长期维护的测试项目。
另外提一句,你测试的是带OAuth授权的流程,要是测试用例里需要模拟用户授权,记得提前处理好授权凭证的持久化,别让测试卡在授权步骤上,影响结果捕获哦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

