Subliminal是一个用于编写iOS集成测试的框架。Subliminal提供了OCUnit/XCTest类似的接口,用于Apple的UIAutomation框架,测试完全用Objective-C编写。Subliminal还提供了一种强大的机制,使得你的测试可以直接操作应用。
[ 特性 • 入门 • 要求 • 用法 • 持续集成 • 贡献 • 联系 • 版权与许可证 ]
使用Objective-C编写测试,并通过Xcode运行它们。在Instruments中查看丰富的日志和截图。使用UIAutomation来模拟用户交互。Subliminal允许你使用熟悉的工具,无需任何依赖。
通过使用UIAutomation,Subliminal可以模拟几乎任何交互——而不必借助于私有API。从导航应用内购买对话框,到将应用休眠,Subliminal让你能够模拟像用户一样的复杂交互。而且当你想要直接操作你的应用时,Subliminal也会帮助你实现这一点。
定义Objective-C方法以帮助设置和拆解测试。利用原生的持续集成支持。相信Subliminal的完整文档和全面测试覆盖率。Subliminal是测试的完美基础。
git clone https://github.com/inkling/Subliminal.git
。cd Subliminal
。rake install
。open Example/SubliminalTest.xcodeproj
。有关安装说明,请参阅潜意识的Wiki。
潜意识支持使用Xcode 5.1和iOS 7.x SDKs构建的项目,以及运行iOS 6.1到7.1的部署目标。
对于iOS 5.1的支持,请使用Subliminal 1.1.0(在发布部分或CocoaPods上找到)。要在iOS 5.1仿真器中测试,您需要运行OS X 10.8并手动将iOS 5.1仿真器添加到Xcode 5.1,详情请参阅此处。
潜意识旨在让OCUnit/XCTest的用户感到熟悉。在潜意识中,SLTest
的子类将测试定义为基础以test
开头的方法。在运行时,潜意识会发现并运行这些测试。
测试可以操作用户界面,甚至可以直接操作应用程序。以下是一个示例测试用例的外观
@implementation STLoginTest
- (void)testLogInSucceedsWithUsernameAndPassword {
SLTextField *usernameField = [SLTextField elementWithAccessibilityLabel:@"username field"];
SLTextField *passwordField = [SLTextField elementWithAccessibilityLabel:@"password field" isSecure:YES];
SLElement *submitButton = [SLElement elementWithAccessibilityLabel:@"Submit"];
SLElement *loginSpinner = [SLElement elementWithAccessibilityLabel:@"Logging in..."];
NSString *username = @"Jeff", *password = @"foo";
[usernameField setText:username];
[passwordField setText:password];
[submitButton tap];
// wait for the login spinner to disappear
SLAssertTrueWithTimeout([loginSpinner isInvalidOrInvisible],
3.0, @"Log-in was not successful.");
NSString *successMessage = [NSString stringWithFormat:@"Hello, %@!", username];
SLAssertTrue([[SLElement elementWithAccessibilityLabel:successMessage] isValid],
@"Log-in did not succeed.");
// Check the internal state of the app.
SLAssertTrue(SLAskAppYesNo(isUserLoggedIn), @"User is not logged in.")
}
@end
有关更多信息,请参阅潜意识的Wiki。
潜意识包括端到端CI支持来构建您的项目,在适当的仿真器或设备上运行其测试,并以多种格式输出结果。
有关用于与Travis和Jenkins等流行CI服务集成的示例脚本和指南,请参阅潜意识的Wiki。
潜意识与其他集成测试框架有什么不同?
大多数其他集成测试框架分为两大类:完全是Objective-C基础的,或者是完全是UIAutomation基础的。
完全是Objective-C基础的框架,如KIF、Frank等,必须通过使用私有API来篡改应用程序的触摸处理系统来模拟用户交互。因此,它们无法保证准确地模拟用户的输入。此外,这些框架只能模拟与应用程序的交互,而不是与设备或其他过程(如应用内购买提示)的交互。
完全是基于苹果的UIAutomation框架的框架需要繁琐的工作流程——在Instruments中使用JavaScript编写测试,这些工作流程并不利用开发人员现有的工具链。此外,它们提供给开发人员没有直接操作应用程序的手段——对UIAutomation测试来说,应用程序是一个完全的黑盒子。
只有潜意识同时结合了在Objective-C中编写测试的方便性和UIAutomation的强大功能。
潜意识与UIAutomation有什么不同?
除了上述UIAutomation的限制,编写UIAutomation测试非常困难。这是因为UIAutomation需要通过用户界面元素在“元素层次结构”中的位置来确定它们的ID,如
var cell = UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()["foo"];
这些引用不仅难以阅读,也难以编写。要引用任何特定元素,您必须描述其整个继承结构,同时只包括UIAutomation认为必要(是图像;可访问的元素,也许;私有的UIWebView
子视图,当然!)的视图。
基于UIAutomation的测试不是用来编写的,而是使用Instruments进行“录制”。这迫使测试依赖于Instruments,并使得测试在之后难以修改。
Subliminal允许开发者根据元素的属性识别元素,而与其在元素层次结构中的位置无关。
SLElement *fooCell = [SLElement elementWithAccessibilityLabel:@"foo"];
Subliminal隐藏UIAutomation脚本的复杂性,使开发人员可以专注于编写测试。
Subliminal还修复了UIAutomation和instruments
CLI工具中的一些错误,例如instruments
对真实设备支持的缺乏。而且,最重要的是,Subliminal使用人类友好的格式和ANSI颜色重新编写了instruments
的输出
Subliminal欢迎拉取请求!查看贡献指南了解如何设置Subliminal进行开发和如何提交成功的拉取请求。
由Jeff Wear创建,由Inkling的支持并得到了以下人员的帮助:
以及Subliminal不断增加的贡献者列表。
您还可以关注Subliminal (@subliminaltest) 在Twitter上的动态。
版权所有 2013-2014 Inkling Systems, Inc.
根据Apache License,版本2.0(“许可证”)许可;除非符合许可证的条款,否则您不得使用此文件。您可以在以下地址获取许可证副本文档:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。请参见许可证了解具体语言管理许可证权限和限制。