Создание allure отчета из готового junit xml отчета

У меня есть готовый XML в формате JUNIT

<testsuite name="Suit_network_iis" timestamp="2015-03-23T18:22:38+02:00" time="33.552854" tests="2" failures="2">
<testcase name="MD5" time="33.552854"><failure>Default: Starting Valid Auth : Starting Valid Auth : 
target.frontMostApp().mainWindow().buttons()[0].tap() : 
target.frontMostApp().mainWindow().popover().actionSheet().collectionViews()[0].cells()["stage"].buttons()["stage"].tap() : 
target.frontMostApp().mainWindow().images()[3].textFields()["e-mail"].tap() : 
target.frontMostApp().mainWindow().images()[3].textFields()["e-mail"].tap() : 
target.frontMostApp().mainWindow().images()[3].secureTextFields()["password"].tap() : 
target.frontMostApp().mainWindow().images()[3].secureTextFields()["password"].tap() : 
target.frontMostApp().mainWindow().buttons()["Sign In"].tap() Default: Alert with title 'Unable to Authorize Device' encountered! 
2015-03-23 16:23:22 +0000 logElementTree: 
UIAAlert "Unable to Authorize Device" {{249, 435}, {270, 154}} 
elements: { UIAScrollView "(null)" {{249, 435}, {270, 110}} 
elements: { UIAStaticText "Unable to Authorize Device" {{265, 455}, {238, 21}} 
UIAStaticText "The operation couldn’t be completed. (NetworkClientErrorDomain error 2.)" {{265, 477}, {238, 48}} 
UIAImage "(null)" {{249, 542}, {270, 3}} 
UIAImage "(null)" {{516, 1305}, {3, 110}} } 
UIACollectionView "(null)" {{249, 545}, {270, 44}} 
elements: { UIACollectionCell "OK" {{249, 546}, {270, 44}} 
elements: { UIAButton "OK" {{249, 546}, {270, 44}} } } } : 
target.frontMostApp().alert().buttons()[0].tap() 
Default: Adding Source Server Error: TypeError: UIAElementNil is not a function (evaluating'menuItem.waitUntilVisible(20)') 
Mar 23 18:23:32 TestJenkins.local instruments[2004] <Error>: CGImageCreateWithImageProvider: invalid image size: 344 x 344. 
2015-03-23 16:23:32 +0000 logElementTree: 
UIATarget "iPad Simulator" {{0, 0}, {768, 1024}} 
elements: { UIAApplication "TestApp" {{0, 20}, {768, 1004}} 
elements: { UIAWindow "(null)" {{0, 0}, {768, 1024}} 
elements: { UIAStaticText "https://localhost/api/client/v2/" {{4, 20}, {500, 20}} 
UIAButton "(null)" {{4, 20}, {500, 20}} 
UIAStaticText "https://localhost/api/client/v2/" {{4, 50}, {500, 20}} 
UIAButton "(null)" {{4, 50}, {500, 20}} 
UIAButton "(null)" {{44, 44}, {44, 44}} 
elements: { UIAImage "(null)" {{60, 60}, {12, 12}} } 
UIAImage "(null)" {{212, 65}, {344, 312}} 
UIAImage "(null)" {{212, 65}, {344, 312}} 
UIATableView "Empty list" {{212, 424}, {344, 0}} 
UIAButton "Continue" {{212, 424}, {344, 44}} 
UIAImage "(null)" {{212, 424}, {344, 44}} 
elements: { UIAImage "(null)" {{223, 438}, {22, 16}} } 
UIATextField "(null)" {{272, 436}, {275, 25}} 
elements: { UIATextField "(null)" {{272, 436}, {275, 25}} } 
UIAButton "Reset password" {{212, 468}, {344, 44}} 
UIAStaticText "You will get an email with password reset link. Follow the instructions in your email to proceed." {{212, 424}, {344, 88}} 
UIAButton "OK" {{212, 512}, {344, 44}} 
UIAImage "(null)" {{212, 424}, {344, 88}} 
elements: { UIAImage "(null)" {{223, 438}, {22, 16}} 
UIATextField "e-mail" {{272, 436}, {275, 25}} 
elements: 
{ UIATextField "e-mail" {{272, 436}, {275, 25}} } 
UIAImage "(null)" {{223, 482}, {22, 16}} 
UIASecureTextField "password" {{272, 480}, {275, 25}} 
elements: { UIASecureTextField "password" {{272, 480}, {275, 25}} } } 
UIAButton "Sign In" {{212, 512}, {344, 44}} 
UIAButton "Forgot password?" {{212, 581}, {344, 44}} 
UIAImage "(null)" {{212, 424}, {344, 88}} 
elements: { UIAImage "(null)" {{223, 438}, {22, 16}} 
UIAImage "(null)" {{227, 480}, {14, 20}} } 
UIASecureTextField "(null)" {{272, 436}, {275, 25}} 
elements: { UIASecureTextField "(null)" {{272, 436}, {275, 25}} } 
UIASecureTextField "(null)" {{272, 480}, {275, 25}} 
elements: { UIASecureTextField "(null)" {{272, 480}, {275, 25}} } 
UIAButton "Continue" {{212, 512}, {344, 44}} 
UIAActivityIndicator "Progress halted" {{365.5, 493.5}, {37, 37}} 
elements: { UIAImage "(null)" {{365.5, 493.5}, {37, 37}} } } 
UIAWindow "(null)" {{0, 0}, {768, 1024}} 
elements: { UIAKeyboard "(null)" {{0, 760}, {768, 264}} 
elements: { UIAKey "q" {{0, 766}, {69, 62}} UIAKey "w" {{69, 766}, {70, 62}} UIAKey "e" {{139, 766}, {69, 62}} UIAKey "r" {{208, 766}, {70, 62}} UIAKey "t" {{278, 766}, {69, 62}} UIAKey "y" {{347, 766}, {70, 62}} UIAKey "u" {{417, 766}, {69, 62}} UIAKey "i" {{486, 766}, {70, 62}} UIAKey "o" {{556, 766}, {69, 62}} UIAKey "p" {{625, 766}, {70, 62}} UIAKey "Delete" {{695, 766}, {73, 62}} UIAKey "a" {{29, 832}, {69, 60}} UIAKey "s" {{98, 832}, {69, 60}} UIAKey "d" {{167, 832}, {69, 60}} UIAKey "f" {{236, 832}, {69, 60}} UIAKey "g" {{305, 832}, {69, 60}} UIAKey "h" {{374, 832}, {69, 60}} UIAKey "j" {{443, 832}, {69, 60}} UIAKey "k" {{512, 832}, {69, 60}} UIAKey "l" {{581, 832}, {69, 60}} UIAButton "Done" {{650, 832}, {118, 60}} UIAButton "shift" {{0, 896}, {68, 60}} UIAKey "z" {{68, 896}, {68, 60}} UIAKey "x" {{136, 896}, {68, 60}} UIAKey "c" {{204, 896}, {68, 60}} UIAKey "v" {{272, 896}, {68, 60}} UIAKey "b" {{340, 896}, {68, 60}} UIAKey "n" {{408, 896}, {68, 60}} UIAKey "m" {{476, 896}, {68, 60}} UIAKey "," {{544, 896}, {68, 60}} UIAKey "." {{612, 896}, {68, 60}} UIAButton "shift" {{680, 896}, {88, 60}} UIAKey "more, numbers" {{0, 960}, {204, 60}} UIAButton "Next keyboard" {{102, 960}, {102, 60}} UIAButton "Dictate" {{136, 960}, {68, 60}} UIAKey "space" {{204, 960}, {408, 60}} UIAKey "more, numbers" {{612, 960}, {88, 60}} UIAButton "Hide keyboard" {{700, 960}, {68, 60}} } } UIAWindow "(null)" {{0, 0}, {768, 1024}} elements: { UIAStatusBar "(null)" {{0, 0}, {768, 20}} 
elements: { UIAElement "Swipe down with three fingers to reveal the notification center., Swipe up with three fingers to reveal the control center, Double-tap to scroll to top" {{6, 0}, {39, 20}} 
UIAElement "3 of 3 Wi-Fi bars" {{50, 0}, {13, 20}} 
UIAElement "6:23 PM" {{361, 0}, {47, 20}} 
UIAElement "100% battery power" {{704, 0}, {59, 20}} } } } } : 
target.captureRectOnScreenWithName("{origin:{x:0.00,y:0.00}, size:{height:1024.00,width:768.00}}", UIScreen, "MD5-fail") 
2015-03-23 16:23:32 +0000 Screenshot captured.
</failure>
</testcase>
<testcase name="MD5 many" time="0">
<failure>Default: Starting Valid Auth Instruments Trace Complete (Duration : 53.521935s; Output : /Users/user/.jenkins/jobs/UIAutoTests/workspace/Reports/instrumentscli0.trace)
</failure>
</testcase>
</testsuite>

Скармливаю все это добро allure-cli
Генерится отчет
На выходе получаю Пустой репорт.
http://joxi.ru/xAeePl4uLByGAy
Собственно что не так с XML и где лучше копать

Небольшой апдейт

TestJenkins:workspace user$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
TestJenkins:workspace user$ allure report generate Reports/ -v 1.3.9 -o /Users/user/.jenkins/jobs/UIAutoTests/workspace/allure-report --debug
Successfully generated report to [/Users/user/.jenkins/jobs/UIAutoTests/workspace/allure-report].

Возможно простой отчет не пойдет. Нужны какие то дополнения от адаптера.

Собственно что отчет не такой, я и так какбе понял . Интересует какой то типовой паттерн, который будет корректно геренировать отчет. Ну и собственно приведение к нужному виду…

Стандартные отчеты JUnit-а, Allure не понимает, нужен адаптер - JUnit · allure-framework/allure1 Wiki · GitHub

1 лайк

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

Думаю никак. Отчет для аллура генерится при взаимодействии адаптера для конкретного ЯП и Unit Test framework’а. Можно конечно руками поправить xml хе-хе, или написать свой адаптер :slight_smile: но все это полный изврат

Адаптировать твою XML-ку поl XSD-схему allure, как ты это будешь делать, решай сам.
XSD -схеама allure есть на гите.

@vania_pooh может подскажешь чего-нибудь? Есть что-то, чем можно помочь?

я так понимаю самое простое без слушаний просто взять и использовать XSLT для конвертации из одной схемы в другую .

2 лайка