我們有一個運行iOS UI測試的Jenkins作業,我需要能夠在測試運行期間根據特定運行時信息忽略一些測試(或測試類)。根據XCTestSuite文檔https://developer.apple.com/reference/xctest/xctestsuite,您可以通過編程方式創建自定義測試套件,但我還沒有找到任何實際操作的示例。那麼人們究竟如何去做呢?如何使用XCTestSuite? (Swift 3)
我已經玩了下面的代碼作爲一個起點,但並沒有真正得到任何地方。當IgnoreThisClass在Xcode中運行時,即使BaseTestClass的setUp()中的testCaseCount在套件中報告0測試,其中的測試方法也會運行。我是否需要重寫一些init()方法或者執行其他操作?任何提示將非常感謝!
import XCTest
class BaseTestClass: XCTestCase {
var runThis: Bool?
override func setUp() {
if runThis != nil {
let suite = XCTestSuite(name: "Custom suite")
if runThis! {
suite.addTest(self)
}
print("Testcases in suite \(suite.testCaseCount)")
// This causes an error that the suite has already started,
// even though this call is present in Apple's example documentation.
//suite.run()
}
XCUIApplication().launch()
}
override func tearDown() {
super.tearDown()
}
}
// Run this.
class RunThisClass: BaseTestClass {
override func setUp() {
super.runThis = true
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testThis() {
print("Test class was run.")
}
}
// Don't run this.
class IgnoreThisClass: BaseTestClass {
override func setUp() {
super.runThis = false
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testIgnoreThis() {
print("Ignored class was run.")
}
}
你可以舉一個例子,你想動態地重建你運行的測試列表嗎?你能簡單地移動特定的測試來分離測試包並有條件地運行它嗎? – Andy
例如,我們發現某些測試在運行iOS 10的設備中發生故障/行爲不同,但仍然在運行iOS 9的設備中運行,而應用程序功能本身並未發生變化。因此,爲了減少已經很長的測試運行時間,我們希望停止iOS 10設備上運行失敗的測試 - 因爲它們都是誤報 - 直到我們修復它們。我們已經有超過100多個測試,並且每天寫更多,所以如果我們可以避免的話,我們寧願不維護單獨的測試包。 – sjalv