2016-05-17 84 views
13

由於Xcode 7我們有一個很好的用於UI測試的API。我大多對此感到滿意。唯一的問題與速度有關。如何加快Xcode中的UI測試用例?

開始時,一個普通的UI測試用例(約15個動作)大約跑了25秒。然後我完全嘲笑網絡。現在需要20秒。考慮到時間只能通過動畫和發射時間(1秒或更少)來實現,我認爲,必須有一種方法來加速它。

回答

14

嘗試設置該屬性,當你的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更方便的提示。

+0

感謝您的回答。有用!爲了改進它:有可能從UI測試過程中增加動畫速度嗎? –

+0

沒有不幸的。 ui測試過程旨在完全獨立於您的應用程序(並且只通過可訪問性和啓動參數進行交互)。 – Mark

+1

@ArtemStepanenko您可以使用[SBTUITestTunnel](https://github.com/Subito-it/SBTUITestTunnel)從UI測試過程中提高動畫速度。我們開發了這個庫,以實現應用和測試目標之間的互通。 –

3

另一種可能性是在所有禁用動畫:

[UIView setAnimationsEnabled:NO]; 
+1

這真棒!非常感謝你的分享。我的測試套件現在以光速運行。 –

+4

您不應該完全禁用動畫,因爲您可能無法捕捉到與動畫特別關聯的一些錯誤。查看[偉大的博客](https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed)發佈更多信息。 –

3

繼@馬克回答,斯威夫特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() 
1

將其添加到didFinishLaunch

[UIApplication sharedApplication].keyWindow.layer.speed = 2; 

默認值是1,將其設爲2使其速度加倍。

+1

你能解釋爲什麼你的解決方案比別人更好? –