2016-05-17 18 views
13

Seit Xcode 7 haben wir eine nette API für UI-Tests. Meistens bin ich zufrieden damit. Die einzige Sorge betrifft die Geschwindigkeit.Wie beschleunigt man UI-Testfälle in Xcode?

Am Anfang lief ein gewöhnlicher UI-Testfall (ungefähr 15 Aktionen) ungefähr 25 Sekunden. Dann habe ich mich über Netzwerke lustig gemacht. Jetzt dauert es 20 Sekunden. Angesichts der Tatsache, dass die Zeit nur von Animationen und einer Startzeit (1 Sekunde oder weniger) eingenommen wird, nehme ich an, dass es einen Weg geben muss, um es zu beschleunigen.

Antwort

14

Versuchen Sie, diese Eigenschaft festlegen, wenn der UI Tests ausführen:

UIApplication.shared.keyWindow?.layer.speed = 100 

Hier ist, wie ich es gesetzt:

func application(_ application: UIApplication, 
       didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if ProcessInfo.processInfo.arguments.contains("UITests") { 
     UIApplication.shared.keyWindow?.layer.speed = 100 
    } 
} 

Und in meinem UI-Tests:

class MyAppUITests: XCTestCase { 

    // MARK: - SetUp/TearDown 

    override func setUp() { 
     super.setUp() 

     let app = XCUIApplication() 
     app.launchArguments = ["UITests"] 
     app.launch() 
    } 
} 

Es gibt ein paar mehr praktische Tipps in diesem blog post.

+0

Danke für die Antwort. Es klappt! Um es etwas zu verbessern: Ist es möglich, die Animationsgeschwindigkeit aus dem UI-Testprozess zu erhöhen? –

+0

Nein leider. Der UI-Testprozess soll vollständig von Ihrer App getrennt sein (und nur über die Barrierefreiheit und die Startargumente interagieren). – Mark

+1

@ArtemStepanenko Sie können die Animationsgeschwindigkeit vom UI-Testprozess erhöhen, indem Sie [SBTUITestTunnel] (https://github.com/Subito-it/SBTUITestTunnel) verwenden. Wir haben diese Bibliothek entwickelt, um die Kommunikation zwischen App und Testziel zu ermöglichen. –

3

Eine andere Möglichkeit ist Animationen überhaupt zu deaktivieren:

[UIView setAnimationsEnabled:NO]; 
+1

Das ist großartig! Vielen Dank für das Teilen. Meine Testsuite läuft jetzt mit Lichtgeschwindigkeit. –

+4

Sie sollten Animationen nicht vollständig deaktivieren, da Sie möglicherweise einige speziell mit Animationen verknüpfte Fehler nicht erfassen können. Überprüfen Sie diesen [tollen Blog] (https://pspdfkit.com/blog/2016/running-ui-tests-with-ludricrous-speed) Post für weitere Informationen. –

3

Nach @ Mark Antwort, die Swift 3 Version:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if ProcessInfo.processInfo.arguments.contains("UITests") { 
     UIApplication.shared.keyWindow?.layer.speed = 200 
    } 
} 

Auf Sie ui Testdatei:

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

Fügen Sie es in didFinishLaunch

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

Der Standardwert ist 1, machen Sie es 2, um seine Geschwindigkeit zu verdoppeln.

+1

Können Sie erklären, warum Ihre Lösung besser ist als die anderen? –