PHPUnit 打印测试执行时间

2022-08-30 15:08:30

有没有办法用PHPUnit打印每个测试的执行时间?


答案 1

要添加更多方法:


可以编写自定义测试侦听器将其添加到 XML 文件中。在该侦听器中,您可以访问 .phpunit中的一些行.xml和10行PHP类。没有太多的麻烦。$testResult->time()

class SimpleTestListener implements PHPUnit_Framework_TestListener
{
    public function endTest(PHPUnit_Framework_Test $test, $time)
    {
        printf("Test '%s' ended and took %s seconds.\n", 
           $test->getName(),
           $test->time()
        );
    }
}

如果您生成一个 junit.xml无论如何(对于 CI 或创建代码覆盖率时),所有数字都在那里,并且使用简单的 XSLT,您可以使它们更具可读性。

示例朱尼特.xml

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="DemoTest" file="/home/edo/foo.php" tests="2" assertions="2" failures="1" errors="0" time="0.007727">
    <testcase name="testPass" class="DemoTest" file="/home/edo/foo.php" line="4" assertions="1" time="0.003801"/>
    <testcase name="testFail" class="DemoTest" file="/home/edo/foo.php" line="8" assertions="1" time="0.003926">
      <failure type="PHPUnit_Framework_ExpectationFailedException">DemoTest::testFail
Failed asserting that &lt;boolean:false&gt; is true.

/home/edo/foo.php:9
</failure>
    </testcase>
  </testsuite>
</testsuites>

并像这样转换:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h1>Tests</h1>
    <xsl:for-each select="testsuites/testsuite">
      <h2><xsl:value-of select="@name"/></h2>
      <ul>
        <xsl:for-each select="testcase">
          <li>
            <xsl:value-of select="@name"/> : <xsl:value-of select="@time"/>
            <xsl:if test="failure">
              <b>Failed !</b>
              <i><xsl:value-of select="*"/></i>
            </xsl:if>
          </li>
        </xsl:for-each>
      </ul>
    </xsl:for-each>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

你会得到一行显示:(HTML只是一个例子,它应该很容易适应)。<li>testPass : 0.003801</li>

在这里引用我自己的博客文章:https://edorian.github.io/2011-01-19-creating-your-custom-phpunit-output.formats/ xslt的东西。


答案 2

只需添加 --log-junit“my_tests_log.xml”,然后使用电子表格应用程序(Excel,Numbers,Calc)打开此文件即可查看它。您可以获得所需的所有信息,并且可以按测试执行时间进行排序。


推荐