在小黄瓜中处理/传递特征文件中的多个参数

本文关键字:文件 参数 特征 小黄瓜 处理 | 更新日期: 2023-09-27 18:28:53

如何使用特性传递多个参数。

我知道"示例:"概念的用法,但它在某种程度上使功能文件变得更加复杂和不可读

示例:

Scenario Outline: To verify that default value for some timeout when invalid/remove is set for some timeout parameter
When <parameterA> is <action> with <parameterB> for <someOtherParameterPair> in <fileName>
Then <parameterA> is updated with value <parameterB> for <someOtherParameterPair> in <fileName> as per defined <action>
Examples:
|parameterA  |parameterB  |action|someOtherParameterPair|fileNameWithSectionName|
|oneParameter|twoParameter|update|key:Value             |abc.config:appSettings |
|oneParameter|twoParameter|delete|key:Value             |def.config:appSettings |

在这里,我有大约7个参数,它们来自测试用例(由于限制,我试图适应5个参数)

我将使用步骤定义文件中的split将"someOtherParameterPair"answers"fileNameWithSectionName"一分为二。所以我总共有大约7个参数,这些参数将在测试用例中使用。

但我不确定接受Given/Whin/Then语句中如此大量的参数是否可行。这也让我的测试用例变得不可读。

在上面的场景中,我试图修改位于特定位置的*.config文件中的一些参数(我从功能文件传递这些参数,以便我的When/Then语句可以修改)。

之后我需要执行测试用例。

同样,我的测试套件中也有其他(大多数)案例。

请帮助我是BDD正确的方法。BDD会不会在维护中产生一些问题,因为我看到了很多东西(几乎所有的东西都来自)功能文件。

在小黄瓜中处理/传递特征文件中的多个参数

答案是不要这样写特性。与其用你的特性来描述你正在测试的how,不如用它来解释你正在测试whatwhy

一般来说,这意味着你不需要使用例子,当然也不需要像现在这样使用复杂的例子。您总是可以将示例的使用降低到较低的级别,例如步骤定义。

在这种情况下,您似乎应该编写一个单元测试。在这个场景中没有任何商业价值的描述。

BDD是关于描述行为并用它来推动发展。你不能在东西写完后用它来测试!!

示例表不应超过3列。否则,就不可能理解列之间的关系、测试方法、测试目标,也不可能分析测试结果。

您需要明确测试目标才能重构它。优化的可能步骤:

  1. 如果您测试某些参数在某些条件下从值oneParameter更改为twoParameter,那么有<parameterA>列的原因是什么?如果该参数应该被覆盖,那么它以前的值就不是必需的,您可以忽略它
  2. someOtherParameterPairfileNameWithSectionName之间有什么关系?你真的需要在你的表中把这些列分开吗?也许你可以把它们组合成<pathToTheParameterPair>

根据上面的假设,您的场景可以简化如下:

Scenario Outline: To verify that default value for some timeout when invalid/remove is set for some timeout parameter
When SettingName is <action> with <parameterB> for <pathToTheParameterPair> 
Then SettingName is updated with value <parameterB> for <pathToTheParameterPair> as per defined <action>
Examples:
| parameterB   |action | pathToTheParameterPair |
| twoParameter |update | abc.config:appSettings:key:Value |
| twoParameter |delete | def.config:appSettings:key:Value |