我正在尝试使用PHPUnit和Selenium与无头firefox进行自动测试。当Travis CI尝试运行我的测试时,Selenium服务器无法启动,但是我的测试被认为是可以的,因为PHPUnit将其标记为已跳过:
The Selenium Server is not active on host localhost at port 4444.
OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 0, Skipped: 1.
The command "make test" exited with 0.
我认为,即使由于内部错误而无法启动测试,也应将其视为失败。这真是愚蠢的,因为我的测试可能会以这种方式失败,并且如果没有阅读完整的报告,我可以相信一切都在运行中,因为Travis CI认为返回值0是成功的测试。
是否存在使跳过的测试时PHPUnit返回非零结果的选项?还是直接将测试报告为硒错误失败?
答案 0 :(得分:1)
请考虑在phpunit.xml
文件中配置以下参数。
stopOnError="true"
stopOnFailure="true"
stopOnIncomplete="true"
stopOnSkipped="true"
stopOnRisky="true"
如果要使用命令行参数,则等效项为:
--stop-on-error Stop execution upon first error.
--stop-on-failure Stop execution upon first error or failure.
--stop-on-warning Stop execution upon first warning.
--stop-on-risky Stop execution upon first risky test.
--stop-on-skipped Stop execution upon first skipped test.
--stop-on-incomplete Stop execution upon first incomplete test.
对于您的情况,您想停止跳过。
侧边,要使测试失败,必须存在失败的断言。由于跳过的测试并未真正执行,因此您不能将其视为失败,因此应依靠执行摘要,并确保没有发生风险或跳过的测试。
如果您希望将危险和警告的测试视为失败测试,则可以使用以下参数:
--fail-on-warning Treat tests with warnings as failures.
--fail-on-risky Treat risky tests as failures.
如果出于任何原因您想使PHPUnit返回0以外的退出代码(成功),请考虑查看How to make PHPunit return nonzero exit status on warnings
答案 1 :(得分:-1)
经过所有研究,我必须得出结论,即使跳过了测试,并且不能强迫使用 PHP (至少从7.3版开始),PHPUnit仍会返回 0 。任何可用的配置选项。
这意味着当您的测试套件中的测试由于某种原因甚至无法启动时, PHPUnit 仍然会由于整个测试会话而返回 0 。 Travis CI 将其视为“成功”。在构建历史记录中它将显示为绿色,找出发生了什么的唯一方法是打开日志并通读。这样,除非您在部署之前先阅读了整个构建日志并调查可能的问题,否则您可能会很容易最终导致带有错误的代码部署。
如果有人证明我错了,我将删除此答案。或当PHPUnit作者解决此问题时。
此刻,我搬到了 jUnit 。