python - जेनकिंस में पाइथन unittests?




unit-testing jenkins (4)

आप जेनकिन्स को पाइथन के सबसे अच्छे मामलों को निष्पादित करने के लिए कैसे प्राप्त करते हैं? क्या बिल्टिन unittest पैकेज से शैली एक्सएमएल आउटपुट JUnit संभव है?


नमूना परीक्षण:

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)

Pytest के साथ जुनीट

परीक्षण के साथ चलाएं:

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>

नाक के साथ जुनीट

परीक्षण के साथ चलाएं:

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>

नाक 2 के साथ जुनीट

आपको 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>

Unitest-xml- रिपोर्टिंग के साथ जुनीट

tests.py में निम्नलिखित संलग्न करें

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

परीक्षण के साथ चलाएं:

python tests.py

परीक्षण रिपोर्ट / टेस्ट-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-xml-reporting पैकेज को स्थापित कर सकते हैं जो एक्सएमएल को बिल्ट-इन unittest में उत्पन्न करता है।

हम pytest उपयोग pytest , जिसमें एक्सएमएल आउटपुट बनाया गया है (यह एक कमांड लाइन विकल्प है)।

किसी भी तरह से, यूनिट परीक्षण निष्पादित करने के लिए शेल कमांड चलाकर किया जा सकता है।


मैं नाक का उपयोग कर दूसरा होगा। बेसिक एक्सएमएल रिपोर्टिंग अब बनाई गई है। बस --with-xunit कमांड लाइन विकल्प का उपयोग करें और यह एक nosetests.xml फ़ाइल का उत्पादन करेगा। उदाहरण के लिए:

nosetests --with-xunit

फिर पोस्ट बिल्ड एक्शन के बाद "जुनीट परीक्षा परिणाम रिपोर्ट प्रकाशित करें", और "टेस्ट रिपोर्ट एक्सएमएल" फ़ील्ड को nosetests.xml के साथ भरें (मान लीजिए कि आपने $ WORKSPACE में नोसेटेट चलाया है)।


मैंने नोसेटेट का इस्तेमाल किया। जेनकींस के लिए एक्सएमएल आउटपुट करने के लिए एडॉन्स हैं





xunit