close
当前位置: 物联网在线 > 技术文库 > ios >

iOS开源:Bluepill - Linkedin 的蓝色药丸

测试是3x3 策略里面的关键组成。随着我们提高 iOS 持续交付流水线,我们面临两大难题:测试工具的稳定性和可扩展性。我们需要一个工具来把 iOS UI 测试跑的又快又可靠。因此,我们创建了一个项目,叫蓝色药丸,今天我们开源了这个项目。蓝色药丸是一个稳定的 iOS 测试工具,它可以在同一台机器上的多个模拟器上运行 UI 测试。蓝色药丸为 Linkedin 节省了数以千计的小时。我们相信,它可以极大地帮助任何大规模运行 iOS UI 测试的人。

现有的限制

通常开箱即用的 iOS 测试工具主要有两个限制:稳定性和扩展性。

稳定性

如同其他公司做大规模 iOS 开发和测试一样,在处理 iOS 模拟器稳定性上,我们面临了很多挑战。我们在去年的一篇博文里阐述了我们是如何处理模拟器的碎片化,为了找出最优的解决方案,我们试验了不同的环境配置。然而,由于 iOS 模拟器是一个黑盒,而且会随着 Xcode 的升级而升级。我们逐渐意识到并只能接受,即使在某个版本,无论环境多健壮,仍旧无法避免模拟器升级之后带来的变化和反复无常。

可扩展性

Xcode 一次只能运行一个模拟器。所以我们只能串行运行测试用例。我们有 2000 多的 UI 测试用例,串行运行需要花大概 15 小时。如果想在三小时内完成提交就发布的节奏,我们必须并行运行。

现有的解决方案

为了解决这些问题,我们找到了两个现有方案,但是没有一个能非常好的满足我们的需求。

分发测试

我们先尝试了把我们的 iOS UI 测试拆分成多个子集,然后分发给多个机器。在以前的文章 iOS Build Speed and Stability 中,我们提到过这个方案。但是这个方案有两个问题:

稳定性: 我们 Mac 设备池的稳定性大约 98%。如果我们把测试分发给 10 台设备,只有所有这 10 台机器上的测试都通过,这个版本才算测试通过。由于每加一台设备,遇到不确定失败的场景就会指数级增加,所以工具的不确定性急剧恶化。当有10台设备在跑用例的时候,可靠性就掉到了 98%*98%...(10次)约等于 82%。

容量需求: 使用硬件并行测试的第二个问题就是容量。在高峰期间(比如,午饭或者晚饭时候),我们有大约 80 个并发的持续集成的任务。要跑起来,就需要 800 台机器。我们遇到这个问题时候,我们只有200台机器。那么其他的任务只能排队了。这个时候如果有开发提交代码,那么他只能等几个小时才能测试到。

九头蛇项目(Hydra):一个多模拟器运行的 python 的封装

后来有人建议在多个模拟器上并行运行用例来解决上面说的分发测试问题。Facebook 的 xctool 和 Johannes 的 在多个模拟器运行 iOS 用例的概念 的给了我们灵感,我们搞了一个基于 xctool 的 python 封装来在多个模拟器上运行用例。这个方案帮助我们搞定了持续交互的环境问题。但是我们还遇到了几个问题:

基于 xctool :作为 iOS 测试工具,xctool 是非常棒的。然后 xctool 停止开发了,没人维护了。我们只有两个选择:要么 fork 一个自己重构,要么做我们自己的测试工具。在做了一番调研之后,我们发现做一个在多个模拟器上运行测试工具并不难。

这仅仅是一个 xctool python 封装 :基于 xctool 的 python 封装无法访问 CoreSimulator 的 API。如果不能直接和模拟器对话,就很难操控模拟器。

Introducing Bluepill

既然现有方案无法满足我们的需求,我们决定自己搞。这个工具基于苹果的 CoreSimulator 框架使用 Objective-C 写的,我们叫他蓝色药丸,名字出自黑客帝国里的蓝色药丸,原来不是伟哥。。

蓝色药丸可以在多个模拟器上并行运行测试,主要特点如下:

在多个模拟器上并行运行测试

自动把差不多时间完成的测试打包成组

使用 headless 模式运行测试,减少内存消耗

生成 junit 的报告

实时报告测试状态,包括测试速度和环境健康度

模拟器挂掉重试机制

看下我们的演示:

iOS开源:Bluepill - Linkedin 的蓝色药丸

如何使用蓝色药丸,难道不是口服?

和口服一样简单迅速,我们就可以用起来了。最简单的方法就是你只要运行下面的命令,就可以启动4个模拟器来并行运行你的测试用例。运行结束之后,你就会在 ./output 目录里找到测试报告:

./bluepill -a ./Sample.app -s ./SampleAppTestScheme.xcscheme -o ./output/

另外,你可以写一个配置文件,使用命令: ./bluepill -c config.json 就可以跑起来了。具体就看这里吧—— https://github.com/linkedin/bluepill

开源
(责任编辑:ioter)

用户喜欢...

【原创深度】蓝牙扩展了开源应用

得益于开源软件的成功经验,Arduino开创了开源硬件(OSHW)模型,鼓励业余和专业工程师去学习、修改、宣传、制作和销售其设计的公开可用硬件产品。开源硬件在个人和商业应用中的作用借...


大数据早报:阿里即将开源ApsaraCache Uber关闭备受争议的乘客位置追踪服务(8.31)

数据早知道,上36dsj看早报! 来源36大数据,作者:奥兰多 『阿里』阿里即将开源ApsaraCache,云数据库Redis版分支 Ap...


Seeed Studio Wio Tracker让你轻松创建基于GPS的IoT项目

Seeed Studio的Wio Tracker这款无线输入输出 (Wio) Tracker为开源网关,通过跟踪几乎所有移动的目标并以无线方式上传数据,...


从分布式管理到多租户实现,企业级大数据系统如何利用开源生态构建?

作者: 陈冬 大数据系统的应用领域 首先回顾一下历史。 从中我们可以看到一些趋势,在大数据生态发展的过程中,...


【科技农夫共创物联网新农耕模式】年轻小农靠开源翻转传统农业

宜兰县员山乡深沟村也有一群年轻人,因为对农业的热情,从软件人变成“作田人”,将软件工程的专业带到耕种的...


终止x86架构Arduino开发板项目,英特尔逃离创客市场

在涉足开源硬件和创客市场两年后,英特尔虎头蛇尾地匆匆逃离了这个主打情怀的市场。IT经理网...


加入人工智能开源大战:Lyft计划开源人工智能算法测试工具

Lyft的加入,表明这种开源策略的必要性和重要性已经被越来越多的人工智能领域的科技企业所认知。IT经理网...


潘多拉盒子里的珠宝:NSA开源软件清单

NSA在Github上的开源项目列表,其中不乏精品IT经理网...


拿走不谢 | 100+大数据开源处理工具汇总

本文除了一些常用的大数据工具,还总结汇总了其他大数据工具,几乎是最全的大数据工具的总结。 如果你想入门大...


Linux基金会发表EdgeX开源项目 看好物联网边缘运算平台

Linux基金会是全球开源社群的领头羊,宣布成立开源物联网项目EdgeX Foundry,以戴尔(Dell)为首数十家业者共襄盛举,戴...