由於Xcode 7我們有一個很好的用於UI測試的API。我大多對此感到滿意。唯一的問題與速度有關。如何加快Xcode中的UI測試用例?
開始時,一個普通的UI測試用例(約15個動作)大約跑了25秒。然後我完全嘲笑網絡。現在需要20秒。考慮到時間只能通過動畫和發射時間(1秒或更少)來實現,我認爲,必須有一種方法來加速它。
由於Xcode 7我們有一個很好的用於UI測試的API。我大多對此感到滿意。唯一的問題與速度有關。如何加快Xcode中的UI測試用例?
開始時,一個普通的UI測試用例(約15個動作)大約跑了25秒。然後我完全嘲笑網絡。現在需要20秒。考慮到時間只能通過動畫和發射時間(1秒或更少)來實現,我認爲,必須有一種方法來加速它。
嘗試設置該屬性,當你的UI測試運行:
UIApplication.shared.keyWindow?.layer.speed = 100
我是這樣設置的:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if ProcessInfo.processInfo.arguments.contains("UITests") {
UIApplication.shared.keyWindow?.layer.speed = 100
}
}
而且在我的UI測試:
class MyAppUITests: XCTestCase {
// MARK: - SetUp/TearDown
override func setUp() {
super.setUp()
let app = XCUIApplication()
app.launchArguments = ["UITests"]
app.launch()
}
}
那裏有幾個在這blog post更方便的提示。
另一種可能性是在所有禁用動畫:
[UIView setAnimationsEnabled:NO];
這真棒!非常感謝你的分享。我的測試套件現在以光速運行。 –
您不應該完全禁用動畫,因爲您可能無法捕捉到與動畫特別關聯的一些錯誤。查看[偉大的博客](https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed)發佈更多信息。 –
繼@馬克回答,斯威夫特3版本:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if ProcessInfo.processInfo.arguments.contains("UITests") {
UIApplication.shared.keyWindow?.layer.speed = 200
}
}
在你的UI測試文件:
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
let app = XCUIApplication()
app.launchArguments = ["UITests"]
app.launch()
將其添加到didFinishLaunch
[UIApplication sharedApplication].keyWindow.layer.speed = 2;
默認值是1,將其設爲2使其速度加倍。
你能解釋爲什麼你的解決方案比別人更好? –
感謝您的回答。有用!爲了改進它:有可能從UI測試過程中增加動畫速度嗎? –
沒有不幸的。 ui測試過程旨在完全獨立於您的應用程序(並且只通過可訪問性和啓動參數進行交互)。 – Mark
@ArtemStepanenko您可以使用[SBTUITestTunnel](https://github.com/Subito-it/SBTUITestTunnel)從UI測試過程中提高動畫速度。我們開發了這個庫,以實現應用和測試目標之間的互通。 –