2011-11-24 64 views
6

在我們的項目中,我們正在運行PHPUnit測試,該測試使用SeleniumCurl在不同的開發服務器上打開頁面。服務器B有一臺運行該服務器的Apache服務器。服務器A通過同步(Rsync)項目文件到開發服務器B來啓動測試工作,所以兩個服務器上的項目文件都是相同的。在PHP中收集遠程代碼覆蓋範圍

在PHP中遠程收集代碼覆蓋統計信息有什麼可能?

我們已經使用Xdebug收集代碼覆蓋在該服務器上本地運行的單元測試(PHPUnit的使用項目文件直接,因此start/stop collecting code coverage report

更新:

在服務器B ,該網站由Apache運行的PHP實例呈現。當在服務器A上使用Selenium/Curl PHP實例進行測試時,會使用命令行版本。 Apache的服務器上運行B.該實例不能配置文件中的PHP實例

當運行單元測試(不使用其他服務器,而不是使用硒/捲曲),我們用這樣的命令:

phpunit --coverage-html ./results/codecoverage/ ATestFile.php 

這將通過在PHP Cli中使用Xdebug爲「ATestFile.php」中的測試生成代碼覆蓋率報告。

+0

您可以對目前爲止絆倒的問題有更具體的瞭解嗎?據推測,你也可以在服務器B上啓動XDebug,那麼問題是什麼? –

+0

我的更新回答了您的一些問題嗎?問題是當服務器B是使用代碼庫/專業文件運行PHP實例時,在服務器A上生成代碼覆蓋率報告。 – HNygard

+0

所以問題是你不想在服務器B上運行PHPUnit,因爲所有的測試都是由服務器A完成的。 XDebug仍然會在服務器B上運行,您只需在那裏不使用PHPUnit。我認爲這會讓你暴露於「原始」XDebug,你必須弄清楚PHPUnit如何從那裏收集數據。如果您有興趣,我可以爲您提供一個非XDebug解決方案,可以讓您從B(如果您在意的話可以從系統A收集)收集覆蓋率數據。 –

回答

3

Github上的PHPUnit-Selenium項目爲此提供了一個解決方案,我相信PHPUnit 3.5中內置的舊版本具有相同的功能。您使用PHPUnit_Extension_Selenium_TestCase folder中的文件捕獲服務器B上的代碼覆蓋率信息。您需要設置Apache以預先添加兩個PHP腳本並附加兩個PHP腳本 - 適用於每個請求的名稱分別爲prepend.phpappend.php

說明在PHPUnit documentation section on Selenium。搜索「追加」。

+0

我已經得到它的工作。必須設置正確的包含路徑,並切換到運行Chrome而不是新的Firefox 8,Selenium無法正確設置cookie。 如果我編輯您的答案以納入我的一些經驗,是否是okey? – HNygard

+0

絕對,編輯! :) –

1

OP要求,可以從服務器B.生成報告在完全獨立的PHPUnit(使用與否,您認爲合適的)和/或XDebug的的方式

我們PHP Test Coverage Tool收集測試覆蓋率數據替代(沒有按根本不使用XDebug)。

這意味着您可以通過您認爲有用的任何方法(包括來自服務器A的外部請求)來鍛鍊您的代碼,並獲取代碼覆蓋率數據。

您可以隨時要求獲取有關代碼的快照。測試覆蓋率工具的這個顯示引擎會將該快照轉換爲覆蓋在源代碼上的覆蓋範圍的可見顯示,和/或生成總結報告。