Jenkins:并行化测试执行

时间:2013-12-17 06:19:21

标签: jenkins continuous-integration jenkins-plugins

我开始在我的项目中使用Jenkins,我正在尝试并行化我在Jenkins的4个文件中编写的测试套件(Rspec测试用例)

spec/features/
|-- test1.rb
|-- test2.rb
|-- test3.rb
|-- test4.rb

我们可以使用以下命令运行所有测试用例,它将按顺序运行test1.rb ..test4.rb中编写的所有测试,大约需要1小时。

script spec/features/

如果要从每个测试文件中执行测试用例,我们可以像

一样运行
script spec/features/test1.rb

现在我想将这些测试用例并行化,这可以将运行时间从1小时减少到15分钟,所有这些测试用例可以并行运行在一台机器上

我在Jenkins中采用了以下方法

1)设置新作业“Main_Test_job”

2)

Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test1.rb
Block until the triggered projects finish their builds ( Not selected this)

添加触发器--->

Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test2.rb
Block until the triggered projects finish their builds ( Not selected this)

添加触发器--->

Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test3.rb
Block until the triggered projects finish their builds ( Not selected this)

添加触发器--->

Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test4.rb
Block until the triggered projects finish their builds ( Not selected this)

3)

   Created job "Child_test_job" as which was included in main_test_job like below
   Select Build step "Execute Shell" with below command
   script spec/$TEST_UNIT

当我启动“Main_Test_job”时,它将自动在同一台机器上启动4个Child_Test_Jobs,这样可以将总运行时间减少到15分钟。

  • 但在这种情况下,“Main_test_job”无法监控4的状态 child_test_jobs,开始4后总是立即成功 儿童工作

  • “阻止直到触发的项目完成构建”此选项 监视子作业,但如果我们为所有子作业选择此选项, 它们按顺序运行而不是并行运行。

我无法使用加入插件,因为我没有运行不同的作业而是多次触发相同的作业。

我的想法:

  1. 为每个test.rb分别创建作业,并使用join trigger进行监视 所有工作的状态

  2. 有一些shell脚本作为“Main_Test_job”的后期构建任务     这将汇总/监控每个工作的状态/结果。

  3. 我认为这在许多组织中都是常见的情况,并且Jenkins必须有一个简单的方法来实现这一目标。 请让我知道您的方法/想法。可能是我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:1)

如果您的作业可以在同一台计算机上并行运行,那么您可能会对Multijob插件感兴趣。它并行启动工作,但等到所有工作完成。

答案 1 :(得分:0)

您也可以使用Build Flow Plugin

您可以使用此插件运行任何类型的作业。