黄瓜:如何组织一个复杂的测试集

我有三个我正在测试的后端版本。 我想对这三个版本运行类似的功能规格。

起初,我认为我只是在目录结构中组织所有内容,例如:

features/
  v1/
    something.feature
    step_definitions/
      something_steps.rb
  v2/
    something.feature
    step_definitions/
      something_steps.rb
  v3/
    something.feature
    step_definitions/
      something_steps.rb

然而,黄瓜似乎使所有的东西都变得平坦,这意味着我最终会得出含糊不清的步骤定义。

然后我想到了以下结构:

features/
  v1/
    something.feature
  v2/
    something.feature
  v3/
    something.feature
  step_definitions/
    something_steps.rb

我会在某个地方的特性文件中定义一个变量,指出哪个版本适用于哪个版本,并且在步骤文件中会有一堆“ifs”,以根据该版本变量选择代码路径。 但是,我还没有找到在特征文件中定义该变量的明显方法。

有没有什么办法可以组织事物,或者我只需要创建多个“特征”根,每个版本一个,这将是一个可怕的解决方案,因为它意味着多次调用黄瓜?

v1/
  features/
    something.feature
    step_definitions/
      something_steps.rb
v2/
  features/
    something.feature
    step_definitions/
      something_steps.rb
v3/
  features/
    something.feature
    step_definitions/
      something_steps.rb

为什么多次调用黄瓜是一件坏事? 就我个人而言,我就是这么做的,并且运行Rakefile中的所有三个特性,所以我不必一个接一个地做。

另外,如果冲突太大以致于您要重写每个版本的整个步骤定义,那么也许您应该重新考虑如何对它们进行表述。 如果代码如此不同,你是否应该将它描述为做同样的事情?

如果变化较小,那么我会建议查看标签和钩子以实现您想要的效果。

所以你的功能可能是这样的:

@v1
Feature: some feature
  In order to test different versions
  As a cucumber user
  I want to be able to change step definitions based on what version feature is running

  Scenario: some scenario
    Given some thing
    When I pass some method
    Then I should get something

你的步骤定义可能如下所示:

Before('@v1') do
  Thing = V1Thing
  VERSION = 1
end

Given /^some thing&/ do
  @thing = Thing.new
end

When /^I pass some method$/ do
  @thing.some_action!
end

Then /^I should get something$/
  thing = "something" if VERSION == 1
  thing = "something else" if VERSION == 2
  @thing.prop.should == thing
end

即使步骤定义非常不同,也可以使用此方法,但我认为这将更难管理。

链接地址: http://www.djcxy.com/p/82605.html

上一篇: Cucumber: how to organize a complex test set

下一篇: How JVM allocates memory to static String variables?