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.