Как проанализировать XML-файл результата JUnit и получить контрольный пример в коде Java? - PullRequest
1 голос
/ 11 апреля 2019

Реализован dymanic JUnit5 тест с использованием @TestFactory в классе Test_XyzDymanic , метод testXyzDymanicallly и пользовательский Suite.xml для добавления нескольких тестовых случаев, которые анализируются при запускевремя.

На основе случаев в Suite.xml выбираются две карты mapExpected и mapAcutal , которые сравниваются как assertIterableEquals (mapExpected.entrySet (), mapAcutal.entrySet ())

Вызов Junit с использованием Ant построения и сохранение вывода в result.xml .

ПослеВыполнение некоторых тестовых случаев не выполняется (конечно), Junit выводит на консоль только одну строку, которой недостаточно, чтобы узнать причину.Итак, имейте ReportGenerator , который генерирует файл Excel на основе более тонкого аргумента, как в тестовом примере junit.

Запрос: Для неудачного тестового примеразапустить ReportGenerator , но не знаю, как прочитать неудачные тестовые примеры из result.xml в коде Java.Предоставляет ли Junit какой-либо класс и метод синтаксического анализа для чтения result.xml в предопределенном PoJo?Или мы можем прочитать и отправить в качестве аргументов от ant?

Целевые объекты Ant:

<target name="test-dynamic" depends="test-compile" description="Run JUnit tests">
    <junit printsummary="true" haltonerror="no" haltonfailure="no" dir="${test.bin}" fork="true">
        <sysproperty key="suite" value="${suite.xml}" />
        <classpath refid="junit5.jars" />

        <test name="Test_XyzDymanic" outfile="${result}" failureproperty="test.failed">
            <formatter type="xml" />
            <formatter usefile="false" type="brief" />
        </test>
    </junit>
</target>

<target name="fail-report">
    <echo message="One or more test(s) failed. Generating faliur analysis report..." />
    <java classname="report.ReportGenerator" failonerror="no"/>
</target>

result.xml:

    ...
    <property name="sun.arch.data.model" value="32" />
  </properties>
  <testcase classname=")" name="Case: default case(testXyzDymanicallly" time="10.245">
    <failure message="iterable contents differ at index [75], expected: &lt;PropX.ShortName=NameXyz&gt; but was: &lt;PropX.ShortName=NameAbc&gt;" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: iterable contents differ at index [75], expected: &lt;PropX.ShortName=NameXyz&gt; but was: &lt;PropX.ShortName=NameAbc&gt;
    at Test_XyzDynamic.lambda$null$2(Test_XyzDynamic.java:41)
    at java.util.Optional.ifPresent(Optional.java:159)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
</failure>
  </testcase>

ReportGenerator

class ReportGenerator{
    main(String args){}
    generate(){}
  }

Пробовал:

result.xml:

<property name="sun.arch.data.model" value="32" />
  </properties>
  <testcase classname=")" name="testcase1" time="9.596" />
  <testcase classname=")" name="testcase2" time="5.702">
    <failure message="msg1" type="type1">
    desc 11111
</failure>
  </testcase>
  <testcase classname=")" name="testcase3" time="5.656">
    <failure message="msg2" type="type2">
    desc 22222
</failure>
  </testcase>
  <testcase classname="junit.framework.JUnit4TestCaseFacade" name="JUnit Vintage" time="0.003" />

Муравей:

<xmlproperty file="result.xml" keeproot="false" />
<target name="main">
    <echo>1. ${testcase}</echo>
    <echo>2. ${testcase(name)}</echo>
    <echo>3. ${testcase.failure}</echo>
    <echo>4. ${testcase.failure(type)}</echo>
    <echo>5. ${testcase.failure(message)}</echo>
</target>

вывод:

main:
     [echo] 1. ,
     [echo] 2. testcase1,testcase2,testcase3,JUnit Vintage
     [echo] 3. desc 11111,desc 22222
     [echo] 4. type1,type2
     [echo] 5. msg1,msg2

Запрос : В выводе консоли echo 2 имеет testcase1,testcase2,testcase3,JUnit Vintage, но я хочу testcase2,testcase3, потому что только у этих двух тестовых случаев есть тег сбоя согласно result.xml.

1 Ответ

0 голосов
/ 24 апреля 2019

Вместо того, чтобы пытаться прочитать xml в ant, отправить файл в основной класс в качестве аргумента и проанализировать файл, как любой другой xml, и обработать требуемые значения.

...