Я запустил свои модульные тесты, написанные с помощью google test 1.6.0 framework с флагом —gtest_output = «xml: test-results.xml», и получил файл результатов теста, например:
<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="8" failures="0" disabled="0" errors="0" time="81.396" name="AllTests">
<testsuite name="TestSuite1" tests="8" failures="0" disabled="0" errors="0" time="81.396">
<testcase name="Test1" status="run" time="6.391" classname="Class1" />
<testcase name="Test2" status="run" time="6.1" classname="Class1" />
<testcase name="Test3" status="run" time="7.146" classname="Class1" />
<testcase name="Test4" status="run" time="16.164" classname="Class1" />
<testcase name="Test5" status="run" time="25.145" classname="Class1" />
<testcase name="Test6" status="run" time="6.099" classname="Class1" />
<testcase name="Test7" status="run" time="6.162" classname="Class1" />
<testcase name="Test8" status="run" time="8.187" classname="Class1" />
</testsuite>
</testsuites>
Исходя из того, что я прочитал в других постах, вывод gtest xml должен быть совместим с анализаторами junit. Похожие сообщения: Невозможно получить hudson для анализа выходных XML-данных теста JUnit
Другая возможность ошибки в моем укушенном сценарии. Работает на Trac 0.12.2. Вот мой укушенный рецепт для разбора файла XML с использованием анализатора java: junit:
<build xmlns:java="http://bitten.edgewall.org/tools/java">
<step id="parse_results" description="Gather Results" onerror="fail">
<java:junit file="/home/user/temp/test-results.xml" />
</step>
</build>
В trac написано, что сборка прошла успешно, но результаты теста пустые. 0 прогон, 0 сбой, 0 проигнорировано, 0 ошибок
Благодарю.
Я смог решить проблему. Оказывается, что у парсера Trac JUnit есть ошибка. Ему не нравится тег testsuites и не нравится иметь несколько разделов testsuite. PHP разрешает тэг testsuites, но не будет делать несколько файлов. Я решил создать в Python парсер, который создает несколько файлов XML из выходного файла Gtest.
def move_results(results, results_dir):
# Moves all results into a temp folder to be consumed by Bitten
# Files with multiple test suite sections, split into individual files
for files in results:
fin = open(files)
test_id = 0
split_line = files.split('/')
file_name = split_line[len(split_line)-1].split('.xml')
for line in fin:
if not 'testsuites' in line:
if '<testsuite ' in line:
output_file = results_dir + file_name[0] + '-' + str(test_id) + '.xml'
test_id = test_id + 1
fout = open(output_file, 'w')
fout.write('<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n')
fout.write(line)
elif '<testsuite\\>' in line:
fout.write(line)
fout.close()
elif not '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n' in line:
fout.write(line)
fin.close()
os.remove(files)
В качестве альтернативы вы можете использовать Bitten для преобразования с использованием XSLT. Также вы можете объединить выходные файлы в один выход (с чем-то вроде вывода XUnit в носу) и использовать php:phpunit
разобрать файл.
Других решений пока нет …