Làm thế nào để bạn có được Jenkins để thực hiện các trường hợp không đáng tin nhất python? Có thể xuất đầu ra XML kiểu JUnit từ unittest
gói dựng sẵn không?
Làm thế nào để bạn có được Jenkins để thực hiện các trường hợp không đáng tin nhất python? Có thể xuất đầu ra XML kiểu JUnit từ unittest
gói dựng sẵn không?
Câu trả lời:
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)
chạy thử nghiệm với:
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>
chạy thử nghiệm với:
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>
Bạn sẽ cần phải sử dụng nose2.plugins.junitxml
plugin. Bạn có thể định cấu hình nose2
với tệp cấu hình như bạn thường làm hoặc với --plugin
tùy chọn dòng lệnh.
chạy thử nghiệm với:
nose2 --plugin nose2.plugins.junitxml --junit-xml tests
mũi2-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>
Nối các mục sau vào tests.py
if __name__ == '__main__':
import xmlrunner
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
chạy thử nghiệm với:
python tests.py
kiểm tra báo cáo / 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
sử dụng Test Discovery? Nó hoạt động chính xác như được mô tả trong câu trả lời unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
.
Tôi sẽ sử dụng mũi thứ hai. Báo cáo XML cơ bản hiện đã được tích hợp sẵn. Chỉ cần sử dụng tùy chọn dòng lệnh --with-xunit và nó sẽ tạo ra tệp nosetests.xml. Ví dụ:
nosetests - với-xunit
Sau đó, thêm hành động xây dựng bài đăng "Báo cáo kết quả kiểm tra JUnit" và điền vào trường "XML báo cáo thử nghiệm" với nosetests.xml (giả sử rằng bạn đã chạy nosetests trong $ WORKSPACE).
Bạn có thể cài đặt gói báo cáo unittest-xml để thêm trình chạy thử nghiệm tạo XML vào tích hợp unittest
.
Chúng tôi sử dụng pytest , có đầu ra XML tích hợp (đó là tùy chọn dòng lệnh).
Dù bằng cách nào, việc thực hiện các bài kiểm tra đơn vị có thể được thực hiện bằng cách chạy lệnh shell.
Tôi đã sử dụng nosetests. Có các addon để xuất XML cho Jenkins
Khi sử dụng bản dựng, chúng tôi sử dụng collective.xmltestreport
để tạo đầu ra XML theo kiểu JUnit, có lẽ đó là mã nguồn hoặc chính mô-đun có thể giúp ích.
python -m pytest --junit-xml=pytest_unit.xml source_directory/test/unit || true # tests may fail
Chạy cái này dưới dạng shell từ jenkins, bạn có thể lấy báo cáo trong pytest_unit.xml dưới dạng artifact.
import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)