我使用Jenkins进行Android持续集成。我有一些独立的,独立的Robotium UI测试,目前需要12分钟才能对单个模拟器进行串行运行。任何人都可以建议一个好的方法来并行运行它们只需要6分钟(或更短)?
我知道在多个设备/模拟器上并行运行完整测试套件的各种方法,例如:请参阅Jenkins Android模拟器插件的Multi-configuration (matrix) job部分Spoon或AppThwack等云测试公司。
我知道如何通过使用JUnit注释来运行我的测试的特定子集,或者显然Spoon支持类似的功能(参见my question about it)。
我现在正在使用Spoon来运行我的完整测试套件(主要是为了利用带有屏幕截图的可爱HTML输出)。如果有人提供关于拆分测试并将其并行运行的最佳方法的提示,那就太棒了。
我认为我可以通过将测试分成两个独立的CI工作来实现这一目标,但是维护两个单独的工作并将结果结合起来听起来很痛苦。
答案 0 :(得分:6)
更新:我添加了another answer,我认为它提供了更清晰,更简洁的Jenkins配置,并且更直接基于Spoon。
我刚刚发现了Jenkins MultiJob Plugin,它允许您在一个阶段内并行运行多个作业。
以下是使用Fork插件执行此操作但稍微脆弱的方法。我使用手动配置的正则表达式来分区测试(这是我尝试使用Fork的主要原因 - 它支持使用正则表达式)。
MultiJob在阶段中具有多个下游作业,如下所示:
主要工作配置
以下是我的“Android Multi Job”的配置方式:
下游作业配置
下面是如何配置下游“Android Phase N”作业(每个作业使用不同的android.test.classes
正则表达式):
<强>陷阱强>
Abstract*
,否则Fork会尝试将它们作为测试运行,从而产生烦人的失败。他们的TestClassScanner会对此进行控制,issue #5会跟踪这一点。<强>限制强>
<强>期货强>
我们还设计了一种扩展Spoon(输出比Fork更漂亮)的方法,以自动将整个测试套件分割为N个下游作业。我们仍然需要增强它以将所有这些结果聚合回上游作业中的单个HTML页面,但不幸的是a bug in the Jenkins "Copy To Slave" plugin阻止了此工作。
答案 1 :(得分:4)
您可以分3个步骤执行此操作:
这意味着您可以使用单个作业在同一台计算机(指向它的2个节点)上实际执行2组测试。获得单一报告会很棘手但如果我知道我可以帮助的格式。
希望这很有用
答案 2 :(得分:0)
这个答案是我previous MultiJob answer的改进。
我发现这样做的最好方法是使用Jenkins Matrix作业(a.k.a。“多配置项目”)。这非常方便,因为您可以在单个Jenkins作业中配置所有内容。
Spoon现在支持--e
选项,允许您将参数直接传递给instrumentation runner。我已使用section on Test Sharding更新了自述文件。
README应该为您提供所需的内容,但以下是Jenkins作业配置中的其他重点,如果有帮助的话。
User-defined Axis
设置我们想要运行的从节点数。我们必须将标签设置为android
,以便我们的云提供商可以启动适当的奴隶。
我们有一个run-build.sh
脚本,它使用正确的参数调用Spoon。我们需要传递总节点数(在本例中为6
),以及正在运行的特定从节点的索引(自动出现在node_index
变量中)。
构建后的步骤不应与现有步骤有任何不同。将来我们可能需要添加一些内容来将结果收集到主节点上(这一点令人惊讶地难以弄清楚)。现在,你仍然可以点击奴隶上的结果。
答案 3 :(得分:-2)