غير قادر على الحصول على هدسون لتحليل إخراج اختبار Junit XML

StackOverflow https://stackoverflow.com/questions/428553

  •  06-07-2019
  •  | 
  •  

سؤال

تعديل: تم إصلاح هذه المشكلة بواسطة Google في GTEST 1.4.0 ؛ انظر تقرير الأخطاء الأصلية للمزيد من المعلومات.

لقد تحولت مؤخرًا إلى GTEST لإطار اختبار C ++ الخاص بي ، وميزات واحدة رائعة لا يمكنني استخدامها حاليًا هي القدرة على توليد تقارير اختبار XML على غرار Junit ، والتي يمكن بعد ذلك قراءتها بواسطة خادم Build Hudson الخاص بنا.

يبدو إخراج XML الذي تم إنشاؤه بواسطة GTEST Test Suite كله شرعيًا:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
...etc.
    </testsuite>
</testsuite>

لقد حاولت أيضًا إضافة مهمة JunitReport إلى نص Build الخاص بي ، والذي يعمل بشكل جيد ، ويولد XML مثل ذلك:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
    ...etc.
    </testsuite>
 </testsuite>

المشكلة هي ، كلما أخبرت ANT بنشر نتائج اختبار JUNIT ، ثم قم بإشارةها إما إلى نتيجة اختبار RAW XML ، أو النتيجة التي تم تجميعها الناتجة في مهمة ANT JUNTREPORT ، يشكو هدسون دائمًا من العثور على عدم وجود نتائج اختبار هناك.

أنا لست رجل Java ، لذلك لا يمكنني معرفة ما يجري هنا ، ولا يمكنني العثور على مثال على كيف يجب أن يبدو Junit XML. هل يمكن لأحد أن يساعدني في توجيهي في الاتجاه الصحيح؟

هل كانت مفيدة؟

المحلول 2

يحرر: قام اختبار Google بإصلاح هذه المشكلة ، والتي تم تضمينها في إصدار GTEST 1.4.0. انظر تقرير الأخطاء الأصلية لمزيد من المعلومات.

باه! لقد وجدت أخيرًا سبب هذه المشكلة - لأن GTEST تنتج ملف XML عملاق واحد لجميع نتائج الاختبار ، ويتوقع Hudson تقرير اختبار XML واحد لكل فصل. لقد كتبت البرنامج النصي ببيرل باعتباره حلًا عن هذه المسألة. لاستخدامه ، ستقوم بتحقيق هدف في البرنامج النصي لـ ANT XML الذي يشبه هذا:

<target name="runtests">
  <exec executable="wherever/${ant.project.name}Test" failonerror="false" dir="tests">
    <arg value="--gtest_output=xml:${build.dir}\reports\${ant.project.name}.xml"/>
  </exec>
  <!-- Workaround for broken gtest output -->
  <mkdir dir="${build.dir}/reports/output"/>
  <exec executable="perl" failonerror="false" dir="tests">
  <arg value="gtest-hudson.pl"/>
    <arg value="${build.dir}/reports/${ant.project.name}.xml"/>
    <arg value="${build.dir}/reports/output"/>
  </exec>
</target>

لسبب ما ، لا يحب GTEST أيضًا النمط الخاطئ المتمثل في تمريره من ANT ، لذلك صنعت EXEC for Windows فقط ، لأن Hudson يعمل على خادم Windows. التغيير إلى "/" لليونكس ، من الواضح.

أنا أيضا قدم مشكلة لهذا على صفحة GTEST, وأيضا واحد على متتبع عدد هدسون, ، لذلك نأمل أن يلتقط أحد الفريقين هذه المشكلة ، حيث ليس لدي ما يكفي من الوقت للقفز وصنع تصحيحًا بنفسي .... على الرغم من أنه لم يتم إصلاح هذا في المستقبل القريب ، فقد أكون قد تم إصلاحه فقط يجب أن. ؛)

نصائح أخرى

إليك كيف أفعل ذلك:

    <target name="junit" depends="compile-tests" description="run all unit tests">
      <mkdir dir="${reports}"/>
      <junit haltonfailure="false">
         <jvmarg value="-Xms128m"/>
         <jvmarg value="-Xmx128m"/>
         <classpath>
            <path refid="project.classpath"/>
         </classpath>
         <formatter type="xml"/>
         <batchtest fork="yes" todir="${reports}">
            <fileset dir="${test}/classes">
                <include name="**/*Test*.class"/>
            </fileset>
         </batchtest>
      </junit>
  </target>

  <target name="generate-reports" depends="junit" description="create JUnit test HTML reports">
      <mkdir dir="${reports}"/>
      <junitreport todir="${reports}">
          <fileset dir="${reports}">
              <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="${reports}"/>
      </junitreport>
  </target>

أنا متأكد تقريبًا من أن هذه ليست مشكلة في تحليل XML بل مشكلة في العثور على ملفات XML. إذا كنت تستخدم مسارًا نسبيًا في تكوين Hudson ، فتأكد من أنك واضح أي دليل يتعلق (يبدو أنني أتذكر أنه غير واضحة في ظل ظروف معينة).

أما بالنسبة لأمثلة على ما من المفترض أن تبدو عليه ملفات Junit XML ، حظًا سعيدًا في ذلك. لم يتم تحديده بدقة في أي مكان. الأدوات المختلفة لها لهجات مختلفة. ومع ذلك ، يقوم هدسون بعمل جيد في الاعتراف بهم جميعًا. أعتقد أن مطوري JunitReport الذين قدموا لأول مرة تنسيق XML ، لذلك إذا كنت تستخدم ذلك ، فهذا أمر قانوني كما ستحصل عليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top