Citrus-Framework меняет переменную во время выполнения сценария - PullRequest
0 голосов
/ 25 июня 2018

Я хочу инициализировать некоторые переменные, чтобы создать новый элемент в моей базе данных, затем в том же сценарии изменить одну переменную, но оставить остальные переменные такими же и выполнить обновление.Например:

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 голосов
/ 29 июля 2018

Выражение 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 должна добавить это к шагу по умолчаниюреализации определений.

...