ข้อกำหนดคุณลักษณะรูปแบบ JUnit XML ที่ฮัดสันสนับสนุนคืออะไร


183

ฉันมีฮัดสันเป็นเซิร์ฟเวอร์รวมอย่างต่อเนื่องและฉันต้องการใช้ตัวเลือก 'เผยแพร่รายงานผลการทดสอบ JUnit' แต่ฉันไม่ได้ใช้เครื่องมือ xUnit สำหรับการทดสอบแทนที่จะเป็นฉันมีเชลล์สคริปต์ที่รันการทดสอบและส่งคืนผลลัพธ์ในรูปแบบที่เรียบง่าย ฉันกำลังคิดที่จะสร้างสคริปต์ที่แปลงผลลัพธ์เหล่านี้เป็นรูปแบบ JUnit ดังนั้นฉันจึงน่าสนใจว่าไฟล์ JUnit ต้องมีลักษณะอย่างไร


มีเหตุผลใดที่จะไม่ใช้ JUnit? การทดสอบเหล่านี้สามารถทำงานอัตโนมัติในแฟชั่นที่หลากหลายผ่านเครื่องมือ cmd, UI และอื่น ๆ ...
Aaron McIver

6
@AaronMcIver: สคริปต์ของสคริปค่อนข้างดีในการรันการทดสอบ (ภาษาที่ไม่ใช่ Java) คุณจะใช้ JUnit ในการทำสิ่งนั้นอย่างไร
Ben Voigt

1
@ BenVoigt ตอนแรกฉันคิดว่า OP มี Java เข้ามาเกี่ยวข้องและกำลังมองข้าม JUnit ในฐานะผู้ควบคุมการทดสอบ นี่ไม่ใช่กรณีหลังจากตรวจสอบคำถาม ดูเหมือนว่าcode.google.com/p/shell2junitอาจให้การใช้งานบางอย่างกับ OP หลังจากการค้นหาครั้งที่สอง
Aaron McIver

1
ตามบรรทัดของ shell2unit นี่คือคลาส JAXB ที่ฉันสร้างขึ้นซึ่งสามารถแยก / แสดงผล JUnit XML: gist.github.com/agentgt/8583649
Adam Gent

คำตอบ:


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>

คำถามนี้มีคำตอบพร้อมรายละเอียดเพิ่มเติม: Spec สำหรับเอาต์พุต JUnit XML


โปรดแก้ไขคำตอบนี้เนื่องจากปลั๊กอิน xunit ปฏิเสธแอตทริบิวต์ 'classname' และยอมรับเฉพาะ 'คลาส'
andho

10
ฉันมีปัญหาตรงข้าม classถูกปฏิเสธและใช้classnameงานได้เท่านั้น
ryanbrainard

1
สิ่งนี้เริ่มต้นล้มเหลวสำหรับฉันเมื่อฉันอัพเกรดปลั๊กอิน xUnit เป็น 1.60 ฉันพบว่าตัวตรวจสอบความถูกต้องเข้มงวดขึ้นและฉันต้องเพิ่ม<testsuite tests="(number of tests)">อดีต <testsuite tests="10">.
Kevin Brotcke

2
ขอบคุณ @KevinBrotcke ฉันจะอัปเดตคำตอบเพื่อรวมแอตทริบิวต์นั้น
Anders Lindahl

2
นอกจากนี้โปรดทราบว่าหากต้องการให้ฮัดสันจัดระเบียบการทดสอบของคุณตามแพ็คเกจ / ชุดคุณจะต้องระบุแพ็คเกจในแอตทริบิวต์ classname เช่น<testcase classname="foo.bar" name="ATest" /> นี้จะทำให้คลาสบาร์อยู่ในแพคเกจ foo บน Jenkins ซึ่งทำให้ชุดทดสอบของคุณเป็นระเบียบมากขึ้น
jluzwick

90

ฉันเพิ่งคว้าjunit-4.xsdที่ผู้อื่นเชื่อมโยงและใช้เครื่องมือชื่อXMLSpearเพื่อแปลง schema เป็นไฟล์ XML เปล่าด้วยตัวเลือกที่แสดงด้านล่าง นี่คือผลลัพธ์ (ทำความสะอาดขึ้นเล็กน้อย):

<?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องค์ประกอบเท่านั้นเนื่องจากเป็นวิธีการทำงานของ XML แต่อาจมีtestsuiteองค์ประกอบหลายรายการภายในtestsuitesองค์ประกอบ
  • แต่ละpropertiesองค์ประกอบสามารถมีpropertyลูกได้หลายคน
  • แต่ละtestsuiteองค์ประกอบสามารถมีtestcaseลูกได้หลายคน
  • แต่ละtestcaseองค์ประกอบสามารถมีหลายerror, failure, system-outหรือsystem-errเด็ก

ตัวเลือก XMLSpear


1
มีเอกสารที่อธิบายถึงค่าที่ถูกต้องของคุณลักษณะบางอย่างเช่นสถานะของ testcase หรือชนิดของข้อผิดพลาดหรือไม่?
Eric Cope

1
@EricCope ฉันจะแนะนำให้ดูที่ซอร์สโค้ดsvn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/... โดยทั่วไปมันเป็นเพียงแค่สตริง
Sulthan

4
เหตุใดแท็กจึงซ้ำซ้อน
Nakilon

การตั้งค่าการสะท้อน: imgur.com/quneFJf Alt: Rootelement: testsuites, Max recursive de...: 2, Max Repeat factor: 2, include optional elements: (ใช่ = ticked) include optional attributes: (ใช่ = ticked)
n611x007

1
@Nakilon มันสาย 2.5 ปีแล้ว แต่ฉันซ่อมมัน
bdesham

45

คำตอบด้านบนของคำถามAnders Lindahlหมายถึงไฟล์ xsd

โดยส่วนตัวแล้วฉันพบว่าไฟล์ xsdนี้มีประโยชน์มาก (ฉันจำไม่ได้ว่าฉันเจอไฟล์นั้น) มันดูข่มขู่น้อยลงและเท่าที่ฉันใช้มันองค์ประกอบและคุณสมบัติทั้งหมดดูเหมือนจะเป็นที่รู้จักโดยเจนกินส์ (v1.451)

สิ่งหนึ่งที่แม้ว่า: เมื่อเพิ่ม<failure ...องค์ประกอบหลายรายการเพียงคนเดียวเท่านั้นที่ถูกเก็บไว้ในเจนกินส์ เมื่อสร้างไฟล์ xml ตอนนี้ฉันเชื่อมความล้มเหลวทั้งหมดไว้ในที่เดียว


อัปเดต 2016-11ลิงก์เสียในขณะนี้ ทางเลือกที่ดีกว่าคือหน้านี้จาก cubic.org: รูปแบบไฟล์การรายงาน JUnit XMLซึ่งมีความพยายามอย่างดีในการจัดทำตัวอย่างเอกสารที่สมเหตุสมผล ตัวอย่างและ xsd จะถูกคัดลอกด้านล่าง แต่หน้าของพวกเขาดูเหมือน waay nicer


ตัวอย่างไฟล์ 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>

คุณจะล้มเหลวในการดูดีได้อย่างไร ฉันต้องการเพิ่มอักขระบรรทัดใหม่ด้วยตนเอง แต่อักขระเหล่านั้นจะไม่ปรากฏใน Jenkins
rationalcoder

นั่นเป็นข้อเสียของวิธีการของฉัน ฉันจำได้ว่าต้องดิ้นรนกับสิ่งนั้นด้วย ลองเพิ่มสิ่งที่ต้องการ & lt; br / & gt; - ฉันลืมวิธีการแก้ไขนี้ (และเราไม่ได้ใช้อีกต่อไป) แต่ดูเหมือนว่าสิ่งที่ควรลอง
parvus

1
ฉันพบวิธีแก้ไข เนื่องจากเราใช้ c ++ ฉันแค่รายงานจำนวนความล้มเหลวในข้อความความล้มเหลวและใช้ "การติดตามสแต็ค" เพื่อรายงานความล้มเหลวที่เกิดขึ้นจริง เนื่องจากการติดตามสแต็กถูกรายงานจากข้อความที่มีเนื้อความขององค์ประกอบความล้มเหลวจึงสนับสนุนบรรทัดใหม่อย่างถูกต้อง
rationalcoder

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>

(ฉันเริ่มต้นด้วยเอกสาร XML ตัวอย่างนี้และย้อนกลับจากที่นั่น)


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 ชุดขึ้นไปและแต่ละกรณีทดสอบจะมีโหนดที่ข้ามความล้มเหลวหรือข้อผิดพลาดหากการทดสอบไม่ผ่าน หากกรณีทดสอบผ่านไปแล้วจะไม่มีโหนดใด ๆ สำหรับรายละเอียดเพิ่มเติมของคุณลักษณะที่ถูกต้องสำหรับแต่ละโหนดโปรดศึกษาหัวข้อ "สคีมา" ต่อไปนี้

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

โปรดทราบว่ามีสคีมาหลายเวอร์ชันที่ใช้งานโดย Jenkins xunit-plugin (เวอร์ชันล่าสุดปัจจุบันคือjunit-10.xsdซึ่งเพิ่มการรองรับรูปแบบ Erlang / OTP Junit)

เฟรมเวิร์กการทดสอบบางอย่างรวมถึง "xUnit" - ปลั๊กอินรายงานสไตล์ยังใช้ซอสลับของตัวเองเพื่อสร้างรายงานสไตล์ "xUnit" ซึ่งอาจไม่ใช้สคีมาเฉพาะ (โปรดอ่าน: พวกเขาพยายามทำ แต่เครื่องมืออาจไม่ผ่านการตรวจสอบใด ๆ หนึ่งสคีมา) งูหลาม unittests ในเจนกินส์? ให้การเปรียบเทียบอย่างรวดเร็วของหลาย ๆ ไลบรารีเหล่านี้และความแตกต่างเล็กน้อยระหว่างรายงาน xml ที่สร้างขึ้น


2

คำตอบที่ดีเกี่ยวกับการใช้ python: (มีหลายวิธีที่จะทำ) Python unittests ใน Jenkins?

IMHO วิธีที่ดีที่สุดคือเขียนการทดสอบpitt unittestและติดตั้ง pytest (เช่น 'yum install pytest') เพื่อติดตั้ง py.test จากนั้นเรียกใช้การทดสอบเช่นนี้ 'py.test --junitxml results.xml test.py' คุณสามารถเรียกใช้สคริปต์หลาม unittest ใด ๆ และได้รับผลลัพธ์ jUnit xml

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

ใน jenkins build configuration การดำเนินการหลังการสร้างเพิ่มการดำเนินการ "เผยแพร่รายงานผลการทดสอบ JUnit" ด้วย result.xml และไฟล์ผลการทดสอบอื่น ๆ ที่คุณสร้างขึ้น


2

ฉันตัดสินใจที่จะโพสต์คำตอบใหม่เนื่องจากคำตอบที่มีอยู่นั้นล้าสมัยหรือไม่สมบูรณ์

ก่อนอื่น: ไม่มีอะไรที่เหมือนกับJUnit XML Format SpecificationJUnit ไม่ได้สร้างรายงาน XML หรือ HTML ทุกประเภท

การสร้างรายงาน XML นั้นมาจากงาน Ant JUnit / Maven Surefire Plugin / Gradle (แล้วแต่ว่าคุณจะใช้งานชุดใดในการทดสอบ) รูปแบบรายงาน XML ถูกนำมาใช้เป็นครั้งแรกโดย Ant และดัดแปลงในภายหลังโดย Maven (และ Gradle)

หากมีคนต้องการรูปแบบ XML อย่างเป็นทางการแล้ว:

  1. มีสคีสำหรับรายงาน XML Maven แหงสร้างที่มีอยู่และสามารถพบได้ที่นี่: แหง-ทดสอบ report.xsd
  2. สำหรับ XML ที่สร้างโดย ant จะมี schema ของบุคคลที่สามอยู่ที่นี่ (แต่มันอาจจะล้าสมัยเล็กน้อย)

หวังว่ามันจะช่วยใครซักคน


ขอบคุณสำหรับคำชี้แจงของคุณ ฉันกำลังพยายามส่งบทสรุปการทดสอบ JUnit จากอินสแตนซ์ Jenkins 1.6 เก่าแก่ Slackบางทีคุณอาจช่วยได้ ฉันจะวางไฟล์ XML ที่ใด
JJD

@JJD ขออภัยฉันไม่ได้รับคุณ คุณหมายถึงไฟล์ XML อย่างนั้นจริงๆ แต่ฉันคิดว่าคุณได้ทำการทดสอบ JUnit ด้วย ant / maven / gradle แล้วใช่ไหม ถ้าใช่เครื่องมือเหล่านี้หลังจากการทดสอบการทำงานให้สร้างรายงานสรุปที่ดี รุ่นของเจนกินส์ไม่สำคัญที่นี่
G. Demecki

ใช่งานสร้างของฉันทำงานผ่าน Gradle ฉันต้องการส่งสรุปการทดสอบ JUnit ไปยังแชนเนล Slack ขณะใช้ Jenkins 1.6 การอ่านการอภิปรายของ GitHub ฉันคิดว่าฉันต้องวางไฟล์ XML การกำหนดค่าไว้ที่ไหนสักแห่งเพื่อให้ปลั๊กอิน Slack รับการสรุปการทดสอบ บางทีฉันอาจเข้าใจผิด
JJD

1
โปรดตรวจสอบว่ามีรายงานการทดสอบที่สร้างขึ้นอย่างถูกต้องหลังจากที่ Gradle เสร็จสิ้นการเรียกใช้การทดสอบ JUnit ของคุณ จากนั้นปลั๊กอิน Slack ควรจะสามารถใช้รายงานเหล่านี้ได้
G. Demecki

1
สุดท้ายคำแนะนำของคุณผลักฉันเข้าไปในทิศทางที่ถูกต้อง: ผมมีการกำหนดค่าที่ถูกต้องเส้นทางที่จะมองหาไฟล์ของ XML สำหรับฉันAndroidโครงการที่มีหลายรสชาติ Gradle สินค้า**/build/test-results/**/TEST-*.xmlงานดังต่อไปนี้: ขอบคุณมาก!!!
JJD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.