看到有同学提到蓝色药丸(https://testerhome.com/topics/7200),感兴趣去看了下,随手翻译过来,理念还不错。原文在这里:
测试是 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中,我们提到过这个方案。但是这个方案有两个问题:
九头蛇项目(Hydra):一个多模拟器运行的 python 的封装
后来有人建议在多个模拟器上并行运行用例来解决上面说的分发测试问题。Facebook 的 xctool 和 Johannes 的在多个模拟器运行 iOS 用例的概念的给了我们灵感,我们搞了一个基于 xctool 的 python 封装来在多个模拟器上运行用例。这个方案帮助我们搞定了持续交互的环境问题。但是我们还遇到了几个问题:
既然现有方案无法满足我们的需求,我们决定自己搞。这个工具基于苹果的 CoreSimulator 框架使用 Objective-C 写的,我们叫他蓝色药丸,名字出自黑客帝国里的蓝色药丸,原来不是伟哥。。
蓝色药丸可以在多个模拟器上并行运行测试,主要特点如下:
看下我们的演示:
和口服一样简单迅速,我们就可以用起来了。最简单的方法就是你只要运行下面的命令,就可以启动 4 个模拟器来并行运行你的测试用例。运行结束之后,你就会在 ./output
目录里找到测试报告:
./bluepill -a ./Sample.app -s ./SampleAppTestScheme.xcscheme -o ./output/
另外,你可以写一个配置文件,使用命令:./bluepill -c config.json
就可以跑起来了。具体就看这里吧——https://github.com/linkedin/bluepill
我们很高兴的宣布,蓝色药丸开源了。开源证书是 BSD-2 clause。大家想来贡献或者提建议的直接来我们的 github,地址是:https://github.com/linkedin/bluepill。欢迎大家来玩。
Bluepill was created by Ashit Gandhi, Jarek Rudzinski, Keqiu Hu, and Oscar Bonilla. It was inspired by parallel iOS test and Facebook’s xctool. The Bluepill icon was created by Maria Iu.