KIF

来源:互联网 发布:做网络监控用几类线 编辑:程序博客网 时间:2024/06/09 22:05

1、KIF
KIF (Keep it Functional), 它是一个开源的用户界面测试框架. 使用 KIF, 并利用 iOS中的辅助功能 API, 你将能够编写模拟用户输入(例如点击、触摸和文本输入)的测试;KIF测试主要使用类:test case(KIFTestCase,是XCTestCase的子类)和UI test actor(KIFUITestActor)。XCTest测试运行器加载测试用例类并执行测试。 在这些测试中,测试者执行模仿用户交互的UI操作。 三个最常见的测试者动作是“点击此视图”,“在此视图中输入文字”和“等待此视图”。 这些步骤在基础KIF实现中作为KIFUITestActor的工厂方法包含。
KIF使用标准的XCTest进行构建和执行,测试是同步与主线程的,因此允许复杂的逻辑和构图。KIF也可以利用Xcode的测试导航栏、命令行工具等

  KIF使用非官方的Apple API。 大多数iOS测试框架也都如此,并且对于测试目的来说是安全的,但重要的是KIF不会将其转化为生产代码,这样的话Apple将会拒绝您的应用因为它会让您的应用。 按照以下说明确保KIF已正确配置为您的项目。

KIF的demo:https://github.com/CYXiang/CYXTenMinDemo
特征:

(1)最小化间接
所有的KIF测试使用OC编写,这样允许与代码最大化集成,同时最小化您必须构建的层数。容易配置

(2)易配置
KIF直接一体化进入Xcode项目中,因此不需要再额外的webServer上运行或者安装额外的包

(3)覆盖iOS的版本广
最新支持iOS 8.1,(现在一处ios11,也运行良好)

(4)向用户一样测试

(5)自动化集成Xcode测试工具

2、在使用中学习KIF
KIF使用下面描述的技术验证KIF内部的功能性。您可以通过简单地使用⌘U键来构建和测试KIF机制来查看一个执行其全部功能的测试套件。 看看“KIF测试”小组的测试,了解如何建立自己的测试。

(1)使用CocoaPods安装

安装好之后我们就可以使用KIF,使用KIF需要建立一个test target,在创建工程的时候默认使用text,那么工程中已经存在MyApplication_Tests,如果你这样做了,在不使用它进行单元测试情况下,你可以继续使用它。 否则,请按照以下说明创建新的。

1)选择你的工程,在编辑器底部的左侧点击“Add Target”,选择iOS->Test->iOS Unit Testing Bundle。命名为“Acceptance Tests”、“UI Tests”或者其他指明测试意图的名字。

2)建好之后,这Testing Target将增加一个头文件和实现文件,——删除

3)在Podfile文件中添加以下代码,记得将Your Apps修改成应用的名字

target 'Your Apps' do  ...endtarget 'Acceptance Tests' do  pod 'KIF', :configurations => ['Debug']end

4) 运行pod install 完成以下最终测试目标配置中的任务,以获取运行测试的最终详细信息。

最终测试目标配置
在应用程序中,你需要测试运行在hosted。 当创建一个新的测试bundle target时,Xcode默认做好,但是如果你正在迁移旧的bundle,需执行以下几步

—-选择“Build Phases”添加应用,在“Target Dependencies”的扩展区点击“+”好,选择自己的应用,点击“Add”。

—-配置bundle 的加载器,在“Build Settings ”中,“Linking”扩展区,将“Bundle Loader”编辑为“(TESTHOST).TestingTestHost"(BUILT_PRODUCTS_DIR)/MyApplication.app/MyApplication”;并且将“Wrapper Extension”设置为xctest。

—-触发一个test,配置unit tests运行。点击你的scheme名字然后选择“Edit Scheme…”,然后点击“Test”,选择你要测试的target点击“OK”。

3、测试例子
简单介绍:
KIF依靠iOS内置的可访问性来执行测试步骤。 因此,重点是我们的应用程序可以完全访问。 这也是确保我们的应用程序可供大家使用的一种好方法。 给你的意见合理的标签通常是让应用程序可访问的一个好地方。

1)创建一个测试类,我们创建一个登录测试—LoginTests.创建一个新类继承KIFTestCase,更新的导入包

LoginTestCase.h#import <KIF/KIF.h>@interface LoginTests : KIFTestCase@endLoginTestCase.m#import "LoginTests.h"#import "KIFUITestActor+EXAdditions.h"@implementation LoginTests- (void)beforeEach{    [tester navigateToLoginPage];}- (void)afterEach{    [tester returnToLoggedOutHomeScreen];}- (void)testSuccessfulLogin{    [tester enterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"];    [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"];    [tester tapViewWithAccessibilityLabel:@"Log In"];    // Verify that the login succeeded    [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"];}@end

4、注意

1)测试中的大多数测试者操作都已由KIF框架定义,但-navigateToLoginPage和-returnToLoggedOutHomeScreen不是。 这些是您的应用程序特有的自定义操作的示例。 添加这样的步骤很容易,并且使用KIFUITestActor类别中的工厂方法完成,类似于我们添加了方案。

KIFUITestActor+EXAdditions.h#import <KIF/KIF.h>@interface KIFUITestActor (EXAdditions)- (void)navigateToLoginPage;- (void)returnToLoggedOutHomeScreen;@endKIFUITestActor+EXAdditions.m#import "KIFUITestActor+EXAdditions.h"@implementation KIFUITestActor (EXAdditions)- (void)navigateToLoginPage{    [self tapViewWithAccessibilityLabel:@"Login/Sign Up"];    [self tapViewWithAccessibilityLabel:@"Skip this ad"];}- (void)returnToLoggedOutHomeScreen{    [self tapViewWithAccessibilityLabel:@"Logout"];    [self tapViewWithAccessibilityLabel:@"Logout"]; // Dismiss alert.}@end
原创粉丝点击