Sauce Labs Java REST APIを使用して、合格/不合格のステータスをSauceLabsダッシュボードに送り返したい。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()
とです。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の実行の最後に書かれたことがわかりました。現在の実行の値を取得する方法が必要です。
ありがとう!