与Fastlane和Bluepill并行运行XCUITests

注意:Apple已发布了Xcode 9的并行测试功能,因此,本文中提到的Bluepill工具现在意义不大!

LinkedIn最近开源了Bluepill,该工具可以并行运行iOS测试。 在LinkedIn工程博客上有Bluepill公告博客文章。 Bluepill并不从头开始支持Apple的XCTest和XCUITests框架,但是在最新版本v1.0.0中,我们可以使用Bluepill并行运行XCTest和XCUITests。

蓝丸功能

Bluepill具有一些很棒的功能,您可以在Github README上阅读全部详细信息,但总而言之,我们可以

  • 与多个模拟器并行运行XCUI测试。
  • 将测试分散到多个模拟器中,并允许以无头模式运行测试。
  • 每个模拟器生成报告并重试失败的测试。

蓝丸限制

除了一些出色的功能,Bluepill还具有一些局限性,如下所示

  • Bluepill的安装过程很痛苦。 用户必须从Github手动下载二进制文件或下载源代码并构建框架以获取二进制文件。 理想情况下,它应该是像Homebrew一样的软件包或其他软件包管理系统,以使安装变得容易
  • 有两个二进制文件“ bluepill ”和“ bp ”,运行测试需要同时进行。 目前,“ bluepill”二进制文件具有用于自制程序包的公式,但是“ bp”二进制文件没有任何公式。
  • Bluepill遍历了测试目标,但是可能存在更快的方法来解析.xctestrun文件以找到测试。
  • TravisCI构建长期未维护为红色。
  • Bluepill缺少用户文档。 撰写本文时,github上的文档目录仍然为空。

希望LinkedIn的Bluepill团队将在不久的将来为解决这些问题做出一些努力。

蓝丸和Fastlane婚姻

根据github上当前的Bluepill使用情况信息,我们必须使用xcodebuild’build for testing’操作通过XCTest构建应用方案,以便我们可以派生数据以与Bluepill一起使用。 然后,我们可以将’app_path’,’scheme_path’,’output_directory’和其他标志传递给bluepill以并行运行测试,或者使用配置有这些标志的use JSON文件将其传递给bluepill。 通过与Fastlane结合使用,我们可以使此过程更加动态,Fastlane是用于自动执行iOS开发任务的工具。 在这篇文章中,我们将看到如何配置Bluepill与Fastlane一起运行!

设置Xcode项目

让我们开始在Xcode中创建一个名为“ Single View Application”的新iOS项目,并将其命名为“ Bluepillar”,同时选中“ 包括UI测试”框。 不要选中“ 包含单元测试”或“将此示例使用核心数据 ”复选框。

现在,Xcode为我们生成了项目模板,让我们复制模板UI测试六次将其命名为OneBluepillarUITests.swift,TwoBluepillarUITests.swift等等。 不要忘记相应地更改类名。 在此阶段,我们的Xcode项目应如下所示:

现在,我们有六个测试在做相同的事情,但是对于并行测试演示来说,这无关紧要。

安装Bluepill

当前,我们可以通过运行以下命令使用Homebrew安装Bluepill

  $ brew安装bluepill 

但这还不够,因为我们需要一个还没有自制程序公式的二进制“ bp” ,希望维护人员会尽快添加它! 因此,现在我们将使用以下步骤手动安装它。

  • 转到Bluepill Github发行页面,并下载zip文件bluepill-vX.XXzip,其中XXX是您要下载的最新发行版。
  • 该文件有两个二进制文件“ bluepill”和“ bp”,我们可以将其移动到/ usr / local / bin /目录中,以便可以从任何位置访问它。 假设我们已经在“〜/ Downloads / bluepill-vXXX /”中下载了二进制文件,则可以运行
  $ mv〜/下载/bluepill-vX.XX/bluepill / usr / local / bin / 
$ mv〜/ Downloads / bluepill-vX.XX / bp / usr / local / bin /

现在我们在PATH中都有两个二进制文件,可以从任何地方访问它们。

安装Fastlane

我们可以按照此处的fastlane文档,使用Homebrew,Installer Script或Rubygems安装fastlane,现在让我们使用Rubygems安装它

  $ sudo gem install fastlane -NV 

在我们的Bluepillar项目中,我们创建“ fastlane”目录并清空“ Fastfile”

  $ mkdir fastlane 
$ touch fastlane / Fastfile

获取Bluepillar Fastlane插件

我最近编写了一个fastlane Bluepillar插件,以使配置更加容易。 我们可以通过运行该插件

  $ fastlane add_plugin fastlane-plugin-bluepillar 

这将在“ fastlane”目录中创建一个名为Pluginfile的文件,我们应该在源代码管理中提交该文件。 设置将如下所示:

配置快速文件

现在,我们已经安装了6个XCUITests和fastlane的Xcode项目。 接下来,我们需要配置一个通道以使用Bluepill并行运行XCUI测试。

首先,我们需要使用XlanTest使用快速通道扫描来构建方案,以生成派生数据,以便将其传递给bluepill。 我们有一个具有XCUITest目标的“ Bluepillar”方案,我们将在“ bluepill”目录中的项目本身中生成派生数据。 扫描设置如下所示

 扫描( 
方案:“ Bluepillar”,
build_for_testing:是的,
named_data_path:'./bluepill',
buildlog_path:'./bluepill/logs/'

接下来,我们将配置bluepillar插件以接受一些必需的参数,例如“ app ”,“ Runner_app_path ”,“ output_directory ”和“ cheme_path ”。 我们还可以传递可选参数,例如’ num_sims ‘,’ runtime ‘和’ device ‘。 所有其他参数将从bluepill中获取为默认值。 因此,blupillar设置将如下所示:

 蓝柱( 
应用:“ bluepill / Build / Products / Debug-iphonesimulator / Bluepillar.app”,
Runner_app_path:“ bluepill / Build / Products / Debug-iphonesimulator / BluepillarUITests-Runner.app”,
scheme_path:'Bluepillar.xcodeproj / xcshareddata / xcschemes / Bluepillar.xcscheme',
output_dir:'bluepill_output /',
num_sims:“ 3”,
运行时:““ iOS 10.3””,
设备:“ iPhone 6”

在此阶段,我们具有所有必需的设置,并且需要使用它来配置Fastfile。 让我们创建一个名为“ test”的通道,向Fastfile添加以下代码

 车道:test do 
sh(“ rm -rf ../bluepill”)
sh(“ rm -rf ../bluepill_output”)
 扫描( 
方案:“ Bluepillar”,
build_for_testing:是的,
named_data_path:'./bluepill',
buildlog_path:'./bluepill/logs/'
 蓝柱( 
应用:“ bluepill / Build / Products / Debug-iphonesimulator / Bluepillar.app”,
Runner_app_path:“ bluepill / Build / Products / Debug-iphonesimulator / BluepillarUITests-Runner.app”,
scheme_path:'Bluepillar.xcodeproj / xcshareddata / xcschemes / Bluepillar.xcscheme',
output_dir:'bluepill_output /',
num_sims:“ 3”,
运行时:““ iOS 10.3””,
设备:“ iPhone 6”

结束

现在,我们都准备运行测试。 让我们执行这条路

  $ fastlane测试 

这将首先构建应用程序,然后在3个不同的模拟器中执行测试。 看起来像这样:

不错! 它还将为每个模拟器生成报告以及JUnit xml格式的最终​​报告。

要记住的事情

如您所见,在多个模拟器中运行测试看起来有多棒,但是有些事情我们应该记住

  • Bluepill为新测试创建模拟器,一旦测试完成就将其关闭。 运行一些测试后,我们将在计算机中创建100个模拟器! 我们必须手动删除/杀死它。
  • 如果将仿真器的数量设置为10个或更多,则只需等待几个小时才能启动仿真器,并且还要考虑内存消耗。
  • 在CI服务器上运行Bluepill需要简洁和勇气,除非您拥有世界上最强大的服务器,否则CI服务器的性能可能会很差。
  • 运行多个模拟器违反了Apple的建议,因此您永远不知道Apple何时会破坏此工具或类似的(fbsimctl)工具。

接下来是什么

WWDC 2017即将到来,让我们拭目以待这些工具的未来。 希望Apple的专家不会破坏这些工具,这些工具不过是本机Apple开发人员工具或反向工程原始框架/工具的包装。 期待在Bluepill的将来版本中进行一些增强和改进。

您使用过Bluepill吗? 您的经验是什么,请在下面的评论中分享。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..