如何在跳过的测试中强制PHPUnit失败?

时间:2018-08-14 14:04:16

标签: selenium phpunit

我正在尝试使用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返回非零结果的选项?还是直接将测试报告为硒错误失败?

2 个答案:

答案 0 :(得分:1)

请考虑在phpunit.xml文件中配置以下参数。

     stopOnError="true"
     stopOnFailure="true"
     stopOnIncomplete="true"
     stopOnSkipped="true"
     stopOnRisky="true"

Reference

如果要使用命令行参数,则等效项为:

  --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.

Reference

如果出于任何原因您想使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