如何将测试报告日志文件转换为Jenkins Junit XML文件格式?

时间:2012-12-13 15:00:57

标签: ruby xml jenkins

我已被分配了一项与Ruby有关的任务,但由于我是新手,我正在互联网上寻找解决问题的正确解决方案:

  1. 我在网页中有一个日志文件列表实际划分为已通过或失败。
  2. 我需要获取日志文件并将其转换为与Jenkins Junit XML文件格式兼容的格式。
  3. 一切,从日志到XML的过程都必须用Ruby编写。
  4. 有什么想法吗?!

    我浏览了整个互联网并找到了相关信息,但仍然没有明确的想法如何解决这个问题。

    是否有任何Ruby库可以让这更容易? 有没有人曾经处理过这样的事情?

2 个答案:

答案 0 :(得分:1)

您没有显示所需的格式,我不知道Jenkins需要什么,但创建XML很容易。不幸的是,你想要的东西会拿一本书或几篇文章,这超出了Stack Overflow的范围。基本上虽然......

您可以使用模板系统,例如ERB,您可以在其中为整个XML文档创建模板,或Nokogiri::Builder可用于生成XML,或者您可以在旧学校使用简单的字符串用于创建XML的插值。

syslog文件通常结构合理,至少对于前几个字段,后面是自由格式文本,这是各种命令的输出。来自Apache的日志文件类似,包含文本列,后跟一些自由格式但易于解析的文本。这里和那里都有宝石,以及如何解析日志的教程,所以搜索一下,你会找到一些东西。我们的想法是,您希望将每行读入分解为可分配给XML节点的文本。

获得字段后,可以将它们替换为模板,或者让Ruby将变量插入字符串,或使用Builder在标记之间添加文本。

这不是很难,但是要完成几项小任务。

使用字符串插值,如果你想要XML:

<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>

你可以创建它:

var1 = "some text"
var2 = "some more text"
xml = %Q{
<xml>
  <tag1>
    <tag2>#{var1}</tag2>
    <tag2>#{var2}</tag2>
  </tag1>
</xml>
}
puts xml

同样,如果你想使用ERB:

require 'erb'

var1 = "some text"
var2 = "some more text"

template = ERB.new <<-EOF
<xml>
  <tag1>
    <tag2><%= var1 %></tag2>
    <tag2><%= var2 %></tag2>
  </tag1>
</xml>
EOF
puts template.result(binding)

哪个输出:

<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>

或者,使用Nokogiri :: Builder:

require 'nokogiri'

var1 = "some text"
var2 = "some more text"
builder = Nokogiri::XML::Builder.new do |node|
  node.xml {
    node.tag1 {
      [var1, var2].each do |t|
        node.tag2(t)
      end
    }
  }
end
puts builder.to_xml

哪个输出:

<?xml version="1.0"?>
<xml>
  <tag1>
    <tag2>some text</tag2>
    <tag2>some more text</tag2>
  </tag1>
</xml>

答案 1 :(得分:1)

在此链接下,有一个小解释可能有所帮助 https://pzolee.blogs.balabit.com/2012/11/jenkins-vs-junit-xml-format/

基本上你只需使用https://wiki.jenkins-ci.org/display/JENKINS/xUnit+Plugin 导入遵循Junit架构的XML。您可以将XML转换为具有这些方案的Junit格式。 有关Junit格式的详细说明,请参阅:llg.cubic.org/docs/junit /