젠킨스가 파이썬 단위 테스트 케이스를 어떻게 실행 시키나요? 내장형 unittest
패키지의 JUnit 스타일 XML 출력이 가능합니까?젠킨스에서 Python unittests?
답변
샘플 테스트 :
tests.py :
py.test --junitxml results.xml tests.py
은 Results.xml :
012,354,065,666,172,324,146# 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 with pytest
과 함께 테스트를 실행
nosetests --with-xunit
nosetests.xml :
JUnit with nose
함께 테스트를 실행
<?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 with nose2
당신은 nose2.plugins.junitxml
플러그인을 사용해야합니다. 평소처럼 config 파일을 사용하여 nose2
을 구성하거나 --plugin
명령 줄 옵션을 사용하여 구성 할 수 있습니다.
nose2 --plugin nose2.plugins.junitxml --junit-xml tests
nose2-의 JUnit :
함께 테스트를 실행합니다.XML :
python tests.py
테스트 보고서/TEST-SimpleTest - 20131001140629.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 with unittest-xml-reporting
가 tests.py
if __name__ == '__main__':
import xmlrunner
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
에 다음과 같은 추가는 함께 테스트를 실행 :
<?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>
+1 'py.test --junitxml results.xml test.py'제안. py.test를 설치하려면 'yum install pytest'를 입력하십시오. 그런 다음 unittest 파이썬 스크립트를 실행하고 jUnit xml 결과를 얻을 수 있습니다. – gaoithe
_unittest-xml-reporting_을 사용하고 [테스트 검색 기능] (https://docs.python.org/3/library/unittest.html#unittest-test-discovery)의 이점을 활용하려면 ' unittest.main (module = None, testRunner = xmlrunner.XMLTestRunner (출력 = '테스트 보고서'))'. –
@RosbergLinhares 왜 Test Discovery를 사용하려면'module = None'이 필요합니까? 이는'unittest.main (testRunner = xmlrunner.XMLTestRunner (output = 'test-reports'))'답변에 설명 된 것과 똑같이 작동합니다. – acm
nosetests를 사용했습니다. Jenkins 용 XML을 출력하는 추가 기능이 있습니다
buildout을 사용하는 경우 collective.xmltestreport
을 사용하여 JUnit 스타일 XML 출력을 생성합니다 (아마도 source code이거나 모듈 자체가 도움이 될 수 있습니다).
unittest-xml-reporting 패키지를 설치하여 XML을 생성하는 테스트 러너를 내장 된 unittest
에 추가 할 수 있습니다.
XML 출력이 내장 된 pytest을 사용합니다 (명령 행 옵션).
어느 쪽이든, 단위 테스트를 실행하는 것은 쉘 명령을 실행하여 수행 할 수 있습니다.
코를 두 번째로 사용합니다. 기본 XML보고가 내장되어 있습니다. --with-xunit 명령 줄 옵션을 사용하면 nosetests.xml 파일이 생성됩니다.
그런 다음 nosetests.xml와 "테스트 보고서 XMLS"필드에 "JUnit 테스트 결과 보고서를 게시"포스트 빌드 작업을 추가하고, 입력 --with-xUnit의
nosetests (예를 들면 : $ WORKSPACE에서 nosetests를 실행했다고 가정).
python -m pytest --junit-xml=pytest_unit.xml source_directory/test/unit || true # tests may fail
실행이 젠킨스에서 쉘, 당신은 유물로 pytest_unit.xml에서 보고서를 얻을 수 있습니다.
모든 대답은 명령 줄에서 테스트 사례를 시작하려고한다고 가정합니다. 하지만 프로그래밍 방식으로 테스트를 실행하려면 다음과 같이 해보십시오 :'import nose; nose.runmodule() # 일명 nose.run (defaultTest = __ 이름 __)' – MarkHu
IMHO 간단한 'py.test - junitxml results.xml test.py'제안이 질문에 가장 잘 답변합니다. py.test를 설치하려면 'yum install pytest'를 입력하십시오. 그런 다음 unittest 파이썬 스크립트를 실행하고 jUnit xml 결과를 얻을 수 있습니다. – gaoithe
@ gaoithe는 jenkins 부분에 응답하지만 내장 unittest 모듈을 사용하기위한 요구 사항을 충족하지는 않습니다. 그 프로젝트에서 그것은 주어진 요구 사항이었다. – erikbwork