Случайная строка в сценариях огурца - PullRequest
0 голосов
/ 25 июня 2018

Я тестирую графический интерфейс с использованием огурца. Мне нужно протестировать CRUD-операции в графическом интерфейсе.

Когда я пишу сценарий для создания новой сущности в графическом интерфейсе, я не могу запускаться несколько раз, так как во второй раз происходит сбой, потому что идентификатор, указанный для сущности, уже существует (созданный при первом запуске) в системе во второй раз я запускаю тест.

Система, которую я тестирую, не позволяет удалять объекты. Система должна быть запущена в специальном режиме для удаления объектов, поэтому удаление объекта, созданного после теста, не вариант.

Было бы здорово, если бы я мог использовать случайное число для идентификатора сущности. Для примера:

when user creates a new Branch with following values:
|Branch ID|<random_string_1>|
|Address|1, abc, def.|
|Telephone|01111111111|
And user searches for a branch by "Branch ID" = "<random_string_1>"
Then branch details should be as following
|Branch ID|<random_string_1>|
|Address|1, abc, def.|
|Telephone|01111111111|

Есть ли в огурце возможность сделать что-то подобное? Или есть какой-то другой способ, которым я могу достичь этого?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Трансформаторная аннотация больше не поддерживается в Cucumber 3. Поэтому вы должны заменить обычными формами:

@When("^user creates a branch of name "([^"]*)" with following values$")
public void instanceTableIsFilteredForUniqueInstanceBy(String branchName, DataTable fieldValues) {
    fieldValues = RandomStringTransformer.INSTANCE.transform(fieldValues);

    //Now, fieldValues table values and branchName are replaced with random values if they were in format <random_string_SOMETHING>
}

Прочтите это для получения дополнительной информации о миграции: http://grasshopper.tech/98/

0 голосов
/ 23 ноября 2018

Это то, что я сделал в конце.

Добавил этот класс преобразователя в набор тестов.

public class RandomStringTransformer extends Transformer<String> {
    private static final Map<String, String> RANDOM_STRINGS = new HashMap<>();   //Key -> random string
    public static final RandomStringTransformer INSTANCE = new RandomStringTransformer();

    @Override
    public String transform(String input) {
        return transformString(input);
    }

    public DataTable transform(DataTable dataTable) {
        dataTable.getGherkinRows().forEach(dataTableRow -> dataTableRow.getCells().replaceAll(this::transformString));
        return dataTable;
    }

    private String transformString(String input) {
        final String[] inputCopy = {input};
        Map<String, String> replacements = new HashMap<>();
        Matcher matcher = Pattern.compile("(<random_string_[^>]*>)").matcher(input);
        while (matcher.find()) {
            String group = matcher.group(0);
            replacements.put(group, RANDOM_STRINGS.computeIfAbsent(group, key -> Utilities.getNextUniqueString()));
        }
        replacements.forEach((key, value) -> inputCopy[0] = inputCopy[0].replace(key, value));
        return inputCopy[0];
    }
}

Использовал преобразователь в пошаговых определениях.

@When("^user creates a branch of name "([^"]*)" with following values$")
public void branchIsCreatedWithDetails(@Transform(RandomStringTransformer.class) String branchName, DataTable fieldValues) {
    fieldValues = RandomStringTransformer.INSTANCE.transform(fieldValues);

    //Now, fieldValues table values and branchName are replaced with random values if they were in format <random_string_SOMETHING>
}
...