5

En nuestro proyecto, tenemos un montón de pruebas unitarias. Ayudan a mantener el proyecto bastante probado.¿Cómo ejecutar pruebas de integración?

Además de ellos, tenemos un conjunto de pruebas que son pruebas unitarias pero dependen de algún tipo de recurso externo. Los llamamos pruebas externas. Por ejemplo, a veces pueden acceder a servicios web.

Si bien las pruebas unitarias son fáciles de ejecutar, las pruebas de integración no pueden pasar a veces: por ejemplo, debido a un error de tiempo de espera. Además, estas pruebas pueden tomar demasiado tiempo para ejecutarse.

Actualmente, mantenemos las pruebas de integración/unidad externa solo para ejecutarlas cuando desarrollamos la funcionalidad correspondiente.

Para las pruebas de unidad simple, utilizamos TeamCity para una integración continua.

¿Cómo se ejecutan las pruebas de la unidad de integración y cuándo se ejecutan?

+0

Como probablemente de esta discusión busco cómo categorizar las pruebas de integración. Y ahora lo que puedo agregar por mi cuenta: 1. Prueba que comprueba que nuestro software se comunica como se espera con el software remoto (se pueden usar maquetas de ws remotas según lo observado por S. Lott). 2. Prueba que comprueba que el servicio remoto funcione como esperamos nosotros. – Vladimir

Respuesta

2

En nuestro proyecto tenemos una suite separada para las pruebas de unidades regulares/simples y una suite separada para las pruebas de integración. Existen dos razones para ello:

  1. rendimiento: pruebas de integración son mucho más lento, fragilidad
  2. prueba: las pruebas de integración fallan más a menudo debido a las condiciones relacionadas con el medio ambiente (dar falsos positivos).

Utilizamos TeamCity como nuestro servidor principal de integración continua y Maven como sistema de compilación. Utilizamos el siguiente algoritmo para ejecutar las pruebas:

  1. Ejecutamos pruebas de unidad dentro de Eclipse IDE y antes de cada confirmación.
  2. corremos pruebas de unidad automáticamente después de cada confirmación en agentes TeamCity usando mvn clean install
  3. de Maven Llevamos a cabo pruebas de integración automáticamente en agente TeamCity después de que se ha completado "principal" de generación.

La forma en que activar la ejecución pruebas de integración es mediante la configuración de la tarea de integration.tests TeamCity ser dependientes de la tarea "principal" continous.build, vea aquí para más detalles: http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

Corremos sólo las pruebas de integración (excluyendo pruebas unitarias) por:

  • usando directorio separado llamado "src/it/java" para mantener la integración pruebas,
  • excluidos por defecto esta fuente folde r de la configuración de maven-surefire-plugin (elemento de configuración/exclusión),
  • utilizando el perfil de Maven llamado "integración" para excluir las pruebas de unidades regulares e incluir pruebas de "src/it/java" (este perfil se configura pasando -Precisión en la tarea integration.tests).
+0

Esta es la opción más cercana para mí, excepto que reemplazaríamos algunas pruebas de integración a pruebas unitarias con maquetas. – Vladimir

1

Ejecutamos todas las pruebas en una gran suite. Tarda 7 minutos en correr.

Nuestras pruebas de integración crean servidores simulados. Nunca pasan el tiempo de espera, excepto cuando la prueba requiere que el servidor agote el tiempo de espera.

Tenemos los siguientes tipos de cosas. (El ejemplo de código es Python)

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     testclient.StartVendorMockServer(18000) # port number 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 
    def tearDown(self): 
     testClient.KillVendorMockServer(18000) 

Esto tiene algunas limitaciones - que siempre se bifurcan el servidor simulacro de cliente para cada prueba. Algunas veces está bien, y a veces eso es demasiado comenzar y parar.

También tenemos los siguientes tipos de cosas

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 

if __name__ == "__main__": 
    testclient.StartVendorMockServer(18000) # port number 
    result= unittest.TextTestRunner().run() 
    testclient.KillVendorMockServer(18000) 
    system.exit(result.failures + result.errors) 

Para apoyar esta prueba, tenemos un número de servidores se burlaban de seguimiento para varios tipos de pruebas de integración.

+0

¿Necesita desarrolladores para ejecutar las pruebas antes de un check-in? –

+0

Ese es un buen enfoque para los servicios remotos de simulación. Creo que no hacemos eso porque a veces es difícil hacer una maqueta, o puede llevar algo de tiempo. También a veces ni siquiera sé cómo funciona el control remoto ws. La tercera cosa es que a veces es útil probar que el servicio remoto funciona bien como se esperaba. Tuvimos casos en los que el principal proveedor de servicios tenía problemas que podrían ser encontrados por algunas pruebas externas. – Vladimir

+0

@Vladimir: "a veces ni siquiera sé cómo funciona el control remoto ws". Falso. Usted sabe lo que su aplicación envía y recibe. Eso es todo lo que tienes que manejar en la Maqueta. Nada más, solo lo suficiente para hacer pasar la prueba. –

3

Estamos utilizando Maven2: maven-surefire-plugin para ejecutar pruebas unitarias (en la fase de prueba) y maven-failsafe-plugin para pruebas de integración (fase de prueba de integración).

De forma predeterminada, todas las pruebas se ejecutan cuando se crea el proyecto, sin embargo, las pruebas de integración se pueden desactivar utilizando perfiles.

En muchos casos, las pruebas de integración son parte del módulo, en algunos casos también hay módulos dedicados que solo realizan pruebas de integración.

Uno de los equipos también usa Fitnesse para las pruebas de aceptación. Estas pruebas también están en módulos dedicados.

Estamos utilizando Hudson para CI.

+0

Gracias por mencionar a Fitnesse. He oído hablar de él antes. Y ahora acabo de ver la presentación, es de Robert Martin. Se ve bien. ¡Trataré de pensar cómo podemos integrarlo para nuestros propósitos! ¿Tienes muchas pruebas de aceptación en Fitnesse? – Vladimir

+0

Mi equipo - no, el otro equipo realmente ha hecho muchas cosas como pruebas de aceptación. – lexicore

Cuestiones relacionadas