2012-09-27 20 views
7

Tengo un conjunto de pruebas de unidad mocha.Pruebas unitarias que a veces fallan, a veces pasan

Cuando los ejecuto localmente, todo funciona bien. Cuando los ejecuto en nuestro servidor de Jenkins CI, a veces fallan, a veces pasan.

No soy capaz de reproducir por qué fallan. ¿Qué podría causar este comportamiento?

+0

archivos esperados siendo bloqueadas temporalmente? ¿Se encuentra con problemas con pruebas de múltiples hilos en un CI de alta potencia que no ocurre en las máquinas de desarrollo? problemas temporales de red que bloquean las cosas? hay muchas cosas que pueden causar fallas en la prueba de unidades difíciles de seguir ... todo es parte de la resolución de problemas. ¿Son las mismas pruebas las que prueban ser problemáticas? – TZHX

Respuesta

1

Me gustaría decir que estás reutilizando los accesorios de prueba para múltiples pruebas. En algunos casos, el orden de las pruebas cambia desde el orden en su máquina local y no tiene un accesorio correcto cuando comienza una prueba. Para solucionarlo, debe darle a cada prueba un accesorio limpio.

Otra causa puede ser que reutilice una base de datos desde varias ubicaciones cuando se ejecutan las pruebas (dos servidores de compilación con la misma configuración de prueba). Proporcione a cada servidor de compilación su propia base de datos. O sub/burla de su capa de base de datos. Su prueba no debe depender de recursos externos, excepto cuando esté probando las conexiones a sus recursos externos.

+0

Tristemente, No. Se borra toda la base de datos, se ejecuta cada prueba. Estoy usando mocha para ejecutar las pruebas, por lo que se ejecutan en serie. La base de datos se instala localmente en esa máquina, por lo que no debería hacer que otros servicios la utilicen también. –

2

Las pruebas pueden fallar intermitentemente por una serie de razones e identificar por qué fallan es a menudo revelador acerca de la base de código y el entorno.

Estas son algunas de las causas posibles:

• Los objetos compartidos - únicos que sostienen estado puede causar problemas entre las pruebas si el entorno de prueba no se restablece a un estado conocido. si si su corredor de prueba ejecuta pruebas en un orden no determinista es posible que vea errores aleatorios que realmente están exponiendo dañados cuestiones estatales

• dependencias ambientales y externos - cualquier objeto externo que puede contener el estado puede provocar resultados impredecibles

• Temporización: algunas veces las pruebas se escriben con tiempos de espera o tiempos de subproceso que son demasiado específicos. Si el servidor de compilación está operando bajo una carga pesada estos tiempos de espera pueden no ser lo suficientemente

Como orientación general de largo, las pruebas deben ser:

  • aislados: Las pruebas se centran en una unidad a la vez
  • repetible: produce los mismos resultados cada vez
  • independiente: el orden en que se ejecutan las pruebas no debe importar
Cuestiones relacionadas