Cucumber for REST,在重复步骤时写入功能文件

Cucumber for REST, writing feature file when having duplicate steps

我在编写功能文件时遇到了问题,因为我目前想在每个场景中定义多个步骤。这是我的功能文件:

Feature: Add new voucher
   As a user I want to be able to add vouchers

Scenario Outline: Add new voucher with an invalid voucher
    Given a trip voucher <Voucher>
    When I access "/voucher" endpoint
    Then error message should be "Voucher is invalid"

Examples:
  |Voucher    |
  |ABCDEFG    |
  |1234567    |
  |invaL!Ds   |

Scenario Outline: Add a previously redeemed voucher
    Given a used voucher <Voucher>
    When I access "/voucher" endpoint
   Then error message should be "Voucher has already been used"

Examples:
  |Voucher        |
  |VALIDVOUCHER   |

我正致力于在 Go 上构建 REST API,同时学习在 Java 上创建集成测试,因为 QA 用于测试。 When I access x endpoint 线上的最佳做法是什么?我知道它会产生 Duplicate step definition error。我应该更改编写功能文件的方式,还是我遗漏了 Java 个技巧。

我目前在工作中使用 SpecFlow + .NET,过去我也使用过 jBehave+Java。

您所做的一切都很好,应该不会给您带来任何错误。事实上,拥有这种 Given-When-Then 框架的优势之一是能够重用短语。

您需要注意的是确保您的步骤:当我访问“/voucher”端点时:应该只映射到步骤文件中的一个 Java 方法。所以,像这样:

@When("I access "/voucher" endpoint")
public void WhenIAccessVoucherEndpoint(){
// implementation of your step. may be make a Rest call.  
}

因此,每次您在场景文件中引用此步骤时,框架都会为您调用此方法。这样,您将构建基本的构建块(如果您正在测试具有页面对象模式的网站,则构建页面)和短语。因此,编写更多场景将变得越来越容易,因为这只是找到实现的正确短语并查看它们是否可以重用的问题。

在您的示例中,如果两个步骤定义都调用相同的端点并执行相同的操作,那么建议 Re-Use 步骤定义。

作为最佳实践并充分利用该工具,始终建议通过参数化短语并将数据作为输入参数传递来提高步骤定义的可重用性。

如果将此类可重复使用的步骤定义分组在通用步骤定义下 class 并进行引用,这将有利于代码维护。该工具能够扫描所有可用的步骤定义并调用相应的函数。

如果我们有重复的步骤定义,则可能会出现 "matches more than one step definition" 错误消息。

如果还是想维护两个不同的step-definition function,并且各自有不同的实现,那么建议修改语句