Dan*_*n J 15 continuous-integration android robotium jenkins android-gradle-plugin
我正在使用Jenkins进行Android持续集成.我有一些独立的,独立的Robotium UI测试,目前需要12分钟才能对单个模拟器进行串行运行.任何人都可以建议一个好的方法来并行运行它们只需要6分钟(或更短)?
我知道在多个设备/模拟器上并行运行完整测试套件的各种方法,例如,请参阅Jenkins Android Emulator插件,Spoon或AppThwack等云测试公司的多配置(矩阵)作业部分.
我知道如何通过使用JUnit注释运行我的测试的特定子集,或者显然Spoon支持类似的功能(请参阅我的问题).
我现在正在使用Spoon来运行我的完整测试套件(主要是为了利用带有屏幕截图的可爱HTML输出).如果有人提供关于拆分测试并将其并行运行的最佳方法的提示,那就太棒了.
我假设我可以通过将测试分成两个单独的CI工作来实现这一点,但是维持两个单独的工作并将结果结合起来听起来很痛苦.
更新:我添加了另一个答案,我认为它提供了更清晰,更简洁的Jenkins配置,并且更直接基于Spoon.
我刚刚发现了Jenkins MultiJob插件,它允许您在一个阶段内并行运行多个作业.
下面是我使用Fork插件执行此操作但稍微脆弱的方法.我使用手动配置的正则表达式来划分测试(这是我尝试使用Fork的主要原因 - 它支持使用正则表达式).
MultiJob在阶段中具有多个下游作业,如下所示:
主要工作配置
以下是我的"Android Multi Job"配置方式:
下游作业配置
下面是如何配置下游"Android Phase N"作业(android.test.classes
每个作业使用不同的正则表达式):
陷阱
Abstract*
,否则Fork会尝试将它们作为测试运行,从而产生恼人的故障.他们的TestClassScanner对此进行控制,并发出#5曲目来改变它.限制
期货
我们还设计了一种扩展Spoon的方法(输出比Fork更漂亮),以便在N个下游作业中自动拆分整个测试套件.我们仍然需要增强它以将所有这些结果聚合回上游作业中的单个HTML页面,但不幸的是,Jenkins"Copy To Slave"插件中的一个错误阻止了此工作.
我发现做到这一点的最好方法是使用 Jenkins Matrix 作业(又名“多配置项目”)。这真的很方便,因为您可以在单个 Jenkins 作业中配置所有内容。
Spoon 现在支持一个--e
选项,允许您将参数直接传递给检测运行器。我已经更新了他们的自述文件,其中包含有关测试分片的部分。
该自述文件应该为您提供所需的内容,但以下是我们的 Jenkins 作业配置中的其他亮点,以防有帮助。
设置User-defined Axis
我们想要运行的从节点的数量。我们必须将标签设置为,android
以便我们的云提供商可以启动适当的从属设备。
我们有一个run-build.sh
使用正确参数调用 Spoon 的脚本。我们需要传入节点总数(在本例中6
),以及正在运行的特定从节点的索引(自动出现在变量中node_index
)。
构建后步骤不应与您现有的步骤有任何不同。将来我们可能需要添加一些东西来将结果收集到主节点上(这非常难以弄清楚)。现在您仍然可以点击查看从站的结果。
归档时间: |
|
查看次数: |
1261 次 |
最近记录: |