software procesos javier integración integracion implica garzas etapa esquema desarrollo continua circuito arquitectura javascript unit-testing continuous-integration qunit bamboo

procesos - Ejecutar pruebas de unidad de JavaScript sin cabeza en una construcción de integración continua



pipeline integracion continua (7)

Como alternativa, también puedes probar TestSwarm. Lo tengo funcionando usando QUnit para ejecutar mis pruebas JS.

Tengo un plan de compilación de aplicaciones en ejecución en un sistema de integración continua ( Atlassian Bamboo 2.5). Necesito incorporar pruebas de unidades de JavaScript basadas en QUnit en el plan de compilación para que en cada compilación se ejecuten las pruebas de Javascript y que Bamboo interprete los resultados de las pruebas.

Preferiblemente, me gustaría poder hacer que el proceso de compilación sea "independiente" para que no se requieran conexiones a servidores externos. Buenas ideas sobre cómo lograr esto? El sistema de CI que ejecuta el proceso de compilación se encuentra en un servidor Linux de Ubuntu.


Como logré encontrar una solución, pensé que sería una buena idea compartirla. El enfoque puede no ser perfecto, pero es el primero que parece funcionar. Siéntase libre de publicar mejoras y sugerencias.

Lo que hice en pocas palabras:

  • Lanzar una instancia de Xvfb , un framebuffer virtual
  • Usando JsTestDriver :
    • lanzar una instancia de Firefox en el framebuffer virtual (sin cabeza)
    • capturar la instancia de Firefox y ejecutar el conjunto de pruebas
    • Generar resultados de pruebas compatibles con JUnit .XML
  • Use Bamboo para inspeccionar el archivo de resultados para aprobar o anular la construcción

A continuación, pasaré por las fases más detalladas. Esto es lo que mi estructura de directorios terminó pareciendo:

lib/ JsTestDriver.jar test/ qunit/ equiv.js QUnitAdapter.js jsTestDriver.conf run_js_tests.sh tests.js test-reports/ build.xml

En el servidor de compilación:

  • Instalar Xvfb ( apt-get install Xvfb )
  • Instalar Firefox ( apt-get install firefox )

En tu aplicación que se construirá:

  • Instale JsTestDriver: JsTestDriver
    • agregue los adapters QUnit equiv.js y QUnitAdapter.js
    • configurar JsTestDriver ( jsTestDriver.conf ):

server: http://localhost:4224 load: # Load QUnit adapters (may be omitted if QUnit is not used) - qunit/equiv.js - qunit/QUnitAdapter.js # Tests themselves (you''ll want to add more files) - tests.js

Cree un archivo de script para ejecutar las pruebas unitarias y generar resultados de prueba (ejemplo en Bash, run_js_tests.sh ):

#!/bin/bash # directory to write output XML (if this doesn''t exist, the results will not be generated!) OUTPUT_DIR="../test-reports" mkdir $OUTPUT_DIR XVFB=`which Xvfb` if [ "$?" -eq 1 ]; then echo "Xvfb not found." exit 1 fi FIREFOX=`which firefox` if [ "$?" -eq 1 ]; then echo "Firefox not found." exit 1 fi $XVFB :99 -ac & # launch virtual framebuffer into the background PID_XVFB="$!" # take the process ID export DISPLAY=:99 # set display to use that of the xvfb # run the tests java -jar ../lib/JsTestDriver.jar --config jsTestDriver.conf --port 4224 --browser $FIREFOX --tests all --testOutput $OUTPUT_DIR kill $PID_XVFB # shut down xvfb (firefox will shut down cleanly by JsTestDriver) echo "Done."

Cree un objetivo Ant que llame al script:

<target name="test"> <exec executable="cmd" osfamily="windows"> <!-- This might contain something different in a Windows environment --> </exec> <exec executable="/bin/bash" dir="test" osfamily="unix"> <arg value="run_js_tests.sh" /> </exec> </target>

Finalmente, indique al plan de compilación de Bamboo que invoque el objetivo de la test y busque los resultados de la prueba de JUnit. Aquí el valor predeterminado "**/test-reports/*.xml" bien.


Es posible que pueda usar rhino, el navegador sin cabeza, para ejecutar las pruebas de su unidad en su máquina CI. Por supuesto, la desventaja aquí es que no encontrará errores específicos del navegador X ... pero supera la instalación de 2-3 sistemas operativos en su cuadro de CI, para cubrir todas las plataformas principales ...

Pero sí, esto es una mierda ... pero podría funcionar lo suficientemente bien en un escenario de CI.


He jugado varias soluciones durante el año pasado, pero no encontré nada en el estadio de Karma (anteriormente testacular). Darle una oportunidad

http://karma-runner.github.com/


He usado maven y junit para llamar al rinoceronte. No es elegante, pero lo uso para probar los servicios básicos y el código de utilidad.

Requiere burlarse de clases no compatibles, como XHR con bibliotecas Java.

Descubrí que es mejor codificar todo en javascript (pruebas, etc.) y solo usar junit para la organización de compilación y un enlace a la IC.

Me gustaría ver si JsTestDriver puede hacerlo. O mocha con un reportero de junio.



JS Test Runner es una solución bastante buena. Utiliza PhantomJS y QUnit.