হুডসন জুনিত এক্সএমএল ফর্ম্যাট স্পেসিফিকেশনটি কী সমর্থন করে?


183

আমার কাছে ক্রমাগত ইন্টিগ্রেশন সার্ভার হিসাবে হডসন রয়েছে এবং আমি 'প্রকাশিত ইউনাইট পরীক্ষার ফলাফলের প্রতিবেদন' অপশনটি ব্যবহার করতে চাই। তবে আমি পরীক্ষার জন্য xUnit সরঞ্জাম ব্যবহার করি না, এর পরিবর্তে আমার কাছে শেল স্ক্রিপ্ট রয়েছে যা পরীক্ষা চালায় এবং ফলাফলগুলি সহজ বিন্যাসে ফিরে আসে। আমি একটি স্ক্রিপ্ট তৈরি করতে ভাবছি যা এই ফলাফলগুলিকে JUnit ফর্ম্যাটে রূপান্তর করে। সুতরাং আমি আকর্ষণীয় আছি JUnit ফাইলটি অবশ্যই দেখতে হবে?


JUnit ব্যবহার না করার কোন কারণ? এই পরীক্ষাগুলি বিভিন্ন সরঞ্জাম সিএমডি, ইউআই ইত্যাদির মাধ্যমে বিভিন্ন ফ্যাশনে স্বয়ংক্রিয় করা যায় ...
অ্যারন ম্যাকআইভার

6
@ অ্যারোনএমসিআইভার: পরীক্ষাগুলি চালানোর ক্ষেত্রে শেল স্ক্রিপ্টগুলি বেশ ভাল (যে ভাষাটি জাভা নয়)। আপনি কীভাবে JUnit ব্যবহার করবেন?
বেন ভয়েগট

1
@ বেনভয়েট আমি প্রথমে ধরে নিয়েছিলাম যে ওপিতে জাভা জড়িত ছিল এবং পরীক্ষার জোয়ার হিসাবে জুনিতকে বাইপাস করতে চেয়েছিলাম। প্রশ্নটি পর্যালোচনা করার পরে এটি সম্ভবত না। এটি প্রদর্শিত হয় যে কোড. google.com/p/shell2junit দ্বিতীয় বর্ণনার পরে ওপিতে কিছু ব্যবহার করতে পারে।
অ্যারন ম্যাকআইভার

1
শেল 2 ইউনেটের লাইনের সাথে এখানে আমি তৈরি করেছি একটি জ্যাকএক্সবি শ্রেণি যা আমি তৈরি করতে পারি / আউটপুট JUnit XML: gist.github.com/agentgt/8583649
অ্যাডাম জেন্ট

উত্তর:


127

আমি কয়েক মাস আগেও একই রকম কাজ করেছি এবং হডসনের পরীক্ষার প্রোটোকল হিসাবে এটি গ্রহণ করার পক্ষে এই সাধারণ বিন্যাসটি যথেষ্ট ছিল:

<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 XML আউটপুট জন্য


দয়া করে এই উত্তরে একটি সংশোধন করুন, কারণ xunit প্লাগইনটি 'শ্রেণীবদ্ধ' বৈশিষ্ট্যটিকে প্রত্যাখ্যান করে এবং কেবল 'শ্রেণি'
অ্যান্ডহো

10
আমার বিপরীত সমস্যা ছিল classপ্রত্যাখ্যান করা হয়েছিল এবং শুধুমাত্র classnameকাজ হয়েছিল।
ryanbrainard

1
আমি যখন xUnit প্লাগইনটি 1.60 এ আপগ্রেড করেছিলাম তখন এটি আমার জন্য ব্যর্থ হয়েছিল। আমি দেখতে পেয়েছি যে বৈধকরণকারী আরও কঠোর হয়ে গেছে এবং আমাকে <testsuite tests="(number of tests)">প্রাক্তন যোগ করতে হয়েছিল । <testsuite tests="10">
কেভিন ব্রটকে

2
ধন্যবাদ কেভিনব্রোটেক, আমি সেই বৈশিষ্ট্যটি অন্তর্ভুক্ত করার জন্য উত্তরটি আপডেট করব।
অ্যান্ডারস লিন্ডাল

2
এছাড়াও নোট করুন যে হাডসন আপনার প্যাকেজ / স্যুট দ্বারা আপনার পরীক্ষাগুলি সংগঠিত করতে আপনাকে শ্রেণিক নাম বৈশিষ্ট্যে একটি প্যাকেজ নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ: <testcase classname="foo.bar" name="ATest" /> এটি আপনার পরীক্ষার সংগ্রহটিকে আরও সুসংগঠিত করে জেনকিন্সের উপর একটি ফু প্যাকেজে বার ক্লাস স্থাপন করবে।
jluzwick

89

আমি কেবল জুনিট -৪.x এসএসডি পেয়েছি যা অন্যরা লিঙ্ক করেছে এবং নীচে দেখানো বিকল্পগুলির সাথে স্কিমাকে একটি ফাঁকা এক্সএমএল ফাইলে রূপান্তর করতে এক্সএমএলস্পায়ার নামে একটি সরঞ্জাম ব্যবহার করেছে । এটি (কিছুটা পরিষ্কার করা) ফলাফল:

<?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উপাদানটির মধ্যে একাধিক উপাদান থাকতে পারে testsuites
  • প্রতিটি propertiesউপাদান একাধিক propertyশিশু হতে পারে ।
  • প্রতিটি testsuiteউপাদান একাধিক testcaseশিশু হতে পারে ।
  • প্রতিটি testcaseউপাদান একাধিক থাকতে পারে error, failure, system-out, অথবা system-errশিশুদের হয়েছে।

এক্সএমএল স্পয়ার বিকল্পগুলি


1
টেস্টকেসের স্ট্যাটাস বা ত্রুটির ধরণের মতো কিছু বৈশিষ্ট্যের বৈধ মানগুলি বর্ণনা করে এমন কোনও দলিল আছে?
এরিক কোপ

1
@ এরিককোপ আমি উত্স কোডটি svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/… সন্ধান করার পরামর্শ দিতে পারি । মূলত এটি কেবল একটি স্ট্রিং।
সুলতান

4
ট্যাগগুলি কেন নকল হয়?
নাকিলন

সেটিংস মিরর: imgur.com/quneFJf Alt: Rootelement: testsuites, Max recursive de...: 2, Max Repeat factor: 2, include optional elements: (হ্যাঁ = টিক), include optional attributes: (হ্যাঁ = টিক)
n611x007

1
@ নকিলন এটি 2.5 বছর দেরি করে গেছে, তবে আমি এটি ঠিক করে
রেখেছি

45

শীর্ষ উত্তর প্রশ্নই অ্যান্ডার্স Lindahl একটি বোঝায় xsd ফাইল

ব্যক্তিগতভাবে আমি এই এক্সএসডি ফাইলটিও খুব দরকারী খুঁজে পেয়েছি (আমি মনে করি না যে আমি কীভাবে এটি পেয়েছি)। এটিকে কিছুটা ভয় দেখানোর মতো মনে হচ্ছে এবং যতদূর আমি এটি ব্যবহার করেছি, সমস্ত উপাদান এবং বৈশিষ্ট্য জেনকিন্স দ্বারা স্বীকৃত বলে মনে হচ্ছে (v1.451)

যদিও একটি জিনিস: একাধিক <failure ...উপাদান যুক্ত করার সময় , জেনকিন্সে কেবল একটিই ধরে রাখা হয়েছিল। এক্সএমএল ফাইলটি তৈরি করার সময়, এখন আমি একটিতে সমস্ত ব্যর্থতা একত্রিত করি।


আপডেট 2016-11 লিঙ্কটি এখন ভাঙ্গা। আরও ভাল বিকল্পটি এই পৃষ্ঠাটি কিউবিক.আর্গ থেকে: ইউনিত এক্সএমএল ফাইল ফর্ম্যাটকে রিপোর্ট করছে , যেখানে একটি বুদ্ধিমান নথিভুক্ত উদাহরণ প্রদানের জন্য একটি দুর্দান্ত প্রচেষ্টা নেওয়া হয়েছে । উদাহরণ এবং এক্সএসডি নীচে অনুলিপি করা হয়েছে, তবে তাদের পৃষ্ঠাটি অপেক্ষাকৃত ভাল লাগছে।


নমুনা JUnit XML ফাইল

<?xml version="1.0" encoding="UTF-8"?>
<!-- a description of the JUnit XML format and how Jenkins parses it. See also junit.xsd -->

<!-- if only a single testsuite element is present, the testsuites
     element can be omitted. All attributes are optional. -->
<testsuites disabled="" <!-- total number of disabled tests from all testsuites. -->
            errors=""   <!-- total number of tests with error result from all testsuites. -->
            failures="" <!-- total number of failed tests from all testsuites. -->
            name=""
            tests=""    <!-- total number of successful tests from all testsuites. -->
            time=""     <!-- time in seconds to execute all test suites. -->
        >

  <!-- testsuite can appear multiple times, if contained in a testsuites element.
       It can also be the root element. -->
  <testsuite name=""      <!-- Full (class) name of the test for non-aggregated testsuite documents.
                               Class name without the package for aggregated testsuites documents. Required -->
         tests=""     <!-- The total number of tests in the suite, required. -->
         disabled=""  <!-- the total number of disabled tests in the suite. optional -->
             errors=""    <!-- The total number of tests in the suite that errored. An errored test is one that had an unanticipated problem,
                               for example an unchecked throwable; or a problem with the implementation of the test. optional -->
             failures=""  <!-- The total number of tests in the suite that failed. A failure is a test which the code has explicitly failed
                               by using the mechanisms for that purpose. e.g., via an assertEquals. optional -->
             hostname=""  <!-- Host on which the tests were executed. 'localhost' should be used if the hostname cannot be determined. optional -->
         id=""        <!-- Starts at 0 for the first testsuite and is incremented by 1 for each following testsuite -->
         package=""   <!-- Derived from testsuite/@name in the non-aggregated documents. optional -->
         skipped=""   <!-- The total number of skipped tests. optional -->
         time=""      <!-- Time taken (in seconds) to execute the tests in the suite. optional -->
         timestamp="" <!-- when the test was executed in ISO 8601 format (2014-01-21T16:17:18). Timezone may not be specified. optional -->
         >

    <!-- Properties (e.g., environment settings) set during test
     execution. The properties element can appear 0 or once. -->
    <properties>
      <!-- property can appear multiple times. The name and value attributres are required. -->
      <property name="" value=""/>
    </properties>

    <!-- testcase can appear multiple times, see /testsuites/testsuite@tests -->
    <testcase name=""       <!-- Name of the test method, required. -->
          assertions="" <!-- number of assertions in the test case. optional -->
          classname=""  <!-- Full class name for the class the test method is in. required -->
          status=""
          time=""       <!-- Time taken (in seconds) to execute the test. optional -->
          >

      <!-- If the test was not executed or failed, you can specify one
           the skipped, error or failure elements. -->

      <!-- skipped can appear 0 or once. optional -->
      <skipped/>

      <!-- Indicates that the test errored. An errored test is one
           that had an unanticipated problem. For example an unchecked
           throwable or a problem with the implementation of the
           test. Contains as a text node relevant data for the error,
           for example a stack trace. optional -->
      <error message="" <!-- The error message. e.g., if a java exception is thrown, the return value of getMessage() -->
         type=""    <!-- The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. -->
         ></error>

      <!-- Indicates that the test failed. A failure is a test which
       the code has explicitly failed by using the mechanisms for
       that purpose. For example via an assertEquals. Contains as
       a text node relevant data for the failure, e.g., a stack
       trace. optional -->
      <failure message="" <!-- The message specified in the assert. -->
           type=""    <!-- The type of the assert. -->
           ></failure>

      <!-- Data that was written to standard out while the test was executed. optional -->
      <system-out></system-out>

      <!-- Data that was written to standard error while the test was executed. optional -->
      <system-err></system-err>
    </testcase>

    <!-- Data that was written to standard out while the test suite was executed. optional -->
    <system-out></system-out>
    <!-- Data that was written to standard error while the test suite was executed. optional -->
    <system-err></system-err>
  </testsuite>
</testsuites>

JUnit XSD ফাইল

<?xml version="1.0" encoding="UTF-8" ?>
<!-- from https://svn.jenkins-ci.org/trunk/hudson/dtkit/dtkit-format/dtkit-junit-model/src/main/resources/com/thalesgroup/dtkit/junit/model/xsd/junit-4.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="failure">
        <xs:complexType mixed="true">
            <xs:attribute name="type" type="xs:string" use="optional"/>
            <xs:attribute name="message" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="error">
        <xs:complexType mixed="true">
            <xs:attribute name="type" type="xs:string" use="optional"/>
            <xs:attribute name="message" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="properties">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="property" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="property">
        <xs:complexType>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="value" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="skipped" type="xs:string"/>
    <xs:element name="system-err" type="xs:string"/>
    <xs:element name="system-out" type="xs:string"/>

    <xs:element name="testcase">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="skipped" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="error" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="failure" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="system-out" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="system-err" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="assertions" type="xs:string" use="optional"/>
            <xs:attribute name="time" type="xs:string" use="optional"/>
            <xs:attribute name="classname" type="xs:string" use="optional"/>
            <xs:attribute name="status" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="testsuite">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="properties" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="testcase" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="system-out" minOccurs="0" maxOccurs="1"/>
                <xs:element ref="system-err" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="tests" type="xs:string" use="required"/>
            <xs:attribute name="failures" type="xs:string" use="optional"/>
            <xs:attribute name="errors" type="xs:string" use="optional"/>
            <xs:attribute name="time" type="xs:string" use="optional"/>
            <xs:attribute name="disabled" type="xs:string" use="optional"/>
            <xs:attribute name="skipped" type="xs:string" use="optional"/>
            <xs:attribute name="timestamp" type="xs:string" use="optional"/>
            <xs:attribute name="hostname" type="xs:string" use="optional"/>
            <xs:attribute name="id" type="xs:string" use="optional"/>
            <xs:attribute name="package" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="testsuites">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="testsuite" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="optional"/>
            <xs:attribute name="time" type="xs:string" use="optional"/>
            <xs:attribute name="tests" type="xs:string" use="optional"/>
            <xs:attribute name="failures" type="xs:string" use="optional"/>
            <xs:attribute name="disabled" type="xs:string" use="optional"/>
            <xs:attribute name="errors" type="xs:string" use="optional"/>
        </xs:complexType>
    </xs:element>

</xs:schema>

ব্যর্থতাগুলি কীভাবে দেখতে সুন্দর লাগবে? আমি ম্যানুয়ালি নতুন লাইন অক্ষর যুক্ত করতে চাই তবে তারা জেনকিন্সে প্রদর্শিত হবে না।
যৌক্তিক

এটি আমার পদ্ধতির সাথে অসুবিধা। আমার মনে আছে সেই কূপের সাথে লড়াই করা। & Lt; br / & gt; এর মতো কিছু যুক্ত করার চেষ্টা করুন; - আমি ভুলে গিয়েছিলাম কীভাবে এটি সমাধান করা হয়েছিল (এবং আমরা এটি আর ব্যবহার করব না) তবে এটি চেষ্টা করার মতো কিছু বলে মনে হচ্ছে।
parvus

1
আমি এর চারপাশে একটি উপায় খুঁজে পেয়েছি। যেহেতু আমরা সি ++ ব্যবহার করছি আমি কেবল ব্যর্থতার বার্তায় ব্যর্থতার সংখ্যার প্রতিবেদন করছি এবং প্রকৃত ব্যর্থতাগুলি রিপোর্ট করতে "স্ট্যাক ট্রেস" ব্যবহার করছি। যেহেতু স্ট্যাক ট্রেসটি ব্যর্থতার উপাদানটির সাথে থাকা পাঠ্য থেকে জানা গেছে, নতুন লাইনগুলি সঠিকভাবে সমর্থিত।
যৌক্তিক

25

আমি এটিতে কোনও ভাল তথ্য খুঁজে পাইনি, তাই আমি কিছু পরীক্ষা এবং ত্রুটি করলাম। নিম্নলিখিত বৈশিষ্ট্য এবং ক্ষেত্রগুলি (এবং কেবলমাত্র এগুলি) জেনকিন্স (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>

(আমি এই নমুনা এক্সএমএল নথিটি দিয়ে শুরু করেছি এবং সেখান থেকে পিছনে কাজ করেছি worked)


6

বেসিক স্ট্রাকচার এখানে JUnit আউটপুট ফাইলের একটি উদাহরণ, এড়িয়ে যাওয়া এবং ব্যর্থ ফলাফল, পাশাপাশি একটি একক পাস হওয়া ফলাফল দেখানো।

<?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>

নীচে একটি সাধারণ JUnit XML প্রতিবেদনের নথিভুক্ত কাঠামো দেওয়া হয়েছে। লক্ষ্য করুন যে একটি প্রতিবেদনে 1 বা ততোধিক টেস্ট স্যুট থাকতে পারে। প্রতিটি পরীক্ষার স্যুটে বৈশিষ্ট্যের একটি সেট থাকে (পরিবেশের তথ্য রেকর্ডিং)। প্রতিটি পরীক্ষার স্যুটে 1 বা ততোধিক পরীক্ষার কেস থাকে এবং প্রতিটি পরীক্ষার ক্ষেত্রে পরীক্ষা বাদ না পড়লে একটি বাদ দেওয়া, ব্যর্থতা বা ত্রুটি নোড থাকে। যদি পরীক্ষার কেসটি পাস হয়ে যায় তবে এতে কোনও নোড থাকবে না। প্রতিটি নোডের জন্য কোন বৈশিষ্ট্যগুলি বৈধ of তার আরও বিশদ জানতে দয়া করে নিম্নলিখিত বিভাগ "স্কিমা" এর পরামর্শ নিন।

<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>

4

"JUnit" এবং "xUnit" ফলাফলের জন্য একাধিক স্কিমা রয়েছে।

দয়া করে মনে রাখবেন যে জেনকিনস xunit- প্লাগইন (বর্তমানে সর্বশেষতম সংস্করণ junit-10.xsdযা এরলং / ওটিপি জুনিট ফর্ম্যাটের জন্য সমর্থন যোগ করে) ব্যবহার করে স্কিমার বিভিন্ন সংস্করণ রয়েছে ।

কিছু পরীক্ষার কাঠামোর পাশাপাশি "xUnit" - স্টাইল রিপোর্টিং প্লাগইনগুলি "xUnit" স্টাইল রিপোর্ট তৈরি করতে তাদের নিজস্ব সিক্রেট সস ব্যবহার করে, সেগুলি কোনও বিশেষ স্কিমা ব্যবহার নাও করতে পারে (দয়া করে পড়ুন: তারা চেষ্টা করে তবে সরঞ্জামগুলি কোনওটির বিরুদ্ধে বৈধতা নাও পেতে পারে) এক স্কিমা)। জিনকিনসে পাইথন ইউনিটেটস? এর মধ্যে বেশ কয়েকটি লাইব্রেরির একটি দ্রুত তুলনা এবং উত্পাদিত এক্সএমএল প্রতিবেদনের মধ্যে সামান্য পার্থক্য দেয়।


2

পাইথন ব্যবহার সম্পর্কে এখানে ভাল উত্তর: (এটি করার অনেক উপায় রয়েছে) জেনকিনসে পাইথন ইউনিটেটস?

আইএমএইচওর সর্বোত্তম উপায় হ'ল পাইথেষ্ট ইনস্টল করার জন্য পাইথন ইউনিটেস্ট পরীক্ষা লিখুন এবং পাইস্টেস্ট ইনস্টল করুন ('ইয়াম ইনস্টল পাইস্টেস্টের মতো কিছু)'। তারপরে এই জাতীয় পরীক্ষা চালান: 'পাইস্টেস্ট - জুনিটেক্সএমএল ফলাফল.এক্সএমএল টেস্ট.পি' । আপনি যে কোনও ইউনিটেস্ট পাইথন স্ক্রিপ্ট চালাতে পারেন এবং jUnit এক্সএমএল ফলাফল পেতে পারেন।

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

জেনকিন্সে কনফিগারেশন তৈরির পরে পোস্ট-বিল্ড ক্রিয়াকলাপগুলি ফলাফল.এক্সএমএল এবং আপনার উত্পাদিত যে কোনও পরীক্ষার ফলাফল ফাইলের সাথে "প্রকাশিত জুনিত পরীক্ষা ফলাফল রিপোর্ট" ক্রিয়া যুক্ত করুন।


2

আমি একটি নতুন উত্তর পোস্ট করার সিদ্ধান্ত নিয়েছি, কারণ কিছু বিদ্যমান উত্তর পুরানো বা অসম্পূর্ণ।

প্রথমত: এর মতো কিছুই নেই JUnit XML Format Specification , কেবল কারণ JUnit কোনও প্রকারের এক্সএমএল বা এইচটিএমএল প্রতিবেদন তৈরি করে না।

এক্সএমএল রিপোর্ট জেনারেশনটি এন্ট জুনিত টাস্ক / ম্যাভেন শিয়ারফায়ার প্লাগইন / গ্রেডল (আপনি যে কোনও ক্ষেত্রে আপনার পরীক্ষা চালানোর জন্য ব্যবহার করেন) থেকে আসে। এক্সএমএল রিপোর্ট ফর্ম্যাটটি প্রথমে এন্ট দ্বারা প্রবর্তিত হয়েছিল এবং পরে ম্যাভেন (এবং গ্রেডল) দ্বারা অভিযোজিত হয়েছিল।

কারও যদি কেবল একটি অফিসিয়াল এক্সএমএল ফর্ম্যাট প্রয়োজন তবে:

  1. একটি মভেন শিফায়ার -জেনারেটেড এক্সএমএল রিপোর্টের জন্য একটি স্কিমা রয়েছে এবং এটি এখানে পাওয়া যাবে: নিশ্চিত-অগ্নি-পরীক্ষা-রিপোর্ট.এক্সএসডি
  2. পিপীলিকা উত্পাদিত এক্সএমএলের জন্য এখানে একটি তৃতীয় পক্ষের স্কিমা পাওয়া যায় (তবে এটি সামান্য পুরানো হতে পারে)।

আশা করি এটি কারও সাহায্য করবে।


আপনার ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। আমি পুরানো জেনকিন্স ১.6 উদাহরণ থেকে সলকে জুনিত পরীক্ষার সংক্ষিপ্তরগুলি প্রেরণের চেষ্টা করছি - সম্ভবত আপনি সহায়তা করছেন? আমি এমন একটি এক্সএমএল ফাইলটি কোথায় রাখব?
জেজেডি

@ জেজেডি দুঃখিত, আমি আপনাকে পাই না। এই জাতীয় এক্সএমএল ফাইল বলতে আপনার অর্থ কী ? তবে আমি ধরে নিলাম আপনি ইতিমধ্যে পিপীলিকা / মাভেন / গ্রেডেল দিয়ে আপনার জুনিট পরীক্ষা চালিয়েছেন, হ্যাঁ? যদি হ্যাঁ, এই সরঞ্জামগুলি, পরীক্ষাগুলি কার্যকর করার পরে, দুর্দান্ত সারসংক্ষেপ প্রতিবেদন তৈরি করে। জেনকিন্সের সংস্করণ এখানে কিছু যায় আসে না।
জি ডেমেকি

হ্যাঁ, আমার বিল্ডটি গ্রেডল দিয়ে চলে। জেনকিন্স ১.6 ব্যবহার করার সময় আমি একটি স্ল্যাক চ্যানেলে একটি JUnit পরীক্ষার সারসংক্ষেপ পাঠাতে চাই। গিটহাবের আলোচনাটি পড়ে আমি ভেবেছিলাম স্ল্যাক প্লাগইনটিকে পরীক্ষার সারাংশ তুলে ধরতে আমাকে কোথাও একটি কনফিগারেশন এক্সএমএল ফাইল রাখতে হবে। আমি ভুল বুঝতে পারি।
জেজেডি

1
গ্রেডল আপনার JUnit পরীক্ষা চালু করার পরে সঠিকভাবে উত্পন্ন পরীক্ষার প্রতিবেদনগুলি উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন। তারপরে স্ল্যাক প্লাগইন এই প্রতিবেদনগুলি ব্যবহার করতে সক্ষম হবে।
জি ডেমেকি

1
অবশেষে, আপনার পরামর্শ আমাকে সঠিক দিকে ঠেলে দিয়েছে: এক্সএমএল ফাইলগুলি সন্ধান করার জন্য আমাকে সঠিক পথটি কনফিগার করতে হয়েছিল । আমার জন্য অ্যান্ড্রয়েড সঙ্গে প্রকল্পের একাধিক Gradle পণ্য স্বাদে , নিম্নলিখিত কাজগুলো করেনঃ **/build/test-results/**/TEST-*.xml। আপনাকে অনেক ধন্যবাদ!!!
জেজেডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.