具有众多参数的黄瓜步骤

时间:2019-06-28 15:42:53

标签: java cucumber

是否有一种方法可以将参数分组为单个参数,例如通过一个可以产生所有数据的数据结构?

例如我想避免使用带有太多参数的方法:

Scenario Outline: My scenario has too many parameters
    When I perform my request with these inputs: <param1>, <param2>, <param3>, <param4>, <param5>, <param6>, <param7>, <param8>, <param9>, <param10>, <param11>
 Examples:
  | param1 | param2 | param3 | param4 | param5 | param6 | param7 | param8 | param9 | param10 | param11 |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |

然后是方法:

@Given("^When I perform my request with these inputs: (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+), (.+)$")
public void tooMany(String param1, String param2, String param3, String param4, String param5, String param6, String param7, String param8, String param9, String param10, String param11)  {
...

是否有更好的方法来转移那么多输入?

谢谢

2 个答案:

答案 0 :(得分:3)

在步骤中使用数据表可以帮助组织以下信息:

Scenario Outline: My scenario has too many parameters
  When I perform my request with the following inputs:
    | Field   | Value     |
    | param1  | <param1>  |
    | param2  | <param2>  |
    | param3  | <param3>  |
    | param4  | <param4>  |
    | param5  | <param5>  |
    | param6  | <param6>  |
    | param7  | <param7>  |
    | param8  | <param8>  |
    | param9  | <param9>  |
    | param10 | <param10> |
    | param11 | <param11> |

Examples:
  | param1 | param2 | param3 | param4 | param5 | param6 | param7 | param8 | param9 | param10 | param11 |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |
  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy  | dummy   | dummy   |

您的步骤定义将变为:

@When("When I perform my request with the following inputs:")
public void notTooManyAnymore(DataTable table) {
    // Use table to get the params
}

现在,您可以从table中提取参数(请参见Data Tables in CucumberCucumber Data Tables)。为了确保编译时的安全,您应该可以将表映射到POJO。

答案 1 :(得分:0)

一种更好的方法是将所有这些示例从功能中删除,并将其推入步骤定义所调用的帮助器方法中。

示例表中的每组示例都应具有某些含义(否则为什么它们会排在首位!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在方案中使用该名称替换参数。

希望您可以在此处使用foo,bar和request作为名称来对付我,您的示例没有足够重要的意义来提取更好的名称。

遵循此步骤

Scenario: Make a foo request
  When I perform a foo request

并将其作为ruby实现(您必须自己将其翻译为java)

module RequestStepHelper
  def foo_example_params
    {
      param1: dummy,
      param2: dummy,
      ...
    }
  end

  def perform_request(params : {})
    # process hash to make correct call
    ...
  end
end
World RequestStepHelper

When 'I perform a foo request' do
  perform_request(foo_example_params)
end

因此,现在已经从功能文件中删除了所有垃圾文件,这些文件现在可以专注于描述正在发生的事情及其重要性。此外,所有参数的处理现在都在代码中完成,在代码中您可以使用更多功能,并且可以执行诸如获取现有参数集并对其进行修改等操作。 foo_example_params.except(param1)