我想使用 Sauce Labs Java REST API 将通过/失败状态发送回 Sauce Labs 仪表板。我正在使用 Geb+Spock,我的 Gradle 构建创建了一个测试结果目录,结果以 XML 格式输出。我的问题是,在Spock 规范的 cleanupSpec() 退出之前,似乎没有生成结果 XML 文件。这导致我的代码报告上一次测试运行的结果,而不是当前的。显然不是我想要的!
有什么方法可以在不依赖 XML 的情况下从 cleanupSpec() 中获取结果?或者一种让结果更早归档的方法?或者一些替代方案会比其中任何一个都好得多?
一些代码:
在build.gradle
中,我指定testResultsDir
. 这是在 Spock 规范退出后写入 XML 文件的地方:
drivers.each { driver ->
task "${driver}Test"(type: Test) {
cleanTest
systemProperty "geb.env", driver
testResultsDir = file("$buildDir/test-results/${driver}")
systemProperty "proj.test.resultsDir", testResultsDir
}
}
这是我的 LoginSpec 类中的setupSpec()
and :cleanupSpec()
class LoginSpec extends GebSpec {
@Shared def SauceREST client = new SauceREST("redactedName", "redactedKey")
@Shared def sauceJobID
@Shared def allSpecsPass = true
def setupSpec() {
sauceJobID = driver.getSessionId().toString()
}
def cleanupSpec() {
def String specResultsDir = System.getProperty("proj.test.resultsDir") ?: "./build/test-results"
def String specResultsFile = this.getClass().getName()
def String specResultsXML = "${specResultsDir}/TEST-${specResultsFile}.xml"
def testsuiteResults = new XmlSlurper().parse( new File( specResultsXML ))
// read error and failure counts from the XML
def errors = testsuiteResults.@errors.text()?.toInteger()
def failures = testsuiteResults.@failures.text()?.toInteger()
if ( (errors + failures) > 0 ) { allSpecsPass = false }
if ( allSpecsPass ) {
client.jobPassed(sauceJobID)
} else {
client.jobFailed(sauceJobID)
}
}
}
该类的其余部分包含不与 SauceLabs 交互的登录规范。当我阅读 XML 时,发现它是在上一次 LoginSpec 运行结束时编写的。我需要一种方法来获取当前运行的值。
谢谢!