前不久,LinkedIn在官博上介绍了公司最新的开源项目Bluepill。Bluepill使开发人员能够在一台机器上同时运行多个模拟器的iOSUI测试,目的是提供稳定的测试工具和可扩展的测试。它的牛逼之处在于:同时在一台机器上启动多个iOS模拟器,自动运行多个UI测试,并为每个测试给出测试报告。更直观的,可以看官方的Demo截图:可以看到图中有12个模拟器同时运行,几乎可以覆盖目前所有的主流iOS版本。为什么要开发BluepillLinkedIn的移动团队在研发中提出了一个叫做“3x3哲学”的概念,即设定一个目标,每天发布三次,从代码提交到团队成员可用之间的时间不超过三个小时。这对持续交付提出了很大的挑战。作为持续交付的一部分,UI测试非常耗时。您通常需要在发布前测试所有主要系统版本。Bluepill就是为了解决这个问题而诞生的。为了达到3x3的目标,Bluepill给出了两个特性:测试平台的稳定性,主要是针对XcodeiOS模拟器的“怪问题”,有时候测试失败不是因为代码有问题,而是因为模拟器不给力,跑不起来或者卡死。据LinkedIn称,他们运行的测试中有2%属于这种情况。测试可扩展性。可扩展性从根本上提供了并行运行测试以同时覆盖多个模拟环境的能力。在Bluepill黑魔法之前,LinkedIn团队曾尝试基于Facebook开源的xctool开发并行测试工具。因此,xctool停止了开发和维护。LinkedIn工程师无奈放弃,研究一番后开始自主开发。Bluepill在CoreSimulator的帮助下解决了稳定性和可扩展性问题。CoreSimulator是Apple的一个未记录的框架,它能够创建不同类型的设备模拟器、选择运行时版本、处理模拟器提供的通知等等。在文章中,作者提到LinkedIn使用CoreSimulator将Bluepill与Xcode模拟器隔离,并使Bluepill能够使用多个模拟器并行运行测试。这里不需要关心Xcode模拟器版本,因为Xcode模拟器是一个黑盒子,随着Xcode的每次更新而进化。如何使用Bluepill使用Bluepill非常简单。在最简单的用例中,在Xcode中构建项目后,您可以使用以下命令运行Bluepill:./bluepill-a./Sample.app-s./SampleAppTestScheme.xcscheme-o。/output/这个命令会启动四个模拟器,还有一些选项可以用来自定义测试环境,包括使用的模拟器个数,运行时环境,失败测试允许重试次数,以及哪些测试是卡在等待时间等。Bluepill在GitHub上以BSD-2许可的开源形式提供。对于不打算自己从源代码构建的开发人员,Bluepill还提供二进制版本。延伸阅读LinkedIn为了开发Bluepill,在持续交付和UI测试上花费了大量精力。你可以在他们的官方博客上阅读相关文章:https://engineering.linkedin.com/blog/2017/01/open-sourcing-bluepill--run-ios-tests-in-multiple-simulatorshttps://engineering.linkedin.com/blog/2015/12/managing-ios-continuous-integration-at-enterprise-scalehttps://engineering.linkedin.com/blog/2016/04/3x3--ios-build-speed-and-稳定性https://engineering.linkedin.com/blog/2015/12/test-stability---how-we-make-ui-tests-stable
