Ejecución de pruebas

La parte más visible de Nette Tester es el ejecutor de pruebas de línea de comandos. Es extremadamente rápido y robusto porque inicia automáticamente todas las pruebas como procesos separados en paralelo en múltiples hilos. También puede ejecutarse a sí mismo en el llamado modo de vigilancia.

El ejecutor de pruebas de Nette Tester se invoca desde la línea de comandos. Como parámetro, pasaremos el directorio de pruebas. Para el directorio actual basta con introducir un punto:

vendor/bin/tester .

Al invocarlo, el ejecutor de pruebas explorará el directorio especificado y todos los subdirectorios y buscará las pruebas, que son los archivos *.phpt y *Test.php. También lee y evalúa sus anotaciones para saber cuáles y cómo ejecutarlas.

A continuación, ejecuta las pruebas. Por cada prueba realizada, el ejecutor imprime un carácter para indicar el progreso:

  • . – prueba superada
  • s – prueba omitida
  • F – prueba fallida

La salida puede tener el siguiente aspecto:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.3.3

Note: No php.ini is used.
PHP 7.4.8 (cli) | php -n | 8 threads

........s..........................

OK (35 tests, 1 skipped, 1.7 seconds)

Cuando vuelva a ejecutarlo, primero ejecutará las pruebas que fallaron durante la ejecución anterior, de modo que sabrá inmediatamente si ha solucionado el error.

El código de salida del comprobador es cero si no falla ninguna. No cero en caso contrario.

El Probador ejecuta procesos PHP sin php.ini. Más detalles en la sección Propio php.ini.

Opciones de Línea de Comandos

Obtenemos una visión general de las opciones de la línea de comandos ejecutando el Comprobador sin parámetros o con la opción -h:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.3.3

Uso:
    tester [opciones] [<archivo de prueba> | <directorio>]...

Opciones:
    -p <ruta>                    Especificar intérprete PHP a ejecutar (por defecto: php).
    -c <ruta>                    Buscar el archivo php.ini (o buscar en el directorio) <ruta>.
    -C                           Usar php.ini para todo el sistema.
    -l | --log <ruta>            Escribe el registro en el archivo <ruta>.
    -d <clave=valor>...          Definir entrada INI <clave> con valor <valor>.
    -s                           Mostrar información sobre las pruebas omitidas.
    --stop-on-fail               Detener la ejecución al primer fallo.
    -j <num>                     Ejecutar <num> trabajos en paralelo (por defecto: 8).
    -o <console|tap|junit|none>  Especifica el formato de salida.
    -w | --watch <ruta>          Directorio de vigilancia.
    -i | --info                  Mostrar información del entorno de pruebas y salir.
    --setup <ruta>               Script para la configuración del runner.
    --temp <ruta>                Ruta al directorio temporal. Por defecto: sys_get_temp_dir().
    --colors [1|0]               Activa o desactiva los colores.
    --coverage <ruta>            Generar informe de cobertura de código a archivo.
    --coverage-src <ruta>        Ruta al código fuente.
    -h | --help                  Esta ayuda.

-p <path>

Especifica el binario PHP que se utilizará para ejecutar las pruebas. Por defecto es php.

tester -p /home/user/php-7.2.0-beta/php-cgi tests

-c <path>

Especifica qué php.ini se utilizará al ejecutar las pruebas. Por defecto, no se utiliza php.ini. Consulte php.ini propio para obtener más información.

-C

Se utiliza php.ini para todo el sistema. Así que en la plataforma UNIX, todos los archivos /etc/php/{sapi}/conf.d/*.ini también. Vea la sección php.ini propia.

-l | --log <path>

El progreso de las pruebas se escribe en el archivo. Todas las pruebas fallidas, omitidas y también las exitosas:

tester --log /var/log/tests.log tests

-d <key=value>

Establece el valor de la directiva de configuración PHP para las pruebas. El parámetro se puede utilizar varias veces.

tester -d max_execution_time=20

-s

Se mostrará información sobre las pruebas omitidas.

--stop-on-fail

El probador detiene la prueba al fallar la primera prueba.

-j <num>

Las pruebas se ejecutan en <num> precesos en paralelo. El valor por defecto es 8. Si deseamos ejecutar las pruebas en serie, utilizaremos el valor 1.

-o <console|tap|junit|none>

Formato de salida. Por defecto es el formato de consola.

  • console: igual que por defecto, pero en este caso no se imprime el logotipo ASCII
  • tap: formato TAP apropiado para el procesamiento en máquina
  • junit: formato JUnit XML, apropiado también para el procesamiento en máquina
  • none: no se imprime nada

-w | --watch <path>

El Probador no termina después de que las pruebas son completadas sino que continúa corriendo y observando los archivos PHP en el directorio dado. Cuando se cambia, ejecuta las pruebas de nuevo. El parámetro puede ser usado múltiples veces si queremos monitorear múltiples directorios.

Es útil durante la refactorización de una librería o la depuración de pruebas.

tester --watch src tests

-i | --info

Muestra información sobre el entorno de ejecución de una prueba. Por ejemplo:

tester -p /usr/bin/php7.1 -c tests/php.ini --info

PHP binary:
/usr/bin/php7.1

PHP version:
7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli)

Code coverage engines:
(not available)

Loaded php.ini files:
/var/www/dev/demo/tests/php.ini

PHP temporary directory:
/tmp

Loaded extensions:
Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...

--setup <path>

El Probador carga el script PHP dado al inicio. La variable Tester\Runner\Runner $runner está disponible en él. Supongamos que el archivo tests/runner-setup.php:

$runner->outputHandlers[] = new MyOutputHandler;

y ejecutamos el Probador:

tester --setup tests/runner-setup.php tests

--temp <path>

Establece una ruta al directorio para los archivos temporales de Tester. El valor por defecto es devuelto por sys_get_temp_dir(). Cuando el valor por defecto no es válido, se le avisará.

Si no estamos seguros del directorio utilizado, podemos ejecutar Tester con el parámetro --info.

--colors 1|0

El Tester detecta un terminal coloreable por defecto y colorea su salida. Esta opción está por encima de la autodetección. Podemos establecer la coloración globalmente mediante una variable de entorno del sistema NETTE_TESTER_COLORS.

--cobertura <path>

Tester generará un informe con una visión general de la cobertura del código fuente por las pruebas. Esta opción requiere la extensión PHP XdebugPCOV habilitada, o PHP 7 con el PHPDBG SAPI, que es más rápido. La extensión del archivo de destino determina el formato del contenido. HTML o Clover XML.

tester tests --coverage coverage.html  # HTML report
tester tests --coverage coverage.xml   # Clover XML report

La prioridad para elegir el mecanismo de recogida es la siguiente

  1. PCOV
  2. PHPDBG
  3. Xdebug

Las pruebas extensas pueden fallar durante su ejecución por PHPDBG debido al agotamiento de la memoria. La recogida de datos de cobertura es una operación que consume memoria. En ese caso, llamar a Tester\CodeCoverage\Collector::flush() dentro de una prueba puede ayudar. Esto vaciará los datos recolectados en un archivo y liberará memoria. Cuando la recopilación de datos no está en curso, o se utiliza Xdebug, la llamada no tiene ningún efecto.

Un ejemplo de informe HTML con cobertura de código.

--cobertura-src <path>

Lo utilizamos con la opción --coverage simultáneamente. El <path> es una ruta al código fuente para el que generamos el informe. Se puede utilizar repetidamente.

Propio php.ini

El Probador ejecuta procesos PHP con la opción -n, lo que significa que no se carga php.ini (ni siquiera el de /etc/php/conf.d/*.ini en UNIX). Esto asegura el mismo entorno para las pruebas ejecutadas, pero también desactiva todas las extensiones externas de PHP comúnmente cargadas por el sistema PHP.

Si desea mantener la configuración del sistema, utilice el parámetro -C.

Si necesita algunas extensiones o algunas configuraciones INI especiales, le recomendamos crear su propio archivo php.ini y distribuirlo entre las pruebas. Luego ejecutamos Tester con la opción -c, por ejemplo tester -c tests/php.ini. El archivo INI puede tener el siguiente aspecto

[PHP]

extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll

memory_limit=512M

Ejecutar el Tester con un sistema php.ini en UNIX, por ejemplo tester -c /etc/php/cgi/php.ini, no carga otros INI de /etc/php/conf.d/*.ini. Ese es el comportamiento de PHP, no del Tester.