2011-06-09 4 views
8

Dentro de mi IDE (Eclipse o NetBeans, no importa), tengo algunas pruebas TestNG (pero mi pregunta también se refiere a pruebas JUnit remotas), que son pruebas de integración . Estas pruebas necesitan un servidor de integración para ejecutarse, no se pueden ejecutar en una máquina local. Necesitan el entorno completo del servidor de integración, no solo el material relacionado con el contenedor JavaEE (=> no Arquillian ni JEEUnit).Ejecute TestNG/JUnit Pruebas de integración en servidor remoto desde IDE

Ahora quiero poder ejecutar estas pruebas desde mi IDE (Eclipse), preferiblemente con el complemento TestNG, pero cuando las ejecuto deberían ejecutarse en el servidor de integración remota.

¿Es posible iniciar pruebas de integración en un servidor remoto desde mi IDE? Me gusta la idea de tener algún tipo de agente en el servidor remoto que espera las solicitudes de prueba y las ejecuta. Pero como dije, sería bueno si esto se ejecuta desde el plugin TestNG.

¿Necesito algún tipo de solución, por ejemplo, Ant scripts (ojalá que no) o alguna magia Maven? ¿Cuáles son las mejores prácticas?

Sé que también podría crear servicios web para mi aplicación, luego puedo llamarlos desde pruebas de unidades locales. Pero me gustaría saber si también hay posibilidades sin servicios web.

Respuesta

2

Lamentablemente no tengo una solución preparada, pero creo que puedo darle algunos consejos, ya que pasé un tiempo pensando en esto.

No sé de TestNG pero JUnit tiene la capacidad de agregar tu propio ejecutor de prueba. Estoy seguro de que TestNG tiene la funcionalidad adecuada. Por lo tanto, encuéntrelo y familiarícese con él. Como puede controlar cómo se invoca su prueba, puede incluso hacer otra cosa en lugar de invocar los métodos del caso de prueba. Por ejemplo, llame a una API remota que hará que la prueba se ejecute de forma remota.

Obviamente, puede ser un servicio web que hace que el Agente remoto (de acuerdo con su sugerencia) ejecute la prueba en la máquina remota. Está bien, pero me gustan más las soluciones sin agente o sin agente. ¿Que quiero decir? Si, por ejemplo, su máquina remota es Unix, puede realizar una conexión SSH o Telnet y ejecutar una línea de comandos. En este caso, puede crear una secuencia de comandos mvn o ant, copiar en una máquina remota usando ssh y luego ejecutarlo. El script ejecutará tus pruebas. Entonces es casi agente menos. Solo requiere instalación de Java y soporte SSH.

Si la máquina remota es Windows, puede usar Telnet o WMI. Entonces, si la seguridad no es un problema pero necesita soporte multiplataforma, use Telnet.

No dude en ponerse en contacto conmigo si necesita más ayuda con respecto a SSH/Telnet.

+0

Gracias. Ya realizamos pruebas en las máquinas remotas mediante el uso de herramientas Unix y Ant. Pero la experiencia del desarrollador sería mucho mejor si puede ejecutar la prueba directamente desde el IDE (y también eliminar errores fácilmente) y obtener la "barra verde" directamente al lado del código (no en una página web abierta por separado como hudson/jenkins). – ifischer

4

La manera de lograr esto depende en gran medida del servidor de integración y del IDE que esté utilizando, y cuál es su aplicación. Asumiré que estás usando Eclipse; y supondré que estás usando Jenkins, ya que IMO será la más fácil de conseguir para hacer lo que quieras.

La mayor parte de esto funcionará de la caja. Sin embargo, hay un poco que requerirá un poco de trabajo adicional.

Usted querrá hacer lo siguiente:

  1. configurar una tarea en Jenkins con un nombre como "Prueba Integrada" (el nombre no importa). Configúrelo para ejecutar las pruebas que desea ejecutar desde su IDE, y para permitir que las máquinas remotas desencadenen construcciones.
  2. Haga de este trabajo un trabajo parametrizado y agregue un parámetro de archivo. Supongamos que esto se llama 'TestingProgram'. Este será el programa que el trabajo pondrá a prueba.
  3. Haga que el trabajo de Prueba integrada use el archivo TestingProgram para ejecutar las pruebas. Si su programa requiere más de un archivo, suponga que será un archivo comprimido que contenga todos los archivos necesarios.
  4. Configurar el proyecto Eclipse para producir estos mismo archivo (s) que el trabajo Pruebas de Integración espera (supongo que esto ya está ocurriendo, ya que es de suponer que la construcción de una especie de versión bin de su programa)

Ahora viene la parte un poco más complicada de conectar Eclipse a Jenkins. Lamentablemente, no creo que existan herramientas preexistentes que hagan exactamente lo que usted desea. La buena noticia es que debe ser muy simple de lograr con un script personalizado. Todo el guión tiene que hacer es:

  1. Si el programa tiene varios archivos requeridos, y el eclipse no hayan hecho todavía, que necesitará para comprimir estos archivos de hasta
  2. Se tendrá que tomar el archivo y leer en alguna variable, y luego base64 la codifica. Hay muchas bibliotecas que se encargarán de la mayor parte de esto, por ejemplo, this one. Asumamos este archivo se lee en una variable llamada $programFile
  3. Se tendrá que enviar una solicitud HTTP a http://<your-jenkins-server>:8080/<integrated-testing-job-name>/buildwithparameters?TestingProgram=$programFile

Puede leer más sobre la activación remota Jenkins construye con parámetros en the jenkins docs.

La secuencia de comandos que lleva a cabo estos pasos puede ser prácticamente cualquier cosa. Dado que, en última instancia, desea incorporarlo a su IDE, parece que las opciones más lógicas serían una secuencia de comandos ant o un complemento de Eclipse. Ninguno sería demasiado complicado: el guión de la hormiga solo haría esos pasos, y podrías importar el guión ant en un proyecto de Eclipse específicamente para hacer pruebas, y un complemento podría simplemente agregar un elemento de menú que, ejecutado dentro de un proyecto, se ejecutaría los pasos anteriores para ese proyecto.

NOTA: En realidad, hay varias maneras diferentes de desencadenar una construcción con parámetros utilizando Jenkins. Por ejemplo, puede hacer una solicitud POST, usar json para pasar el parámetro como se describe en los documentos de jenkins a los que he vinculado, usar la CLI de Jenkins, etc. No todos trabajan con parámetros de archivo, pero los usaría todos en una De manera muy similar: como un paso en su secuencia de comandos personalizada, ejecutaría una compilación remota en Jenkins y pasaría el archivo que desea usar para probar. Por ejemplo, la explicación que di se supone que el archivo de prueba es muy pequeño; si ese no es el caso, es posible que desee realizar una solicitud POST en su lugar. Si tiene problemas al usar un método, debería ser bastante fácil cambiarlo para usar un método diferente que funcione mejor.

2

no he hecho yo (mis pruebas son locales), pero aquí hay algunas cosas que podría trabajar:

  • Cargo se puede utilizar para ejecutar un servidor y desplegar módulos en ella
  • de reproducción las pruebas se pueden hacer usando Cactus (bastante viejo) o JUnitEE. En algunos casos, implementa las pruebas usando JUnit y las ejecuta de forma remota. Otra opción es escribir las pruebas para interactuar con una API dedicada en su servidor que ejecuta las pruebas y los informes de nuevo.
2

En mi solución, almorzaré un servidor JNDI local y agregaré un objeto remoto (un objeto implementará la interfaz remota), luego podría usar el objeto remoto para sincronizar su IDE local y servidor remoto u otro lugar.

Cuestiones relacionadas