如何在fastlane扫描中识别失败的测试用例以便重新运行?

时间:2017-02-17 01:19:40

标签: ruby junit xcodebuild fastlane

作为向我们的CI流添加XCode的UI测试的一部分,由于测试框架的一般不可靠性,我决定在构建失败之前实现重新运行失败的测试。

我可以通过使用rescue块来避免立即失败,这不是问题,并且报告文件(JUnit和HTML)的位置是固定的,因此可以打开例如File.readlines。

junit报告文件的格式是一系列测试套件 - > testsuite - >测试用例 - >失败消息(如果适用),然后退回到下一个元素。看起来很标准。

然而,在那一点上,我有点卡住了(它可能不是正确的道路;是否有一个规范的更好的方法来做到这一点?)。在bash中,我使用grep -B在失败消息之前拉出行,这将是失败的测试用例的名称,然后使用awk获取相关的文本片段。 Easy two pipe shell命令,然后我可以使用-only-testing参数反馈到scan / xcodebuild。

有没有办法在Ruby中同样轻松地做到这一点,或者是一个junit插件,除了各个失败的测试用例的名称之外什么都不会读出来?

1 个答案:

答案 0 :(得分:2)

如果有人在将来的某个时候遇到这个问题:

  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