jenkins - जुडिट एक्सएमएल प्रारूप विनिर्देश है कि हडसन का समर्थन करता है




junit hudson (6)

मेरे पास हडसन निरंतर एकीकरण सर्वर है और मैं विकल्प 'जुनीट परीक्षा परिणाम रिपोर्ट प्रकाशित करें' विकल्प का उपयोग करना चाहता हूं। लेकिन मैं परीक्षण के लिए xUnit उपकरण का उपयोग नहीं करता, इसके बजाय मेरे पास शेल स्क्रिप्ट हैं जो परीक्षण चलाती हैं और परिणाम को सरल प्रारूप में लौटाती हैं। मैं एक ऐसी स्क्रिप्ट बनाने के बारे में सोच रहा हूं जो इन परिणामों को जुनीट प्रारूप में बदल देती है। तो मैं दिलचस्प हूं कि जुनीट फ़ाइल को कैसे देखना चाहिए?


"जुनीट" और "xUnit" परिणामों के लिए कई स्कीमा हैं।

कृपया ध्यान दें कि जेनकिन्स xunit-plugin द्वारा उपयोग की जाने वाली स्कीमा के कई संस्करण हैं (वर्तमान नवीनतम संस्करण junit-10.xsd जो junit-10.xsd / ओटीपी जुनिट प्रारूप के लिए समर्थन जोड़ता है)।

कुछ परीक्षण ढांचे के साथ-साथ "xUnit" -स्टाइल रिपोर्टिंग प्लगइन्स भी "xUnit" -स्टाइल रिपोर्ट उत्पन्न करने के लिए अपने स्वयं के गुप्त सॉस का उपयोग करते हैं, वे किसी विशेष स्कीमा का उपयोग नहीं कर सकते हैं (कृपया पढ़ें: वे कोशिश करते हैं लेकिन उपकरण किसी के खिलाफ मान्य नहीं हो सकते हैं एक स्कीमा)। जेनकिंस में पाइथन unittests? इन पुस्तकालयों में से कई की त्वरित तुलना और उत्पन्न XML रिपोर्ट के बीच मामूली अंतर देता है।


पाइथन का उपयोग करने पर यहां अच्छे जवाब: (इसे करने के कई तरीके हैं) पायथन जेनकींस में unittests?

आईएमएचओ सबसे अच्छा तरीका है python unittest परीक्षण लिखना और py.test स्थापित करने के लिए pytest (कुछ 'yum install pytest') इंस्टॉल करें। फिर इस तरह के परीक्षण चलाएं: 'py.test --junitxml results.xml test.py' । आप किसी भी अजीब पायथन स्क्रिप्ट को चला सकते हैं और jnnit xml परिणाम प्राप्त कर सकते हैं।

https://docs.python.org/2.7/library/unittest.html

जेनकिंस में कॉन्फ़िगरेशन पोस्ट-बिल्ड क्रियाएं परिणाम "xUnit परीक्षा परिणाम रिपोर्ट" परिणाम जोड़ें .xml के साथ कार्रवाई करें और आपके द्वारा उत्पादित किसी और परीक्षण परिणाम फ़ाइलों को जोड़ें।


मुझे इस पर कोई अच्छी जानकारी नहीं मिली, इसलिए मैंने कुछ परीक्षण और त्रुटि की। निम्नलिखित गुण और फ़ील्ड (और केवल इन) जेनकींस (v1.585) द्वारा मान्यता प्राप्त हैं।

<?xml version="1.0" encoding="UTF-8"?>
<testsuite>

  <!-- if your classname does not include a dot, the package defaults to "(root)" -->
  <testcase name="my testcase" classname="my package.my classname" time="29">

    <!-- If the test didn't pass, specify ONE of the following 3 cases -->

    <!-- option 1 --> <skipped />
    <!-- option 2 --> <failure message="my failure message">my stack trace</failure>
    <!-- option 3 --> <error message="my error message">my crash report</error>

    <system-out>my STDOUT dump</system-out>

    <system-err>my STDERR dump</system-err>

  </testcase>

</testsuite>

(मैंने इस नमूना एक्सएमएल दस्तावेज के साथ शुरू किया और वहां से पीछे की ओर काम किया।)


मूल संरचना यहां एक जुनीट आउटपुट फ़ाइल का एक उदाहरण है, जिसमें एक स्किप और असफल परिणाम दिखाया गया है, साथ ही एक एकल उत्तीर्ण परिणाम भी दिखाया गया है।

<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
   <testsuite name="JUnitXmlReporter" errors="0" tests="0" failures="0" time="0" timestamp="2013-05-24T10:23:58" />
   <testsuite name="JUnitXmlReporter.constructor" errors="0" skipped="1" tests="3" failures="1" time="0.006" timestamp="2013-05-24T10:23:58">
      <properties>
         <property name="java.vendor" value="Sun Microsystems Inc." />
         <property name="compiler.debug" value="on" />
         <property name="project.jdk.classpath" value="jdk.classpath.1.6" />
      </properties>
      <testcase classname="JUnitXmlReporter.constructor" name="should default path to an empty string" time="0.006">
         <failure message="test failure">Assertion failed</failure>
      </testcase>
      <testcase classname="JUnitXmlReporter.constructor" name="should default consolidate to true" time="0">
         <skipped />
      </testcase>
      <testcase classname="JUnitXmlReporter.constructor" name="should default useDotNotation to true" time="0" />
   </testsuite>
</testsuites>

नीचे एक सामान्य जुनीट एक्सएमएल रिपोर्ट की दस्तावेजी संरचना है। ध्यान दें कि एक रिपोर्ट में 1 या अधिक परीक्षण सूट हो सकता है। प्रत्येक टेस्ट सूट में गुणों का एक सेट होता है (पर्यावरण की जानकारी रिकॉर्डिंग)। प्रत्येक टेस्ट सूट में 1 या अधिक टेस्ट केस भी होते हैं और परीक्षण में पास नहीं होने पर प्रत्येक टेस्ट केस में या तो छोड़ा गया, विफलता या त्रुटि नोड होगा। यदि परीक्षण मामला पारित हो गया है, तो इसमें कोई नोड नहीं होगा। प्रत्येक नोड के लिए कौन से गुण मान्य हैं, इसके बारे में अधिक जानकारी के लिए कृपया निम्नलिखित अनुभाग "स्कीमा" से परामर्श लें।

<testsuites>        => the aggregated result of all junit testfiles
  <testsuite>       => the output from a single TestSuite
    <properties>    => the defined properties at test execution
      <property>    => name/value pair for a single property
      ...
    </properties>
    <error></error> => optional information, in place of a test case - normally if the tests in the suite could not be found etc.
    <testcase>      => the results from executing a test method
      <system-out>  => data written to System.out during the test run
      <system-err>  => data written to System.err during the test run
      <skipped/>    => test was skipped
      <failure>     => test failed
      <error>       => test encountered an error
    </testcase>
    ...
  </testsuite>
  ...
</testsuites>

मैंने कुछ महीने पहले इसी तरह की बात की थी, और यह पता चला कि यह सरल प्रारूप हडसन को परीक्षण प्रोटोकॉल के रूप में स्वीकार करने के लिए पर्याप्त था:

<testsuite tests="3">
    <testcase classname="foo1" name="ASuccessfulTest"/>
    <testcase classname="foo2" name="AnotherSuccessfulTest"/>
    <testcase classname="foo3" name="AFailingTest">
        <failure type="NotEnoughFoo"> details about failure </failure>
    </testcase>
</testsuite>

इस प्रश्न में अधिक जानकारी के साथ जवाब हैं: स्पेक। जुनीट एक्सएमएल आउटपुट के लिए


मैंने बस junit-4.xsd पकड़ लिया है कि दूसरों ने XMLSpear नामक एक टूल को लिंक किया है और स्कीमा को रिक्त एक्सएमएल फ़ाइल में नीचे दिखाए गए विकल्पों के साथ कनवर्ट करने के लिए इस्तेमाल किया है। यह (थोड़ा साफ किया गया) परिणाम है:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites disabled="" errors="" failures="" name="" tests="" time="">
    <testsuite disabled="" errors="" failures="" hostname="" id=""
               name="" package="" skipped="" tests="" time="" timestamp="">
        <properties>
            <property name="" value=""/>
        </properties>
        <testcase assertions="" classname="" name="" status="" time="">
            <skipped/>
            <error message="" type=""/>
            <failure message="" type=""/>
            <system-out/>
            <system-err/>
        </testcase>
        <system-out/>
        <system-err/>
    </testsuite>
</testsuites>

इनमें से कुछ आइटम कई बार हो सकते हैं:

  • केवल एक testsuites तत्व हो सकता है, क्योंकि एक्सएमएल कैसे काम करता है, लेकिन testsuite तत्व के भीतर कई testsuite तत्व हो सकते हैं।
  • प्रत्येक properties तत्व में कई property बच्चे हो सकते हैं।
  • प्रत्येक testsuite तत्व में कई testsuite बच्चे हो सकते हैं।
  • प्रत्येक testcase तत्व में एकाधिक error , failure , system-out , या system-err बच्चे हो सकते हैं।





xunit