从外部文件加载黄瓜/小黄瓜中的数据



我在JS/Node项目中使用cucumber(并用小黄瓜编写测试(,我发现自己在不同的示例中复制了大量测试数据(Scenario Outline示例(。

大多数情况下都使用具有不同属性的用户列表,需要使用这些列表来确保网页的不同部分适用于所有用户。

因此,测试以这样的方式结束:

Scenario: s1
Given xxx
Then yyy <field1>
Then zzz <field2>
Examples:
| username | field1 | field2 |
| user1    | f11    | f21    |
| user2    | f12    | f22    |
Scenario: s2
Given xxx
Then yyy <field1>
Then zzz <field2>
Examples:
| username | field1 | field2 |
| user1    | f11    | f21    |
| user2    | f12    | f22    |

正如您所看到的,场景s1s2examples是相同的。。。所以我认为从外部文件加载它们是一个好主意,这样可以很容易地在场景/文件之间共享(这只是一个有2个场景的简单例子,但想想一个具有很多功能的真实应用程序(。

如果用户的数据被更新,这意味着我必须更新所有的例子。。。而如果我只是从一个外部文件加载它,它将只是一个更新的地方。

我看到一些网站提供了这一功能,比如这里,但我不知道如何自己做到这一点,比如:

Scenario: s2
Given xxx
Then yyy <field1>
Then zzz <field2>
Examples: {"dataFile":"./users.csv"}

总有一些替代方案,比如预处理.feature文件,并用文件的内容或类似的内容替换这些行。。。但我想知道是否有更原生或直接的东西,因为我不想走那条路,或者大量定制。。。

我找不到任何东西,所以欢迎任何东西。

您不能使用功能文件进行任何编程。这是设计,因为功能文件旨在成为人类可读的文档形式;它应该以业务和it利益相关者都能理解的方式描述系统的预期行为。

考虑到这一点,问题就变成了是否需要在要素文件中添加字段及其值的详细信息。有了这些详细信息,文件是否更容易理解?(剧透:没有(。

我的建议是将这些细节转移到步骤定义中,并仅用高级术语描述特定情况(步骤/场景/示例(。

例如,我工作的一个系统处理订单。我们有不同类型的订单,包括不同类型的产品、交货方式、付款方式等。虽然每个订单都需要填写所有这些字段,但并非所有字段都与任何特定场景相关。因此,我们在特征文件中描述相关部分,并对其余数据使用默认值。这些数据是在创建我们需要的对象的助手方法中设置的,步骤定义为特定步骤/场景调用相关的助手方法。

因此步骤Given an order with credit card payment将创建一个默认订单并添加一个信用卡支付。步骤Given an order with multiple products创建具有多个产品(以及默认支付信息等(的订单。

(虽然你可以将这些数据存储在Excel或其他文件中并从中读取,但我可以根据经验告诉你,这会让你的生活变得更艰难,而不是更容易。设置这些数据比使用编程语言创建对象/数据需要更多的时间,而且你的测试运行时间也更长,因为处理文件需要时间(。

最新更新