方案执行期间的Citrus-Framework更改变量

时间:2018-06-25 20:44:06

标签: java cucumber citrus-framework

我想初始化一些变量以便在数据库中创建一个新项,然后在相同的情况下更改一个变量,但保持其他变量不变并进行更新。例如:

Update path: path/${resourceId}/${orderId}

@DEV @API
  Scenario: order not found in container
    Given variables
      | resourceId           | citrus:randomUUID()           |
      | orderId              | citrus:randomString(10,false) |
      | errorCode            | 404                           |
      | reasonPhrase         | NOT_FOUND                     | 

 When <ApiClient> sends message <containerPostRequest>
 And <ApiClient> should receive Json message <containerPostResponse>
 Given variable orderId is "newString"
 And <ApiClient> sends message <addOrderRequest>
 Then <ApiClient> should receive Json message <errorResponse>

我试图抛出未找到订单的异常,但是使用此方法从一开始就将orderId设置为newString,以便使用newString创建和定位订单。

这种方法可行吗?

我可以对场景和背景进行硬编码以实现我的目标,但是我尝试使用的上述方法将减少我需要编写的代码量。

1 个答案:

答案 0 :(得分:0)

表达式Given variable ... is "..."覆盖测试用例初始化中的变量。在您的情况下,这不是我们所需要的。您需要使用测试操作来覆盖变量,这是测试执行的一部分。您可以使用以下自定义步骤定义来做到这一点:

Then set variable orderId to "newString"

您需要添加实现此步骤的步骤定义。

public class SetVariableStep {

    @CitrusResource
    private TestDesigner designer;

    @Then("^set variable ([^\\s]+) to \"([^\"]*)\"$")
    public void setVariable(String name, String value) {
        designer.createVariable(name, value);
    }
}

Citrus团队应将此添加到默认步骤定义实现中。