2011-11-24 13 views
6

En nuestro proyecto, estamos ejecutando pruebas PHPUnit que usa Selenium y Curl para abrir páginas en un servidor de desarrollo diferente. El servidor B tiene un servidor Apache ejecutando el servidor del sitio web. El servidor A inicia el trabajo de prueba sincronizando (Rsync) los archivos del proyecto al servidor de desarrollo B, por lo que los archivos del proyecto son idénticos en ambos servidores.Cobertura del código remoto que se recopila en PHP

¿Qué posibilidades hay de recopilar remotamente estadísticas de cobertura de código en PHP?

Ya estamos utilizando Xdebug para recoger la cobertura de código en la unidad de pruebas que se ejecutan localmente en el servidor A (PHPUnit utiliza archivos directamente el proyecto y, por consiguiente start/stop collecting code coverage report)

Actualización:

en el servidor B , el sitio web es renderizado por una instancia de PHP ejecutada por Apache. Al almorzar las pruebas usando Selenium/Curl la instancia de PHP en el servidor A, se usa la versión de línea de comando. Esa instancia no puede perfilar el ejemplo Apache PHP que se ejecuta en el servidor B.

Al ejecutar pruebas unitarias (no usar otro servidor y no el uso de selenio/Curl), se utiliza un comando como este:

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

Esto genera un informe de cobertura de código para la prueba en "ATestFile.php" utilizando Xdebug en PHP Cli.

+0

¿Puede ser más específico sobre los problemas que ha tropezado hasta ahora? Es de suponer que también puede iniciar XDebug en el Servidor B, ¿cuál es el problema? –

+0

¿Respondió mi actualización algunas de sus preguntas? El problema es generar informes de cobertura de código en el servidor A cuando es el servidor B el que ejecuta la instancia de PHP utilizando los archivos de base de código/prosject. – HNygard

+0

Entonces, ¿el punto es que no desea ejecutar PHPUnit en el servidor B, porque el servidor A realmente está haciendo todas las pruebas? XDebug aún se ejecutará en el servidor B, simplemente no debes usar PHPUnit allí. Creo que esto te expone a XDebug "en bruto" y tendrás que descubrir cómo PHPUnit recopila sus datos desde allí.Si está interesado, puedo ofrecerle una solución que no sea XDebug que le permitirá recopilar los datos de cobertura de B (y del sistema A si lo desea). –

Respuesta

3

El proyecto PHPUnit-Selenium en Github tiene una solución para esto, y creo que la versión anterior incorporada en PHPUnit 3.5 tenía la misma función. Hay archivos en el PHPUnit_Extension_Selenium_TestCase folder que utiliza para capturar la información de cobertura del código en el servidor B. Necesita configurar Apache para anteponer y anexar dos scripts PHP - acertadamente llamados prepend.php y append.php - a cada solicitud.

Las instrucciones están en el PHPUnit documentation section on Selenium. Busque "agregar".

+0

Lo tengo funcionando. Tuvo que establecer la ruta de inclusión correcta y también cambiar a la ejecución de Chrome en lugar de Firefox 8, que Selenium no pudo establecer correctamente las cookies. ¿Está bien si edito tu respuesta para incorporar algunas de mis experiencias? – HNygard

+0

¡Absolutamente, edita! :) –

1

OP pidió alternativas que pueden generar informes desde el servidor B.

Nuestros PHP Test Coverage Tool datos de cobertura de pruebas se acumulan en una forma completamente independiente de PHPUnit (use o no, como mejor le parezca) y/o XDebug (doesn no use XDebug en absoluto).

Esto significa que puede ejercitar su código por cualquier método que considere útil (incluidas las solicitudes externas del servidor A) y obtener datos de cobertura de código.

Puede solicitar una instantánea del código cubierto en cualquier momento. Este motor de visualización para la herramienta de cobertura de prueba convertirá esa instantánea en una visualización visible de la cobertura superpuesta en el código fuente, y/o producirá un informe de resumen.

Cuestiones relacionadas