غير قادر على الحصول على هدسون لتحليل إخراج اختبار Junit XML
-
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 ، لذلك إذا كنت تستخدم ذلك ، فهذا أمر قانوني كما ستحصل عليه.