用户等待从iOS使用取得一个高程度的体验,因此需求你来设计,开发和测试你的使用来知足这一不时上升的希冀. 想一想只是为了这一刻: 你会投进入几多工夫实行原始人工的用户界面测试?你晓得这活儿怎样干…从Xcode启动你的使用,其实不断的用手指导击统一些按钮来确保你的设计中没有让使用退步的体验. 固然,另有其它一些你更情愿做的工作?
取而代之,思索思索Xcode 5中加强的UI测试吧,另有 OS X Server中支撑的不断集成 这篇文章展现了苹果公司为开发者奉献的最好的Tools. 你或许会说,那很棒,而你怎么让那些容易的用户举措测试变得主动化呢,就像确保一个在适宜区域的双击或触摸后会进入准确的视图?即便是测试剧本和机械人也不会有能在屏幕上滑动的电容式触摸手指…或者…它们会有么?
在这篇教程中,你将会进修到一切有关 KIF 的工具(“坚持功用 Keep it Functional”), 它是一个开源的用户界面测试框架. 运用 KIF, 并应用 iOS中的辅佐功用 API, 你将可以编写模仿用户输出,诸如点击,触摸和文本输出,如许的测试. 这些赐与你的使用主动化的,真实的用户界面操作, 并比协助抓紧你的心境,因此你就能够只去存眷本人的杀手级使用了 – 不必在UI测试上消耗你生活的一半工夫.
让我们来Start测试任务吧!
示例是一个叫做茄薯Solanum(一个土豆种类的名字)的的计时器使用,它基于Pomodoro 工夫盒子办法. 这是是它的运作方法: 依照设定好的分钟数你任务的一段工夫,歇息一下,然后反复任务和歇息. 进过如许若干个轮回以后, 你就会歇息一段更长的工夫. 这个使用只是一个可以不断跟踪工夫区段的容易计时器. 轻松的运用了这款使用以后,就可以使得你的开发任务变得愈加高效!
从 这里 下载并解紧缩入门项目.留意 KIF 是一个离开自力的项目, 而它的脚色是为茄薯使用构建一个用于测试目的的库. 你需求双击 solanum.xcworkspace 来在Xcode中翻开项目,而不是 solanum.xcodeproj. 在项目导航视窗中找到这两个项目,应当以下面图示中如许.
将使用的目的设置到solanum,并选择3.5或者4英寸的iPhone模仿器目的.不要运用64位构建,由于在写这篇教程的时分,KIF貌似还不克不及完整兼容.构建并运转这个使用.遍地都瞧一瞧,然后切换到设置Settings面板.
使用有一个可以减速工夫的调试形式,因而你可以设置一个20分钟的计时器,而它将会在测试顶用10秒钟走过这段工夫. 这只是为了协助你测试使用.你应当不会想花20分钟等着看它运转吧!
开启调试形式来减速计时器.接下来点击Clear History按钮,然后在确认弹出视图上点击Clear.这几步确保了你是在一个洁净,对测试有的情况中Start测试功课.前往到Xcode并把使用停下来.
在项目阅读器中,睁开solanum项目. 右击UI测试文件夹并点击New File...来参加你的新测试用例.
选择 iOSCocoa TouchObjective-C class 并点击 Next. 将类定名为 UITests 并使其成为 KIFTestCase 的子类.
点击Next 并确保文件曾经被添加到 UI Tests 目的中, 而不是 solanum 目的. 最初,点击接下来屏幕上的 Create 以保管文件.
KIFTestCase是SenTestCase的一个子类. 那意味着你具有了大部分的规范 OCUnit 测试办法和机制可使用, 思索到你曾经很熟习的 单位测试.
翻开UITests.m 并在@implementation 一行添加以下的办法:
- (void)beforeAll { [tester tapViewWithAccessibilityLabel:@"Settings"]; [tester setOn:YES forSwitchWithAccessibilityLabel:@"Debug Mode"]; [tester tapViewWithAccessibilityLabel:@"Clear History"]; [tester tapViewWithAccessibilityLabel:@"Clear"];} |
beforeAll 是一个实践上只是在一切测试运转之前被挪用一次的特别办法. 你可认为你这里运转的测试设置任何实体变量和初始化前提.
tester 工具是指定的KIFUITestActor 类的一个缩略称号. 这个类包括了可以模仿用户举措的办法,包含触及另有在视图上滑动.
tapViewWithAccessibilityLabel: 或许是最常被用到的测试举措办法. 正如其称号所提醒的,它运用在给定的可拜访标签上模仿在视图上的触击. 在大大多数状况下,可拜访标签都是适配诸如按钮这类组件的可视的文本标签. 假如不是如许的,那就会如你鄙人一节将会看到了,你将需求手动设置拜访标签.
一些控件,诸如 UISwitch, 相较而言愈加庞杂而比仅仅只需求容易的触击愈甚的举措. KIF 供给了一个特别的 setOn:forSwitchWithAccessibilityLabel: 办法来改动一个切换的形态.
总结起来:这个办法对测试举措实行了四步操作:
触击“Settings” 选项卡按钮条.
将 “调试形式Debug Mode” 切换到它的“开启”形态.
触击 “Clear History” 按钮.
在UIAlertView上触击“Clear”按钮.
这几部看起来很眼生? 应当是熟习的! 它们就是之前章节中你手动实行的操作!
到 ProductTest 或者在键盘上敲 Command-U 来运转测试. 你会看到使用运转了起来; 然后你会看到 KIF 接办,主动开启调试形式并肃清汗青记载.
假如你开启了告诉,Xcode也将会告诉你测试的形态:
有时分测试运转器或者说KIF可能会有一点过火考究,而回绝你运转测试, 在此情况下你将只能看到一个空缺的模仿器屏幕. 假如发作了如许的工作:
清算一下如许个项目(ProductClean)
构建并运转
等候使用启动
在Xcode中终止使用的运转
这一进程确保了模仿器正在运转,而且你正在最新的构建长进行操作. 在颠末上面的几步以后,尝尝再一次运转测试. 问题应当没有了.
假如你仍是继续碰到如许的费事, 再反省下 KIF 毛病扫除步调.
如今你曾经在 beforeAll 中有了一个测试前置举措, 是时分参加你的第一个测试了!
该使用顺序在这三个选项卡中,每个均有规范的选项卡把持器层UINavigationController。在接下来的操练中,你将会做个热身,来决议能否:
把面板恰当地衔接起来
选项卡展现准确的视图
选项栏按钮主动地设置成相似文本标签如许的可拜访标签,所以KIF可以经过设置选项栏中的“汗青(History)”、“按时器(Timer)”、“设置(Settings)”标签找到汗青、计时器和设置。
汗青选项卡有一个显示一切按时器履行Task的表视图。从solanum组里翻开HistoryViewController.m,在viewDidLoad末尾处添加以下几行:
[self.tableView setAccessibilityLabel:@"History List"]; [self.tableView setIsAccessibilityElement:YES];
表视图的可拜访标签就设置好了,KIF也因而可以找到它。凡是状况下,一个表视图仅在空的状况下才干被拜访。假如是表视图的单位格有可能被当作是一个目的,所以表视图它自身会被藏在可拜访的API之下。原本可拜访的API在默许状况下假定表视图是不主要的。可能有如许的用例需求依据可拜访性,可是假如你想在KIF中援用表视图就需求使它成为可拜访的。setIsAccessibilityElement:请求确保表视图一直是可拜访的,而不论其内容。
分歧的使用中,假如用户运用了可拜访特征(例如:VoiceOver)拜访非空的表格视图会使得问题愈加庞杂化.在你的使用中,你可以把几行代码套在#ifdef DEBUG 和 #endif 指令之间,以便这几行代码只被编译到你的调试构建中.DEBUG 预处置器宏曾经在Xcode项目模板中被提早定义好了.
Timer 选项卡有几个你可以察看察看的控件,而“Task Name”文本域则被便当的放在了视图的顶部. 分歧于经过代码来设置标签属性, 可以翻开 Main.storyboard 并找到Timer View Controller 视图. 选择task name 选择文本域,再来实行设置.
翻开 Utilities 面板,假如它没有显示出来的话 — 并选择Identity Inspector. 提醒:它是从右边数第三个图标, 或者运用快捷键‘? ? 3′.
在这个窗口的 Accessibility 一栏的Lable域中输出“Task Name“. 要警觉一点,由于可拜访选项对巨细写是敏感的. 确保输出如显示的,是大写的 T 和 N!
Settings 面板曾经用Accessibility选项将视图设置好了, 因而你曾经万事俱备,可以进入到下一步操作了!
在你的项目中,你将会需求继续在Accessibility选项中实行设置,经过代码方法或者如后面曾经在Interface Builder中曾经做过的. 为了便利,示例使用余下来的选项曾经设置好了.
回到 UITests.m, 看看在 beforeAll以后的这个办法:
- (void)test00TabBarButtons { // 1 [tester tapViewWithAccessibilityLabel:@"History"]; [tester waitForViewWithAccessibilityLabel:@"History List"]; // 2 [tester tapViewWithAccessibilityLabel:@"Timer"]; [tester waitForViewWithAccessibilityLabel:@"Task Name"]; // 3 [tester tapViewWithAccessibilityLabel:@"Settings"]; [tester waitForViewWithAccessibilityLabel:@"Debug Mode"]; }
测试运转器会在运转时寻觅一切以”test“扫尾的办法, 然后按字母次序运转它们. 这个办法以名字“test00″ 扫尾,因而它会在你稍后参加的办法之前运转, 由于它们是以诸如“test10″, “test20″ 如许的名字扫尾的.
每三个一组的办法会实行相似一些举措: 在一个选项卡按钮条上触击, 并反省希冀看到的视图被显示在屏幕上. 10 秒是waitForViewWithAccessibilityLabel:设置的默许工夫. 假如在这段指定的工夫没有显示预期的工具,测试就告失败.
选择 ProductTest 或者敲击 Command-U键运转这些测试. 你会看到beforeAll 中的步调会肃清掉汗青记载, 然后test00TabBarButtons 会接办并按次序切换到History, Timer 和 Settings 选项卡.
那末,你怎样意想到测试曾经发作了呢? 你只需求编写并运转一个捏词测试, 就会看到你的小使用本人在“启动”了!祝贺了! 你正在掌控主动化UI测试的征程上.
固然,切换标签长短常美观的,可是是时分去存眷愈加真实的举措:输出文本,触发形式对话框并选择一个表视图的行。
该测试使用顺序有一些内置的可以更改任务工夫、歇息工夫、一组引荐值的反复次数的预设。假如你想看看他们的定义,可以看看在PresetsViewController.m中的presetItems。
选择一个预设,这个本人自身就能够成为一个测试,可是这个举措成为其他测试的一部分会更有效。在这类状况下是值得把它自力开来成为一个辅佐办法。
把以下的办法添加到UITests.m的完成模块中去:
- (void)selectPresetAtIndex:(NSInteger)index { [tester tapViewWithAccessibilityLabel:@"Timer"]; [tester tapViewWithAccessibilityLabel:@"Presets"]; [tester tapRowInTableViewWithAccessibilityLabel:@"Presets List" atIndexPath:[NSIndexPath indexPathForRow:index inSection:0]]; [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Presets List"]; }
第一步是切换到计时器(Timer)标签栏,然后点击导航栏中的预设按钮(Presets)。当“预设列表(Presets List)”表视图呈现的时分,点击该行上的指定索引处。
点击行,视图把持器会消逝,所以要用waitForAbsenceOfViewWithAccessibilityLabel:来包管它在继续下一步之前曾经消逝了。
你留意到了吗?这个办法不是以test为扫尾的。测试运转器是不会主动运转它的,而是需求你在本人的测试中手动去挪用这个办法。
如今,添加以下测试办法到UITests.m:
- (void)test10PresetTimer { // 1 [tester tapViewWithAccessibilityLabel:@"Timer"]; // 2 [tester enterText:@"Set up a test" intoViewWithAccessibilityLabel:@"Task Name"]; [tester tapViewWithAccessibilityLabel:@"done"]; // 3 [self selectPresetAtIndex:1]; // 4 UISlider *slider = (UISlider *)[tester waitForViewWithAccessibilityLabel:@"Work Time Slider"]; STAssertEqualsWithAccuracy([slider value], 15.0f, 0.1, @"Work time slider was not set!"); }
KIF测试操作有一个可读性很好的名字,看看你能不克不及发明接下来会发作甚么?把它当做是一个……测试!准确!固然这是一语双关。
好的,如今引见接下来的步调:
切换到计时器(Timer)标签栏。
在“Task名(Task Name)”可拜访标签的文本框中输出“Set up a test”(记着,这个标签是你之前添加到面板中的)。点击“完成(Done)”按钮,封闭键盘。
恳求协助办法来选择第二个预设。
选择预设可以选择滑动器的色彩,所以要确保它曾经更改成准确的值。
在代码最初一部分,你会发明一个技能:waitForViewWithAccessibilityLabel:它不单单可以等候视图呈现,还可以前往一个指针到视图中去。这里,你可以把前往值类型转换成适宜的类型UISlider。
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务