¿Cómo se consigue que Jenkins ejecute casos de Python unittest? ¿Es posible hacer una salida XML de estilo JUnit desde el unittestpaquete incorporado ?
Todas las respuestas suponen que desea iniciar los casos de prueba desde la línea de comandos. Pero si desea ejecutar las pruebas mediante programación, intente esto:import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
MarkHu
1
En mi humilde opinión, la sugerencia simple 'py.test --junitxml results.xml test.py' responde mejor a la pregunta. 'yum install pytest' para instalar py.test. Luego puede ejecutar cualquier script python de unittest y obtener resultados de jUnit xml
gaoithe
1
@gaoithe que responde a la parte de jenkins, pero no cumple con el requisito de usar el módulo de prueba de unidad incorporado. En ese proyecto era un requisito dado.
erikbwork
@ erikb85 Cuando digo "ejecutar cualquier script de unittest python" me refiero a un script que utiliza el módulo unittest.
Gaoithe
Respuestas:
173
pruebas de muestra:
tests.py:
# tests.pyimport random
try:import unittest2 as unittest
exceptImportError:import unittest
classSimpleTest(unittest.TestCase):@unittest.skip("demonstrating skipping")def test_skipped(self):
self.fail("shouldn't happen")def test_pass(self):
self.assertEqual(10,7+3)def test_fail(self):
self.assertEqual(11,7+3)
Tendría que usar el nose2.plugins.junitxmlcomplemento. Puede configurar nose2con un archivo de configuración como lo haría normalmente, o con la --pluginopción de línea de comandos.
+1 para la sugerencia simple 'py.test --junitxml results.xml test.py'. 'yum install pytest' para instalar py.test. Luego puede ejecutar cualquier script de python unittest y obtener resultados jUnit xml.
Gaoithe
1
Si desea utilizar unittest-xml-reporting y beneficiarse de la función Test Discovery , puede poner unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports')).
Rosberg Linhares
@RosbergLinhares ¿por qué necesita module=Noneusar Test Discovery? Funciona exactamente como se describe en la respuesta unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports')).
acm
@RosbergLinhares, durante el descubrimiento de prueba, los módulos solo se importan pero no se ejecutan. Entonces, ¿cómo se supone que alguna de esas soluciones funciona con el descubrimiento? Lo acabo de probar, nada de eso funciona. ¿O me estoy perdiendo algo?
Konstantin el
20
Yo segundo usaría la nariz. Los informes XML básicos ahora están integrados. Solo use la opción de línea de comando --with-xunit y producirá un archivo nosetests.xml. Por ejemplo:
pruebas de nariz --with-xunit
A continuación, agregue una acción posterior a la compilación "Publicar informe de resultados de la prueba JUnit" y complete el campo "XML de informe de prueba" con nosetests.xml (suponiendo que ejecutó pruebas de nariz en $ WORKSPACE).
Cuando usamos buildout que usamos collective.xmltestreportpara producir una salida XML de estilo JUnit, quizás sea el código fuente o el módulo en sí mismo podría ser de ayuda.
import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
Respuestas:
pruebas de muestra:
tests.py:
JUnit con pytest
ejecuta las pruebas con:
resultados.xml:
JUnit con nariz
ejecuta las pruebas con:
nosetests.xml:
JUnit con nariz2
Tendría que usar el
nose2.plugins.junitxml
complemento. Puede configurarnose2
con un archivo de configuración como lo haría normalmente, o con la--plugin
opción de línea de comandos.ejecuta las pruebas con:
nose2-junit.xml:
JUnit con unittest-xml-reporting
Agregue lo siguiente a
tests.py
ejecuta las pruebas con:
test-reports / TEST-SimpleTest-20131001140629.xml:
fuente
unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.module=None
usar Test Discovery? Funciona exactamente como se describe en la respuestaunittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.Yo segundo usaría la nariz. Los informes XML básicos ahora están integrados. Solo use la opción de línea de comando --with-xunit y producirá un archivo nosetests.xml. Por ejemplo:
A continuación, agregue una acción posterior a la compilación "Publicar informe de resultados de la prueba JUnit" y complete el campo "XML de informe de prueba" con nosetests.xml (suponiendo que ejecutó pruebas de nariz en $ WORKSPACE).
fuente
Puede instalar el paquete unittest-xml-reporting para agregar un corredor de prueba que genere XML al incorporado
unittest
.Usamos pytest , que tiene una salida XML incorporada (es una opción de línea de comando).
De cualquier manera, la ejecución de las pruebas unitarias se puede realizar ejecutando un comando de shell.
fuente
Usé pruebas de nariz. Hay complementos para generar el XML para Jenkins
fuente
Cuando usamos buildout que usamos
collective.xmltestreport
para producir una salida XML de estilo JUnit, quizás sea el código fuente o el módulo en sí mismo podría ser de ayuda.fuente
Ejecute esto como shell desde jenkins, puede obtener el informe en pytest_unit.xml como artefacto.
fuente