提问者:小点点

在Cucumber特征文件之前只需要执行一次步骤(每个特征可能有不同的步骤)


我只想在每个cucumber特征文件之前执行一次特定步骤。cucumber特征文件可以有多个场景。我不希望在每个场景之前执行后台步骤。每个要素文件可以有一个步骤(每个要素都不同),该步骤只执行一次。因此,我不能将该步骤用于before hook,因为我每20个特性都有一个特定的步骤。小cucumber样本如下:

Scenario: This will execute only once before all scenario in this current feature
When Navigate to the Page URL

Scenario: scenario 1
When Some Action
Then Some Verification

Scenario: scenario 2
When Some Action
Then Some Verification

Scenario: scenario 3
When Some Action
Then Some Verification

我希望你们能理解我的问题。我在我的框架中使用Ruby Capybara Cucumber。


共3个答案

匿名用户

cucumber不太支持你问的问题。用cucumber挂钩实现这一点的一种方法是使用这两段doc:

https://github.com/cucumber/cucumber/wiki/Hooks#tagged-hooks

https://github.com/cucumber/cucumber/wiki/Hooks#running-a-before-hook-only-once

您可以适当地标记您的所有特性文件,并且可以实现在每个特性标记的基础上执行一次的标记前挂钩。

它并不漂亮,但它无需等待功能请求(或使用其他工具)即可完成您想要的。

匿名用户

这可以通过将之前、之后、周围或之后步骤钩子与一个或多个标签相关联来实现。例子:

Before('@cucumis, @sativus') do
  # This will only run before scenarios tagged
  # with @cucumis OR @sativus.
end

匿名用户

这一定是cucumber邮件列表中最常见的5个问题。你可以用钩子做你想做的事。然而,你几乎肯定不应该做你想做的。采用这种方法节省的执行时间完全抵不上调试这种方法通常会导致的间歇性故障所需的时间和精力。

创建自动化测试的基础之一是从一致的地方开始。当您拥有在场景中设置关键内容的代码,但该代码并不是为每个场景都运行时,您必须执行以下操作:

    < li >确保您的设置代码创建一个一致的基础(这很容易) < li >确保使用此基础的每个方案都不会以任何方式修改基础(这非常非常困难)

在您的示例中,您必须确保每个场景中的每个操作都最终出现在您的原始页面URL上。如果只有一个场景无法做到这一点,那么您将以间歇性失败告终,并且您必须遍历每个场景才能找到罪魁祸首。

一般来说,将您的精力投入到使您的设置代码足够快的过程中会更容易和更有效,这样您就不用担心在每个场景之前运行它。