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 superadas
– prueba omitidaF
– prueba fallida
La salida puede tener el siguiente aspecto:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.5.2
Note: No php.ini is used.
PHP 8.3.2 (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.5.2 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. -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|console-lines|tap|junit|log|none> (por ejemplo, -o junit:output.xml) Especifica uno o más formatos de salida con un nombre de archivo opcional. -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 <path> Ruta al directorio temporal. Por defecto por 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. Véase la sección php.ini propia.
-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|console-lines|tap|junit|log|none>
Formato de salida. Por defecto es el formato de consola. Puede especificar el nombre del archivo en el que se escribirá la
salida (por ejemplo, -o junit:output.xml
). La opción -o
puede repetirse varias veces para generar
varios formatos a la vez.
console
: igual que por defecto, pero en este caso no se imprime el logotipo ASCIIconsole-lines
: similar a la consola, pero el resultado de cada prueba aparece en una línea separada con más informacióntap
: formato TAP apropiado para el procesamiento en máquinajunit
: formato JUnit XML, apropiado también para el procesamiento en máquinalog
: Muestra el progreso de las pruebas. Todas las pruebas fallidas, omitidas y también las exitosasnone
: 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 Xdebug o PCOV 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
- PCOV
- PHPDBG
- 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.