Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cumber for REST,在重复步骤时写入特征文件_Java_Testing_Automation_Cucumber - Fatal编程技术网

Java Cumber for REST,在重复步骤时写入特征文件

Java Cumber for REST,在重复步骤时写入特征文件,java,testing,automation,cucumber,Java,Testing,Automation,Cucumber,我在编写功能文件时遇到了问题,因为我目前希望在每个场景中有多个步骤定义。这是我的功能文件: 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" end

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

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   |
功能:添加新凭证
作为用户,我希望能够添加凭单
场景大纲:添加带有无效凭证的新凭证
给我一张旅行券
当我访问“/凭证”端点时
则错误消息应为“凭证无效”
示例:
|凭单|
|ABCDEFG|
|1234567    |
|无效!Ds|
场景大纲:添加以前兑换的凭证
给一张用过的凭单
当我访问“/凭证”端点时
则错误消息应为“凭证已被使用”
示例:
|凭单|
|VALIDVOUCHER|

我正在学习如何在Java上创建集成测试,因为QA用于测试,所以我正在构建一个RESTAPI。当我访问x端点时,在线
上的最佳实践是什么?我知道它会产生重复步骤定义错误。我是否应该更改编写功能文件的方式,或者我遗漏了一些Java技巧。

我目前正在使用SpecFlow+.NET,过去也使用过jBehave+Java

你所做的是完全好的,它不应该给你任何错误。事实上,拥有这样的框架的优点之一是能够重用这些短语

您需要注意的是,确保您的step:When I access“/凭证”端点:应该只映射到steps文件中的一个Java方法。比如说:

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

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

在您的示例中,如果两个步骤定义调用相同的端点并执行相同的操作,则建议
重新使用步骤定义

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

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

如果我们有重复的步骤定义,可能会出现
“匹配多个步骤定义”
错误消息

如果您仍然希望维护两个不同的步骤定义函数,并且每个函数都有不同的实现,那么建议修改这些短语