最近研究起了 APP 的自动化测试,发现了 Xcode Bot
自动化打包测试发布的功能,就开始研究起来。
对于 Xcode Bot
的研究也不算精通,写一下入坑的过程帮助一下还没有入坑的新人。
入坑之前需要准备两样东西
- Xcode: 这个作为 iOS 开发是必不可少的
- Server: Apple Mac 的一个强大的服务运行软件 强大的现在很多功能我都不会用
配置 Server Xcode 服务
-
打开
Server
软件点击我们下载安装之后地球图标。
-
进入我们所在的本地服务器
我们可以进入本地自己电脑的服务器,还可以进入远程服务器电脑。看自己的需要了。
-
选择
Xcode
服务第一次配置需要让我们配置一些参数和选择本地的 Xcode,我已经选择了,这里不贴图了。
-
新建本地的 git 库。
如果我们使用
SVN
或者例如Github
类似的代码仓库也是可以的。我们新建一个本地的 GIT 仓库用户以后测试工程使用我们点击加号进行新建一个储存的仓库
我们命名叫做
LocalGitRepo
用来存储以后测试的工程代码。 查看我们本地 git 库连接地址
双击下面图所指我们新建的库
我们可以查看我们本地库所在的路径和 SSH 和 HTTPS 的连接。
配置 Xcode
-
我们打开
Xcode
的Perferences->Accounts
-
我们新建一个仓库帐号
地址我们选择我们刚才 https 地址,输入我们授权的账号 ,一般输入我们登录用户和密码就可以。
-
我们CheckOut 刚才的库到本地
新建一个测试的工程
-
新建一个
XcodeBotExample
工程我们包含我们的测试工程,用户以后的测试。
保存我们新建的工程到刚才我们在本地 Check Out 下来的库。
-
提交我们刚才的代码到远程仓库
-
-
开启 Target 分享
-
设置测试生成代码覆盖率统计
新建自动化 Bot
-
创建一个新的 Bot
-
选择一个服务
-
登录我们的 git 服务器
-
开启代码覆盖率
-
去掉自动测试选择提交才测试
-
选择我们需要测试的设备和模拟器
因为之前一些设备删除导致选择全部抱错 暂时也没有找到解决的办法。
之后一路 Next 完成设置。
完成设置后会自动的自动化测试一次
错误的原因是没有把全部文件上传到 git 导致远程仓库进行打包找不到对应的
Scheme
编译完成我们可以看到打包的信息
包含中间的错误 警告 静态编译 测试 打包的 ipa 和 Archive 文件。
查看代码覆盖率
-
我们看到 AppDelegate
类只有33%的覆盖。
这几个方法代表测试用例没用测试过所以就没有覆盖。这样可以我们可以写测试用例帮助解决一些 bug
我们新建一个类 TestCoverage
用来作为测试。
我们新建一个类方法判断让只有前十名才可以有奖励吃到苹果。
+ (BOOL)userCanEatAppleAtIndex:(NSInteger)index
+ (BOOL)userCanEatAppleAtIndex:(NSInteger)index {
return index <= 10;
}
我们执行 Commond + U 进行测试。
当完成我们就有可以点击查看结果。
我们可以看到我们新建的类代码覆盖为0
因为我们写的方法还没进行测试。
- (void)testExample {
NSInteger userTop = 1;
[TestCoverage userCanEatAppleAtIndex:userTop];
}
我们执行这个方法左边执行测试的按钮进行测试。
我们看到当执行完测试之后我们的代码覆盖率已经100%。
因为我们的不管输入任何的值 判断的代码都会走。
我们现在更改代码为如下代码。
+ (BOOL)userCanEatAppleAtIndex:(NSInteger)index {
if (index <= 10) {
return YES;
} else {
return NO;
}
}
现在的代码和之前的代码都是一样的只不过这个写的复杂。
我们再次的执行刚才的测试代码。
我们可以看到我们的代码覆盖率已经成为了50%。
我们点击类进去查看详情。
绿色的代码测试用例测试过 右侧数字是执行的次数。
下面返回 NO的一次也没有执行。
我们写一下 NO 的测试逻辑。
NSInteger userTop1 = 11;
[TestCoverage userCanEatAppleAtIndex:userTop1];
我们再次执行我们测试代码方法。
我们可以看到我们的类已经全部的代码覆盖了。是不是很棒。
我们再次升级我们的代码。假设全班56人,我们循环测试一下。
- (void)testExample {
for (int i = 0; i < 56 ; i ++) {
[TestCoverage userCanEatAppleAtIndex:i];
}
}
我们查看执行方法可以看到我们成功执行了11次 失败执行了45次。
今天的文章就到此结束了,是不是还有问题没解决。可以私信我,如果我知道解决方法的话。