是否PHPUnit_Selenium代码覆盖工作?(Does PHPUnit_Selenium Co

2019-06-25 22:22发布

在PHPUnit的文档 ,它说,它可能得到的代码覆盖率数据:

PHPUnit_Extensions_SeleniumTestCase的可以收集代码覆盖率信息的测试运行通过硒:

  1. PHPUnit的复制/扩展/ SeleniumTestCase / phpunit_coverage.php到你的网站服务器文档根目录。

  2. 在你的web服务器的php.ini配置文件,配置的PHPUnit /扩展/ SeleniumTestCase / prepend.php和PHPUnit的/扩展/ SeleniumTestCase / append.php分别中的auto_prepend_file和auto_append_file所。

  3. 在扩展了PHPUnit_Extensions_SeleniumTestCase你的测试用例类,使用受保护$ coverageScriptUrl =“HTTP://host/phpunit_coverage.php”; 以配置phpunit_coverage.php脚本的URL。

我一直没能得到这个输出的任何覆盖信息。 我能够获得通过正常的单元测试代码覆盖率信息。

对于我的应用程序运行在http://localhost/ts2_templates/我已经复制phpunit_coverage.phphttp://localhost/phpunit_coverage.php

我已经添加了以下为php.ini:

auto_prepend_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/prepend.php"
auto_append_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/append.php"

...并验证他们被称为用die("yep it's me");

最后,我添加了以下到我的测试案例:

<?php

class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
    # added line below
    protected $coverageScriptUrl = 'http://localhost/phpunit_coverage.php';

    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost/ts2_templates');
    }

    public function testTitle()
    {
        $this->url('http://localhost/ts2_templates');
        $this->assertContains('test', $this->title());
    }
}

?>

下面是运行的代码覆盖率,由PHPStorm生成的测试命令:

/Applications/MAMP/bin/php5.3/bin/php -dxdebug.coverage_enable=1 /private/var/folders/pp/0t4y41f95j5313qm_f8b42fw0000gn/T/ide-phpunit.php --coverage-clover /path/to/coverage/ts2_templates$WebTest.coverage --no-configuration WebTest /Users/Ian/php/ts2_templates/tests/WebTest.php

继承人的覆盖XML文件的输出:

<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1341015508">
    <project timestamp="1341015508">
        <metrics files="0" loc="0" ncloc="0" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
    </project>
</coverage>

测试本身通过。

我已经验证有没有退出或代码的任何地方死语句。

有任何想法吗?

Answer 1:

它肯定是工作。 我在symfony中建立Selenium测试根据文档测量范围。

我最大的问题是,将覆盖数据有错误路径文件在里面,因此不能对准覆盖数据来源。 这是因为我执行的测试,从不同的地方,因为服务器保留在文件中。因此,我调整了append.php的路径改写到我的源文件的地方。



Answer 2:

我也有一些问题,把事情的工作。 下面在谊论坛发帖塞缪尔·戈尔茨坦帮了我:

我结束了移动prepend.php和append.php到我的项目的文档根目录。

我还发现,该临时文件的位置做了一个差异-我本来试图将它们保存到/tmp/和PHP正默默地失败。 当我改变$GLOBALS['PHPUNIT_COVERAGE_DATA_DIRECTORY']myroot/protected/runtime/tmp ,并在该目录没有在chmod 777,它开始工作。

可能阻挠你一点一件事是通过Ajax运行的代码不会被标记为被覆盖。

这似乎是一个已知的问题与硒。 谷歌“的github sebastianbergmann PHPUnit的硒问题”,并追查封闭的问题#22获取更多信息。



文章来源: Does PHPUnit_Selenium Code Coverage Work?