2017-02-17 35 views
0

作爲向我們的CI流中添加XCode的UI測試的一部分,我決定在構建失敗之前實現重新運行失敗的測試,這是由於測試框架的一般不可靠性。如何在fastlane掃描中識別失敗的測試用例以重新運行?

我可以避免使用rescue塊立即生成失敗,這不是問題,報告文件(JUnit和HTML)的位置是固定的,因此可以使用File.readlines打開。

junit報告文件的格式是級聯的testsuites - > testsuite - > testcase - >失敗消息(如果適用),然後退出足夠遠的下一個元素。看起來很標準。

但是,在那一點上,我有點卡住了(它可能不是正確的道路,是否有一個更好的方法來做到這一點呢?)。在bash中,我將使用grep -B在失敗消息之前提取行,這將是失敗的測試用例的名稱,然後使用awk獲取相關的文本片段。簡單的兩個管道shell命令,然後我可以使用-only-testing參數反饋到scan/xcodebuild。

有沒有一種方法可以在Ruby中實現同等的簡單性,或者是一個junit插件,它可以讓我讀出除了單個失敗測試用例的名稱之外的任何東西?

回答

1

萬一有人運行到這個問題,在將來某個時候:

def parse_ui_test_report 
doc = File.open("#{REPORT_LOCATION}/report.junit") { |f| Nokogiri::XML(f) } 
node_tree = doc.css('testcase') 
test_identifiers_to_rerun = node_tree.map do |node| 
    # Test case nodes in the JUNIT XML doc don't have children unless they failed 
    if node.first_element_child 
    node.values.join('/').gsub('.','/') 
    end 
end.select {|str| !str.nil? && !str.empty? } 

return test_identifiers_to_rerun 
end 
相關問題