为了账号安全,请及时绑定邮箱和手机立即绑定

具有众多参数的黄瓜步骤

具有众多参数的黄瓜步骤

墨色风雨 2023-02-23 18:03:38
有没有办法将参数组合成一个参数,例如传递一个产生所有参数的数据结构?例如,我想避免使用带有太多参数的方法: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 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

在您的步骤中使用数据表可以帮助组织这些信息:


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(请参阅Cucumber和Cucumber 数据表中的数据表)。为了某些编译时安全,您应该能够将表映射到 POJO。


查看完整回答
反对 回复 2023-02-23
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

更好的方法是将所有这些示例从功能中取出,并将它们下推到步骤定义调用的辅助方法中。


示例表中的每组示例都应该有某种含义(否则为什么它们首先出现在那里!)。您可以使用此均值来确定捕获特定参数组合的名称。然后,您可以在场景中使用该名称来替换参数。


希望您可以在这里使用 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)。


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信