जेनकिन्स में अजगर एकजुट?


135

अजगर जेठ के मामलों को अंजाम देने के लिए आपको जेनकिंस कैसे मिले? क्या यह संभव है कि JUnit स्टाइल XML आउटपुट बिलिन unittestपैकेज से?


1
सभी उत्तर मान लें कि आप कमांड-लाइन से परीक्षण मामलों को आरंभ करना चाहते हैं। लेकिन अगर आप परीक्षणों को प्रोग्रामेटिक रूप से चलाना चाहते हैं, तो यह प्रयास करें:import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
मार्कहु सेप

1
IMHO सरल 'py.test --junitxml results.xml test.py' सुझाव प्रश्न का सर्वोत्तम उत्तर देता है। py.test स्थापित करने के लिए 'yum install pytest' करें। तो फिर आप किसी भी तरह की
नॉन पाइथॉन

1
@gaoithe जो जेनकिंस भाग का जवाब देता है, लेकिन बिलिन यूनीटेस्ट मॉड्यूल का उपयोग करने की आवश्यकता को पूरा नहीं करता है। उस परियोजना में यह दी गई आवश्यकता थी।
एरिकबवर्क

@ erikb85 जब मैं कहता हूं "किसी भी unittest python script को रन करें" मेरा मतलब एक ऐसी स्क्रिप्ट है जो unittest मॉड्यूल का उपयोग करता है।
गौइठे

जवाबों:


173

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

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 = &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 के साथ JUnit

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

परीक्षण रिपोर्ट / टेस्ट-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>

4
+1 सरल 'py.test --junitxml results.xml test.py' सुझाव के लिए। py.test स्थापित करने के लिए 'yum install pytest' करें। तब आप किसी भी unitest python स्क्रिप्ट को चला सकते हैं और jUnit xml परिणाम प्राप्त कर सकते हैं।
गौइथे

1
यदि आप परीक्षण डिस्कवरी सुविधा से एकतरफा-एक्सएमएल-रिपोर्टिंग और लाभ का उपयोग करना चाहते हैं , तो आप डाल सकते हैं unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
रोसबर्ग लिन्हार्स

@RosbergLinhares आपको module=Noneटेस्ट डिस्कवरी का उपयोग करने की आवश्यकता क्यों है ? यह ठीक उसी तरह काम करता है जैसा उत्तर में बताया गया है unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
acm

@RosbergLinhares, परीक्षण खोज के दौरान, मॉड्यूल केवल आयात किए जाते हैं लेकिन निष्पादित नहीं होते हैं। तो, उन समाधानों में से कोई भी कैसे खोज के साथ काम करने वाला है? मैंने अभी इसे आज़माया है, इसमें से कोई भी काम नहीं करता है। या क्या मैं कुछ न कुछ भूल रहा हूं?
कॉन्स्टेंटिन

20

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

nosetests - साथ-xunit

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


11

आप एक परीक्षण धावक को जोड़ने के लिए unittest-xml- रिपोर्टिंग पैकेज स्थापित कर सकते हैं जो XML को अंतर्निहित बनाता है unittest

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

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


4

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



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

इसे जेनकिंस से शेल के रूप में चलाएं, आप रिपोर्ट को pytest_unit.xml में विरूपण साक्ष्य के रूप में प्राप्त कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.