Как передать несколько примеров с разным количеством параметров в файл функции Cucumber

Один из шагов в моем файле функций требует двух параметров, таких как логин и пароль для нескольких систем, которые по отдельности работают нормально, но есть ли способ передать несколько примеров для отдельных шагов? Первым шагом в файле функций является вызов POST API и получение ответа на основе параметров. Краткое описание сценария: проверка результатов поиска. Учитывая, что я установил токен авторизации в заголовке, указав ниже полезную нагрузку тела файла функции

| Key       | Value           | 
|InstituteID| <InstitutionID> |         
|InstituteID|
|1234456    |
|1345679    |
|4564565    |

и второй шаг:

Пользователь вводит "<Username>", "<Password>" и нажимает кнопку "Войти".

|Username|Password |
|test    |abc      |
|test2   |abc      | 

Не могли бы вы поделиться, есть ли способ добиться этого? Могу ли я передать несколько примеров в одной схеме сценария, как указано выше? Мне нужно несколько ответов с шага 1 для выполнения шага 2, поэтому я не могу разбить на два сценария. Спасибо.


person TestUser12    schedule 09.08.2020    source источник
comment
Вы хотите протестировать обе комбинации пароля и входа на втором этапе для каждого InstituteID на первом этапе?   -  person Vitaly Roslov    schedule 10.08.2020


Ответы (2)


Да, вы можете передать несколько примеров. Приведу пример:

Scenario Outline: I want to login
    Given I am on the login page
    Then I log in with "<Username>" and "<Password>"
    
    Examples:
        |  Username  |  Password  |
        |  User1     |  12345678  |
        |  User2     |  12345679  |
        |  User3     |  12345670  |

Теперь описанный выше сценарий будет выполняться 3 раза для каждого из этих примеров.

В пошаговом файле вы можете создать такую ​​функцию:

@Given("^I am on the login page$")
public void navigate_to_login_page() {
    //some logic
}

@Then("^I login with "([^\"]*)\" and "([^\"]*)\"$")
public void login(String username, String pass) {
    //some logic
}
    
person Verma Aman    schedule 10.08.2020

Вы не можете писать примеры для отдельных шагов, только для всей схемы сценария.

Но вы можете написать сколько угодно примеров и смешать в них свои параметры.

Examples:
|Username|Password|InstituteID| 
|test    |abc      |1234456    |
|test    |abc      |1345679    |
|test    |abc      |4564565    |
|test2   |abc      |1234456    |
|test2   |abc      |1345679    | 
|test2   |abc      |4564565    | 

Изменить 1:

А DataTable может вам помочь

Определите код клея следующим образом, помня о параметре метода DataTable:

    @When("A POST API is called with parameters:")
    public void callPostApi(DataTable table) {
        List<List<String>> rows = table.cells(1); // skip the header
        for (List<String> row : rows) {
           String parameter = row.get(0);
           // Call the POST API for the parameter here, save, check the results etc.
        }
    }

И используйте его в файле .feature

  When A POST API is called with parameters:
  | Parameter | 
  | 123       |
  | 456       |
  | 789       |
  | abc       |
  | def       |
person Vitaly Roslov    schedule 10.08.2020
comment
в моем случае это не сработает. Поскольку я хочу выполнить первый шаг с InstituteID, чтобы выполнить 5 раз для каждого института и войти в систему только один раз для каждого института, чтобы проверить записи. - person TestUser12; 10.08.2020
comment
Тогда DataTable, вероятно, подойдет вашему варианту использования лучше, чем Схема сценария с примерами. - person Vitaly Roslov; 11.08.2020