由于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测试过程中提高动画速度。我们开发了这个库,以实现应用和测试目标之间的互通。 –