Go JUnit
🐜 用于接收JUnit XML报告的Go库
安装
你可以通过运行以下程序来获取这个库
go get -u github.com/joshdk/go-junit
使用方法
数据摄取
这个库有一些方便的摄取方法。
其中最简单的是解析原始的JUnit XML数据:
xml := []byte(`
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="JUnitXmlReporter" errors="0" tests="0" failures="0" time="0" timestamp="2013-05-24T10:23:58" />
<testsuite name="JUnitXmlReporter.constructor" errors="0" skipped="1" tests="3" failures="1" time="0.006" timestamp="2013-05-24T10:23:58">
<properties>
<property name="java.vendor" value="Sun Microsystems Inc." />
<property name="compiler.debug" value="on" />
<property name="project.jdk.classpath" value="jdk.classpath.1.6" />
</properties>
<testcase classname="JUnitXmlReporter.constructor" name="should default path to an empty string" time="0.006">
<failure message="test failure">Assertion failed</failure>
</testcase>
<testcase classname="JUnitXmlReporter.constructor" name="should default consolidate to true" time="0">
<skipped />
</testcase>
<testcase classname="JUnitXmlReporter.constructor" name="should default useDotNotation to true" time="0" />
</testsuite>
</testsuites>
`)
suites, err := junit.Ingest(xml)
if err != nil {
log.Fatalf("failed to ingest JUnit xml %v", err)
}
然后你可以检查摄取的套件的内容:
for _, suite := range suites {
fmt.Println(suite.Name)
for _, test := range suite.Tests {
fmt.Printf(" %s\n", test.Name)
if test.Error != nil {
fmt.Printf(" %s: %s\n", test.Status, test.Error.Error())
} else {
fmt.Printf(" %s\n", test.Status)
}
}
}
并观察一些像这样的输出:
JUnitXmlReporter
JUnitXmlReporter.constructor
should default path to an empty string
failed: Assertion failed
should default consolidate to true
skipped
should default useDotNotation to true
passed
更多的例子
此外,你可以摄取整个文件:
suites, err := junit.IngestFile("test-reports/report.xml")
if err != nil {
log.Fatalf("failed to ingest JUnit xml %v", err)
}
或多个文件的列表:
suites, err := junit.IngestFiles([]string{
"test-reports/report-1.xml",
"test-reports/report-2.xml",
})
if err != nil {
log.Fatalf("failed to ingest JUnit xml %v", err)
}
或一个目录内的任何.xml 文件:
suites, err := junit.IngestDir("test-reports/")
if err != nil {
log.Fatalf("failed to ingest JUnit xml %v", err)
}
数据格式
由于生成JUnit XML文件的软件缺乏实施的一致性,这个库需要采取比较宽松的方法来摄取。因此,许多不同的可能的JUnit格式可以很容易地被摄取。
一个顶层的testsuite 标签,包含多个testcase 实例:
<testsuite>
<testcase name="Test case 1" />
<testcase name="Test case 2" />
</testsuite>
一个顶层的testsuites 标签,包含多个testsuite 实例:
<testsuites>
<testsuite>
<testcase name="Test case 1" />
<testcase name="Test case 2" />
</testsuite>
</testsuites>
(尽管在技术上不是有效的XML)多个顶层的testsuite 标签,包含多个testcase 实例:
<testsuite>
<testcase name="Test case 1" />
<testcase name="Test case 2" />
</testsuite>
<testsuite>
<testcase name="Test case 3" />
<testcase name="Test case 4" />
</testsuite>
在所有情况下,省略(甚至重复)XML声明标签是允许的:
<?xml version="1.0" encoding="UTF-8"?>