unitarias test pruebas prueba ejecutar casos python unit-testing jenkins junit xunit

test - ¿Pruebas unitarias de Python en Jenkins?



pruebas unitarias en python (6)

¿Cómo haces para que Jenkins ejecute los casos de python unittest? ¿Es posible JUnit salida XML de estilo desde el paquete interno unittest ?


pruebas de muestra:

tests.py:

# tests.py import random try: import unittest2 as unittest except ImportError: import unittest class SimpleTest(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)

JUnit con Pytest

ejecuta las pruebas con:

py.test --junitxml results.xml tests.py

results.xml:

<?xml version="1.0" encoding="utf-8"?> <testsuite errors="0" failures="1" name="pytest" skips="1" tests="2" time="0.097"> <testcase classname="tests.SimpleTest" name="test_fail" time="0.000301837921143"> <failure message="test failure">self = &lt;tests.SimpleTest testMethod=test_fail&gt; def test_fail(self): &gt; self.assertEqual(11, 7 + 3) E AssertionError: 11 != 10 tests.py:16: AssertionError</failure> </testcase> <testcase classname="tests.SimpleTest" name="test_pass" time="0.000109910964966"/> <testcase classname="tests.SimpleTest" name="test_skipped" time="0.000164031982422"> <skipped message="demonstrating skipping" type="pytest.skip">/home/damien/test-env/lib/python2.6/site-packages/_pytest/unittest.py:119: Skipped: demonstrating skipping</skipped> </testcase> </testsuite>

JUnit con nariz

ejecuta las pruebas con:

nosetests --with-xunit

nosetests.xml:

<?xml version="1.0" encoding="UTF-8"?> <testsuite name="nosetests" tests="3" errors="0" failures="1" skip="1"> <testcase classname="tests.SimpleTest" name="test_fail" time="0.000"> <failure type="exceptions.AssertionError" message="11 != 10"> <![CDATA[Traceback (most recent call last): File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 340, in run testMethod() File "/home/damien/tests.py", line 16, in test_fail self.assertEqual(11, 7 + 3) File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 521, in assertEqual assertion_func(first, second, msg=msg) File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 514, in _baseAssertEqual raise self.failureException(msg) AssertionError: 11 != 10 ]]> </failure> </testcase> <testcase classname="tests.SimpleTest" name="test_pass" time="0.000"></testcase> <testcase classname="tests.SimpleTest" name="test_skipped" time="0.000"> <skipped type="nose.plugins.skip.SkipTest" message="demonstrating skipping"> <![CDATA[SkipTest: demonstrating skipping ]]> </skipped> </testcase> </testsuite>

JUnit con nose2

nose2.plugins.junitxml usar el complemento nose2.plugins.junitxml . Puede configurar nose2 con un archivo config como lo haría normalmente, o con la --plugin línea de comando.

ejecuta las pruebas con:

nose2 --plugin nose2.plugins.junitxml --junit-xml tests

nose2-junit.xml:

<testsuite errors="0" failures="1" name="nose2-junit" skips="1" tests="3" time="0.001"> <testcase classname="tests.SimpleTest" name="test_fail" time="0.000126"> <failure message="test failure">Traceback (most recent call last): File "/Users/damien/Work/test2/tests.py", line 18, in test_fail self.assertEqual(11, 7 + 3) AssertionError: 11 != 10 </failure> </testcase> <testcase classname="tests.SimpleTest" name="test_pass" time="0.000095" /> <testcase classname="tests.SimpleTest" name="test_skipped" time="0.000058"> <skipped /> </testcase> </testsuite>

JUnit con unittest-xml-reporting

Añada lo siguiente a tests.py

if __name__ == ''__main__'': import xmlrunner unittest.main(testRunner=xmlrunner.XMLTestRunner(output=''test-reports''))

ejecuta las pruebas con:

python tests.py

test-reports / TEST-SimpleTest-20131001140629.xml:

<?xml version="1.0" ?> <testsuite errors="1" failures="0" name="SimpleTest-20131001140629" tests="3" time="0.000"> <testcase classname="SimpleTest" name="test_pass" time="0.000"/> <testcase classname="SimpleTest" name="test_fail" time="0.000"> <error message="11 != 10" type="AssertionError"> <![CDATA[Traceback (most recent call last): File "tests.py", line 16, in test_fail self.assertEqual(11, 7 + 3) AssertionError: 11 != 10 ]]> </error> </testcase> <testcase classname="SimpleTest" name="test_skipped" time="0.000"> <skipped message="demonstrating skipping" type="skip"/> </testcase> <system-out> <![CDATA[]]> </system-out> <system-err> <![CDATA[]]> </system-err> </testsuite>



Puede instalar el paquete unittest-xml-reporting para agregar un corrector de prueba que genere XML a la prueba unittest incorporada.

Usamos pytest , que tiene una salida XML incorporada (es una opción de línea de comando).

De cualquier forma, la ejecución de las pruebas unitarias se puede realizar ejecutando un comando de shell.


Usé nosetests. Hay complementos para generar el XML para Jenkins


Yo usaría la nariz en segundo lugar. Los informes XML básicos ahora están incorporados. Simplemente use la opción de línea de comandos --with-xunit y generará un archivo nosetests.xml. Por ejemplo:

nosetests --with-xunit

A continuación, agregue una acción de creación de publicación "Publicar informe de resultados de prueba JUnit" y complete el campo "Probar XML de informes" con nosetests.xml (suponiendo que ejecutó nosetest en $ WORKSPACE).


python -m pytest --junit-xml=pytest_unit.xml source_directory/test/unit || true # tests may fail

Ejecuta esto como shell de jenkins, puedes obtener el informe en pytest_unit.xml como artefacto.