如何执行黄瓜测试串行然后并行?

How to execute cucumber test serial and then in parallel?

好吧,这是我的场景: 我们有一个使用 ruby 和 Capybara 编写的自动化框架,对于我们使用 Cucumber 的测试用例,我们创建了一个非常庞大的功能并且需要花费大量时间来执行,所以我们考虑使用并行执行,但那是我们对此有疑问的地方。

我们有先决条件,应该一个接一个执行,然后执行真正的测试用例,这些可以并行执行,但不能在先决条件场景之前执行。

#Below my Preconditions that have to be executed in sequence
Scenario: Precondition A
  Given I navigate to main site

Scenario: Precondition B
      Given I login to main site

Scenario: Precondition C
      Given I post a message

#Below my Test cases that can be executed in parallel
Scenario: Test 1
      Given I Test font in comment

Scenario: Test 2
      Given I test syntax in comment

Scenario: Test 3
      Given I check for images in comment

(抱歉这个糟糕的例子)

我正在研究有关 "parallel_test" 使用标签和组的更多信息,但找不到与我的问题具体相关的任何信息。

有没有办法先执行一系列测试用例,然后并行执行其余测试用例?

提前致谢。

首先,我建议使用标签将 preconditions/setup 个步骤移动到挂钩中:

project/features/support/hooks.rb:

Before('@with_posted_message') do
  step 'I navigate to main site'
  step 'I login to main site'
  step 'I post a message'
end 

那么您的功能文件 project/features/message.feature 将如下所示:

@with_posted_message
Feature: Message

  Scenario: Test 1
    Given I Test font in comment

  Scenario: Test 2
    Given I test syntax in comment

  Scenario: Test 3
    Given I check for images in comment

要运行并行测试黄瓜并按场景分组,您需要使用cucumber 1.3.20,因为在黄瓜2.0中允许按场景分组的功能是broken/changed. So you either need to revert this change,或者comment/remove 在本地引发声明。

project/Gemfile:

source 'https://rubygems.org'

gem 'cucumber', '1.3.20'
gem 'parallel_tests'

恢复到 cucumber 1.3.20 后,您很可能需要执行下一个命令来更新依赖项:

bundle update

project/features/config/cucumber.yml:

default: --require features

据推测,您想 运行 在 3 个核心上并行进行测试:

bundle exec parallel_cucumber --type cucumber -n 3 features/message.feature --group-by scenarios

您的输出应以此行开头,表明您正在 运行 并行测试:

3 processes for 3 scenarios, ~ 1 scenarios per process

很明显,在对 运行 并行测试采取任何额外步骤之前,您需要做的第一件事就是不要让测试相互依赖...这只是让您的测试套件过于复杂的陷阱,并且糟糕的做法...

关于 运行 并行测试,您是否考虑过将此责任转移到您的 CI 工具(例如 jenkins)?...而不是重复使用服务器来处理多个测试 运行s 然后在你的测试套件中围绕它编码,让 Jenkins 分配多个测试套件同时专注于一组特定的测试似乎更可靠。这就是我要走的路......通过代码来做看起来很臭