Tengo un único conjunto de pruebas que está marcado como así en mi configuración de PHPUnit. El conjunto de pruebas contiene varias pruebas, y también tiene pruebas de base de datos en vivo intensivas en bases de datos, que tardan mucho en completarse.

En particular, una de las pruebas tarda más de 2 segundos en completarse (ver más abajo).

Quiero separar la ejecución de pruebas rápidas de las lentas, de modo que pueda ejecutar la versión completa lenta pero completa de las pruebas cuando tenga más tiempo, pero en general quiero ejecutar las pruebas rápidas para cada uno de mis necesidades diarias, omitiendo así las pruebas lentas al ejecutar el traje de prueba.

¿Cómo puedo hacer esto?

Para el registro, mi configuración phpunit.xml es así:

<phpunit bootstrap="bootstrap.php">
    <testsuite name="Crating">
        <directory>../module/Crating/test/</directory>
    </testsuite>
</phpunit>

El comando que utilizo para ejecutar mi conjunto de pruebas es así:

phpunit -c phpunit.xml --testsuite CratingCalc

Uno de los archivos en mi directorio ../module/Crating/test/ es CrateRepositoryTest.php. Se ve así:

class CrateRepositoryTest extends TestCase
{

    function testCombine()
    {
        //mocked up hardcoded data
        $fake = new FakeCratingDataModel();

        //connection to real live database
        $real = new CratingDataModel();    

        /* 
         * Tests that verify mocked up data to match live data
         * Purpose to have them is to alert me when live database data or schema change
         */
        $this->assertEquals($fake->getContentsBySalesOrderNumber(7777), $real->getContentsBySalesOrderNumber(7777));
        $this->assertEquals($fake->getContentsByShopJobNumber(17167), $real->getContentsByShopJobNumber(17167));
        $this->assertEquals($fake->getNearCrating(20, 20, 20), $real->getNearCrating(20, 20, 20));
        $this->assertEquals($fake->getContentsByInquiryNumber(640, 2), $real->getContentsByInquiryNumber(25640, 2));
    }
}
2
Dennis 24 sep. 2019 a las 23:58

1 respuesta

La mejor respuesta

Grupos.

Normalmente, puede agregar anotaciones @group small o yo tengo @group ci (solo para cosas que ejecutaré en un entorno de CI completo).

Tener pruebas pequeñas, medianas o grandes es de hecho tan común, hay anotaciones de grupo dedicadas - @small, @medium & @large, y también hay configuraciones para el archivo phpunit.xml que también pueden dar un límite de tiempo para cada una (y matarán y fallarles, si tardan demasiado):

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  ....
  timeoutForLargeTests="5"
  timeoutForMediumTests="2"
  timeoutForSmallTests="1"
  .... >

Tengo dos formas de ejecutar mis pruebas: la versión completa que no excluye ningún grupo (ejecutar más de 1250 pruebas toma alrededor de 50 segundos , sin cobertura) y las pruebas más rápidas que agrega --exclude-group ci,large,webtest al comando phpunit, que puede ejecutar 630 de las pruebas en menos de 4 segundos .

2
Alister Bulman 24 sep. 2019 a las 21:16