【问题标题】:Is there a way to feed in different values from a table to Cucumber background? Make background dynamic?有没有办法将不同的值从表格输入到 Cucumber 背景?让背景动态?
【发布时间】:2020-10-21 06:07:06
【问题描述】:

我有一个功能文件,后台步骤非常简单。但是,在该步骤中完成的设置需要使用两种不同类型的值,并且适用于该 FF 中的所有场景。有没有办法让这个背景动态化?

示例:我想做如下:

Background:
Given hospital configuration is done using '<some config>'
|some config|
| abc       |
|xyz        | 

【问题讨论】:

  • 所以基本上你想运行该功能文件中的每个功能两次。一次使用 config abc,第二次使用 config xyzzy
  • @diabolist 是的,正确的!

标签: java automation cucumber ios-ui-automation cucumber-java


【解决方案1】:

我可以想到三种方法来运行一个特性文件两次,一种是使用一种配置,另一种是使用另一种配置。

  1. 复制功能文件并更改背景,以便专门加载特定配置。

在取消此解决方案之前,请先看看一些积极因素。

  • 非常简单
  • 它很容易记录(只需将 cmets 放在关于重复的序言中)
  • 它支持特定于特定配置文件的自定义。

最后一点值得扩展。如果行为与每个配置文件相同,那么配置文件的意义何在。基本上你说它根本没有效果。如果它根本没有效果,那你为什么要测试它。如果配置文件之间的行为有所不同,那么您真的想探索和表达这些差异。

  1. 使用外部设置运行该功能两次。

这基本上归结为让 Cucumber 从环境中提取设置并运行 cucumber 两次,一次用于第一次设置,然后再次用于第二次设置。

类似

SETTING=abc cucumber ...  
SETTING=xyz cucumber ...
  1. 使用环绕钩子来运行场景的内部两次。

在这里,您要在功能上添加标签并制作自定义挂钩以两次运行场景。这等效于第二种解决方案,但您将机制嵌入到功能的单次运行中。

在 ruby​​ 中,这看起来像

# run_twice_hook.rb

Around(@run_twice) do |scenario, block|
  load_first_setting
  block.call
  load_second_setting
  block.call
end

我认为这个解决方案最接近 OP 想要的。

我也认为这是最糟糕的解决方案,因为它的技术性、棘手、隐藏和嵌入在功能运行中。它的实施和维护成本很高,而且它可能隐藏了一个潜在的业务问题(在第一个解决方案中提到)

因此,请谨慎使用此解决方案。一般来说,简单最好,重复一点比技术复杂性更可取,以避免重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2014-10-10
    • 2019-11-02
    • 1970-01-01
    • 2017-11-28
    • 2019-08-20
    相关资源
    最近更新 更多