【问题标题】:How to run a Cucumber Background step once for all Scenarios under the same feature?如何为同一功能下的所有场景运行一次黄瓜背景步骤?
【发布时间】:2016-09-02 09:59:16
【问题描述】:

在 Cucumber 中,是否可以为整个功能运行后台步骤?所以它不会在每个场景中都重复?

我正在搜索引擎上运行一些测试,我需要使用测试数据预先设置搜索引擎。由于生成和处理这些数据的时间可能很长(我正在使用 Elasticsearch,并且需要构建索引),所以我宁愿只做一次这个背景,但只针对同一功能下的所有测试。

Cucumber 可以吗?

请注意,我使用的是 MongoDB,所以我不使用事务而是截断,而且我相信每次测试后我都会自动运行 DatabaseCleaner,我想我必须禁用它(也许用@提及?)

编辑:

是的,我正在使用 Cucumber 和 Rails 的 Ruby 步骤

EDIT2:具体示例

  • 我需要测试我的搜索引擎是否总是返回相关结果(例如,在搜索“买家”时,它应该返回带有“买家”、“购买”、“购买”等的结果(必须做使用 ES 配置),并且其他上下文信息会正确更新(例如在侧边栏中

  • 我的类别/过滤器带有括号中的命中数,我必须确保在用户使用过滤器时刷新这些数字)

为此,我在搜索引擎中预先设置了十几个结果,并运行所有基于相同输入的测试。我经常有“示例”子句,它们只是做一些稍微不同的事情,但基于相同的播种

【问题讨论】:

  • 在使用数据的场景运行后,是否还需要移除数据?
  • 我已经解决了关于禁用 DatabaseCleaner 的部分,但我不知道您如何配置它以与 Cucumber 和 Mongoid 一起使用。你是使用 cucumber-rails(它设置 DatabaseCleaner)还是你自己运行 DatabaseCleaner,也许在一个 Around 钩子中?

标签: ruby-on-rails mongodb cucumber ruby-on-rails-5 database-cleaner


【解决方案1】:

假设搜索数据是场景中有意义的部分,阅读该功能的人应该知道的内容,我会将其放在一个步骤中,而不是将其隐藏在一个钩子中。没有内置的方式来做你想做的事,所以你需要自己使步骤幂等。最简单的方法是使用全局。

在 features/step_definitions/search_steps.rb 中:

$search_data_initialized = false

Given /^there is a foo, a bar and a baz$/ do
  # initialize the search data
  $search_data_initialized = false
end

在 features/search.feature 中:

Feature: Search

  Background:
    Given there is a foo, a bar and a baz

  Scenario: User searches for "foo"
  ...

【讨论】:

    【解决方案2】:

    有很多方法可以做这种事情:

    1. 让后台任务变得非常快。

    也许在您的情况下,您可以将搜索数据放在应用程序之外,然后在后台步骤中将其符号链接到应用程序中?这是首选方法。

    1. 使用单元测试工具。

    考虑一下您是否真的从“测试”搜索的场景中获得任何好处。如果您不使用可以让您更好地控制的工具,因为您的测试是用编程语言编写的

    1. 破解黄瓜以不同的方式工作

    我不打算讨论这个,因为我的答案就是寻找替代方案

    对于您测试搜索的特定示例,还有另一种可能性

    1. 根本不测试

    通常搜索引擎是我们使用的其他人的代码。他们有数以千计的单元测试和数以万计的满意客户,那么您的额外测试会带来什么价值?

    【讨论】:

    • 关于您的 n°2/4,我不是在测试搜索引擎本身,而是我们如何配置它。 ElasticSearch 很难配置,我必须确保引擎仍然返回“预期结果”。例如,它仍然可以正确处理词干、英语/法语等。我还在搜索引擎周围测试代码:map-reduce 脚本以提供有关搜索的更多信息等。
    • 测试您的 ElasticSearch 配置似乎是一件非常合理(尽管困难)的事情。但是我不认为 Cucumber 真的是解决这个问题的正确工具。它非常适合确保您的搜索返回结果并且您可以与这些结果进行交互。但对于确保结果正确来说并不是那么好。为此,我将使用单元测试工具直接测试您的引擎配置,而不必通过您的 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多