Jenkins가 파이썬 단위 테스트 사례를 어떻게 실행하도록합니까? 내장 unittest
패키지 에서 JUnit 스타일 XML 출력이 가능 합니까?
Jenkins가 파이썬 단위 테스트 사례를 어떻게 실행하도록합니까? 내장 unittest
패키지 에서 JUnit 스타일 XML 출력이 가능 합니까?
답변:
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)
다음을 사용하여 테스트를 실행하십시오.
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 = <tests.SimpleTest testMethod=test_fail>
def test_fail(self):
> 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>
다음을 사용하여 테스트를 실행하십시오.
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>
nose2.plugins.junitxml
플러그인 을 사용해야합니다 . nose2
평상시처럼 구성 파일을 사용하거나 --plugin
명령 줄 옵션을 사용하여 구성 할 수 있습니다 .
다음을 사용하여 테스트를 실행하십시오.
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>
다음에 추가 tests.py
if __name__ == '__main__':
import xmlrunner
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
다음을 사용하여 테스트를 실행하십시오.
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>
unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.
module=None
Test Discovery를 사용해야합니까? 대답에 설명 된대로 정확하게 작동합니다 unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.
unittest-xml-reporting 패키지를 설치하여 XML을 생성하는 테스트 러너를 내장에 추가 할 수 있습니다 unittest
.
XML 출력이 내장 된 pytest를 사용 합니다 (명령 줄 옵션).
어느 쪽이든, 쉘 명령을 실행하여 단위 테스트를 수행 할 수 있습니다.
빌드collective.xmltestreport
아웃 을 사용할 때 JUnit 스타일 XML 출력을 생성 하는 데 사용 됩니다. 아마도 소스 코드 이거나 모듈 자체가 도움이 될 수 있습니다.
import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)