【问题标题】:How to execute cucumber test serial and then in parallel?如何串行执行黄瓜测试然后并行执行?
【发布时间】:2015-11-10 08:53:47
【问题描述】:

这是我的场景: 我们有一个使用 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”的更多信息,但我找不到与我的问题相关的任何信息。

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

提前致谢。

【问题讨论】:

    标签: ruby cucumber


    【解决方案1】:

    首先,我建议使用标签将前置条件/​​设置步骤移动到挂钩中:

    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。所以你要么需要回复this change,要么在本地评论/删除raise语句。

    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
    

    【讨论】:

    • 基里尔·朱可夫,你的回答很好!!我们将尝试使用钩子(一开始我们没有想到),或者尝试失败,因为它是一个非常长的特性,在测试用例之前和之间有很多前提条件,然后看看它是如何进行的。您将是第一个知道它是否有效的人。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-29
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2022-10-05
      相关资源
      最近更新 更多