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

标签 ruby xml jenkins

我被分配了一项与 Ruby 相关的任务,但由于我是新手,所以我正在互联网上搜索合适的解决方案来解决它:

  1. 我有一个网页中的日志文件报告列表,实际上分为通过或失败。
  2. 我需要获取日志文件并将其转换为与 Jenkins Junit XML 文件格式兼容的格式。
  3. 一切,从日志到 XML 的 channel 都必须用 Ruby 编写。

有什么想法吗?!

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

是否有任何 Ruby 库可以让这变得更容易? 有人处理过类似的事情吗?

最佳答案

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

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

系统日志文件的结构通常相当良好,至少前几个字段是这样,后面是自由格式的文本,它是各种命令的输出。 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>

关于ruby - 如何将测试报告日志文件转换为 Jenkins Junit XML 文件格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862554/

相关文章:

ruby - 在 heroku : `cannot find Chrome binary` 上使用 chrome 驱动程序运行 selenium

java - 不转义 Spring WS SOAP 主体中的字符

continuous-integration - 在 Jenkins 中归档工件

jenkins - 使用 job-dsl/pipeline 语法的多个 cron 表达式

ruby-on-rails - 对这些类型的字符串进行排序的最佳方法是什么?

mysql - 数据库中删除了尖括号 (<>) 之间的字符?

python - xml:从 iterparse 元素获取父属性

android - 我怎样才能在android中为textview实现这个自定义形状?

git - Jenkins - Git Publisher - 无法推送标签

ruby-on-rails - 从表单值 ruby​​ on rails 更新模型数据