2016-05-17 40 views
13

Dal Xcode 7 abbiamo una buona API per il test dell'interfaccia utente. Principalmente sono soddisfatto. L'unica preoccupazione è legata alla velocità.Come velocizzare i casi di test dell'interfaccia utente in Xcode?

All'inizio un caso di test UI ordinario (circa 15 azioni) eseguito approssimativamente 25 secondi. Poi ho preso in giro le reti completamente. Ora ci vuole 20 secondi. Considerando che il tempo è occupato solo dalle animazioni e dal tempo di lancio (1 secondo o anche meno), presumo, ci deve essere un modo per accelerarlo.

risposta

14

provare ad impostare questa proprietà quando i test dell'interfaccia utente eseguire:

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

Ecco come ho impostato:

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

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

E nel mio test dell'interfaccia utente:

class MyAppUITests: XCTestCase { 

    // MARK: - SetUp/TearDown 

    override func setUp() { 
     super.setUp() 

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

ci sono alcune più utili suggerimenti in questo blog post.

+0

Grazie per la risposta. Funziona! Per migliorarlo un po ': è possibile aumentare la velocità di animazione dal processo di test dell'interfaccia utente? –

+0

No purtroppo. Il processo di test dell'interfaccia utente è interamente separato dalla tua app (e interagisce solo attraverso l'accessibilità e gli argomenti di avvio). – Mark

+1

@ArtemStepanenko è possibile aumentare la velocità di animazione dal processo di test dell'interfaccia utente utilizzando [SBTUITestTunnel] (https://github.com/Subito-it/SBTUITestTunnel). Abbiamo sviluppato questa libreria per abilitare l'intercomunicazione tra l'app e il target del test. –

3

Un'altra possibilità è quella di disabilitare le animazioni a tutti:

[UIView setAnimationsEnabled:NO]; 
+1

È fantastico! Grazie mille per la condivisione. La mia suite di test funziona alla velocità della luce ora. –

+4

Non dovresti disabilitare completamente le animazioni poichè potresti non riuscire a catturare alcuni bug specificamente collegati alle animazioni. Controlla questo [ottimo blog] (https://pspdfkit.com/blog/2016/running-ui-tests-with-ludicrous-speed) post per maggiori informazioni. –

3

seguito @ Mark risposta, il Swift 3 versione:

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

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

Su di te ui file di test:

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

Aggiungilo in didFinishLaunch

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

Il valore predefinito è 1, fallo 2 per raddoppiarne la velocità.

+1

Puoi spiegare perché la tua soluzione è migliore delle altre? –