PHP远程代码覆盖率收集

6
在我们的项目中,我们运行 PHPUnit 测试,使用 SeleniumCurl 在不同的开发服务器上打开页面。服务器 B 上运行一个 Apache 服务器来提供网站服务。服务器 A 通过同步(Rsync)项目文件到开发服务器 B 来启动测试作业,因此两个服务器上的项目文件是相同的。 有哪些远程收集 PHP 代码覆盖率统计信息的可能性? 我们已经在本地服务器 A 上使用 Xdebug 收集单元测试的代码覆盖率(PHPunit 直接使用项目文件,因此可以 开始/停止收集代码覆盖率报告)。 更新: 在B服务器上,网站由Apache运行的PHP实例呈现。使用Selenium/Curl在A服务器上启动测试时,将使用命令行版本的PHP实例。该实例无法对B服务器上Apache运行的PHP实例进行分析。
在运行单元测试时(不使用其他服务器且不使用Selenium/Curl),我们使用如下命令:
phpunit --coverage-html ./results/codecoverage/ ATestFile.php

使用PHP Cli中的Xdebug为“ATestFile.php”中的测试生成代码覆盖率报告。

你能更具体地说明你到目前为止遇到的问题吗?假设你也可以在B服务器上启动XDebug,那么问题是什么? - Ira Baxter
我的更新回答了你的一些问题吗?问题是在服务器B运行PHP实例并使用代码库/项目文件时,在服务器A上生成代码覆盖率报告。 - HNygard
所以问题是你不想在服务器B上运行PHPUnit,因为所有的测试都是由服务器A完成的?XDebug仍然会在服务器B上运行,你只需要不在那里使用PHPUnit。我认为这会让你接触到“原始”的XDebug,并且你将不得不弄清楚PHPUnit如何从那里收集数据。如果你有兴趣,我可以提供一个非XDebug解决方案,让你从B(和系统A,如果你关心的话)收集覆盖率数据。 - Ira Baxter
服务器A正在运行测试,服务器B应该能够保存由服务器A触发的页面渲染的数据。我对非Xdebug解决方案也很感兴趣,只要我能从在服务器B上呈现的页面中获得一些漂亮的报告。 - HNygard
2个回答

3
在Github上的PHPUnit-Selenium项目中有一个解决方案,我相信内置在PHPUnit 3.5中的旧版本也有同样的东西。在PHPUnit_Extension_Selenium_TestCase文件夹中有一些文件,您可以使用这些文件来捕获服务器B上的代码覆盖率信息。您需要设置Apache来添加两个PHP脚本--名为prepend.phpappend.php--到每个请求的前面和后面。
关于Selenium的PHPUnit文档部分中有详细的说明。搜索“append”。

我已经解决了。必须设置正确的包含路径,并切换到运行Chrome而不是新的Firefox 8,因为Selenium无法正确设置cookies。如果我编辑您的答案以纳入我的一些经验,可以吗? - HNygard

1

OP要求提供可以从B服务器生成报告的替代方案。

我们的PHP测试覆盖工具以完全独立于PHPUnit(根据需要使用或不使用)和/或XDebug(根本不使用XDebug)的方式收集测试覆盖数据。

这意味着您可以通过任何您认为有用的方法(包括来自A服务器的外部请求)来运行您的代码,并获得代码覆盖数据。

您可以随时要求覆盖代码的快照。测试覆盖工具的显示引擎将把该快照转换为可见的覆盖源代码的显示,或生成摘要报告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接