Cómo utilizar el generador de perfiles en una prueba funcional

Es altamente recomendable que una prueba funcional sólo pruebe la respuesta. Pero si escribes pruebas funcionales que controlan los servidores en producción, posiblemente desees escribir pruebas en los datos del generador de perfiles, ya que te da una gran manera de ver diferentes cosas y hacer cumplir algunas métricas.

El Generador de perfiles de Symfony2 reúne una gran cantidad de datos por cada petición. Utiliza estos datos para comprobar el número de llamadas a la base de datos, el tiempo invertido en la plataforma, ... Pero antes de escribir aserciones, habilita el perfilador y verifica que esté habilitado (de manera predeterminada está activado en el entorno test):

class HelloControllerTest extends WebTestCase
{
    public function testIndex()
    {
        $client = static::createClient();

        // Habilita el perfilador para la próxima petición
        // (no hace nada si el perfilador no está disponible)
        $cliente->enableProfiler();

        $crawler = $client->request('GET', '/hello/Fabien');

        // ... Escribe algunas aserciones sobre Response

        // verifica que el generador de perfiles esté habilitado
        if ($profile = $client->getProfile()) {
            // verifica la cantidad de peticiones
            $this->assertLessThan(
                10,
                $profile->getCollector('db')->getQueryCount()
            );

            // comprueba el tiempo consumido en la plataforma
            $this->assertLessThan(
                500,
                $profile->getCollector('time')->getTotalTime()
            );
        }
    }
}

Si una prueba falla debido a los datos del generador de perfiles (demasiadas consultas a la BD, por ejemplo), posiblemente desees utilizar el Generador de perfiles Web para analizar la petición después de terminar las pruebas. Es fácil conseguirlo si incorporas el símbolo en el mensaje de error:

$this->assertLessThan(
    30,
    $profile->get('db')->getQueryCount(),
    sprintf('Checks that query count is less than 30 (token %s)', $profile->getToken())
);

Prudencia

El almacén del generador de perfiles puede ser diferente en función del entorno (sobre todo si utilizas el almacén de datos SQLite, el cual es el valor configurado por omisión).

Nota

La información del generador de perfiles está disponible incluso si aíslas al cliente o si utilizas una capa HTTP para tus pruebas.

Truco

Lee la API para incorporar colectores de datos para aprender más acerca de sus interfaces.

Bifúrcame en GitHub