2016-05-17 42 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

你能解释为什么你的解决方案比别人更好? –

相关问题