在Cucumber中,是否可以为整个功能运行后台步骤?那么每个场景都不会重复吗?
我正在搜索引擎上运行一些测试,我需要使用测试数据为搜索引擎预先播种。由于这些数据生成和处理的时间可能很长(我使用Elasticsearch并且我需要构建索引),所以我只做一次这样的背景,但仅适用于同一功能下的所有测试。
黄瓜有可能吗?
请注意,我使用的是MongoDB,因此我不使用事务而是截断,我相信每次测试后我都会自动运行DatabaseCleaner,我想我必须禁用(可能还有@)提?)
编辑:
是的我正在使用Cucumber和Rails的Ruby步骤
EDIT2:具体例子
我需要测试我的搜索引擎总是返回相关结果(例如,搜索"买家"它应该返回结果"买家","购买","购买"等(与ES配置有关),其他上下文信息正确获取更新(例如在侧栏中
我有类别/过滤器,其中包含括号中的点击次数,我必须确保在用户使用过滤器时刷新这些数字)
为此,我使用十几个结果为搜索引擎预先播种,然后运行所有基于相同输入的测试。我经常有"例子"只是做一些略有不同的条款,但基于相同的种子
答案 0 :(得分: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"
...
答案 1 :(得分:1)
有很多方法可以做这种事情:
也许在您的情况下,您可以将搜索数据放在应用程序之外,然后在后台步骤中将其符号链接到应用程序中?这是一种首选方法。
考虑一下你是否真的从使用方案中获得任何好处来测试'搜索。如果您没有使用可以让您更好地控制的工具,因为您的测试是用编程语言编写的
我不打算这样做,因为我的回答是关于寻找替代方案
对于您测试搜索的特定示例,还有一种可能性
通常搜索引擎是我们使用的其他人的代码。他们有成千上万的单元测试和成千上万的满意的客户,那么您的额外测试会带来什么价值?