Передача переменных в раздел примеров - PullRequest
1 голос
/ 22 февраля 2020

Я установил две переменные, скажем, cityA = 'New York' и cityB = 'Las Vegas' в одной функции, и "экспортировал" их с выражением * def. Теперь я хочу использовать эти переменные в другой функции

Scenario Outline: Successful transfer from <fromLocation> to <toLocation>
    * call read('re-usable.feature')    
    Given request read('request.json')
    When method post
    Then status 200

    Examples:
    | fromLocation | toLocation |
    | cityA | cityB |
    | cityB | cityA |

с запросом:

{
source: "#(fromLocation)"
destination: "#(toLocation)"
}

Мой сценарий ios не работает, потому что в запросе задан cityA / cityB, а не значения сохраненный под этими именами, я попытался использовать переменные из файла конфигурации карате и даже

Scenario Outline: Successful transfer from <fromLocation> to <toLocation>
    * def res = call read('re-usable.feature')    
    Given request read('request.json')
    When method post
    Then status 200

    Examples:
    | fromLocation | toLocation |
    | res.cityA | res.cityB |
    | res.cityB | res.cityA |

, и это передает res.cityA, res.cityB вместо Нью-Йорка / Лас-Вегаса. Кроме того, Я пробовал также следующие способы

Background:
    * call read('re-usable.feature')
Scenario Outline: Successful transfer from <fromLocation> to <toLocation>

    Given request read('request.json')
    When method post
    Then status 200

    Examples:
    | fromLocation | toLocation |
    | cityA | cityB |
    | cityB | cityA |

и

Background:
    * def res = call read('re-usable.feature')
Scenario Outline: Successful transfer from <fromLocation> to <toLocation>

    Given request read('request.json')
    When method post
    Then status 200

    Examples:
    | fromLocation | toLocation |
    | res.cityA | res.cityB |
    | res.cityB | res.cityA |

Все представленные случаи возвращают одно и то же - допустимые имена, а не значения. Если в запросе я установил, например, #(cityA) вместо #(toLocation), то все идет так, как ожидалось, но я не могу протестировать другой сценарий ios, в этом случае

@ PeterThomas вы отметили мой последний вопрос как дубликат, но связали вас предоставили не о моей проблеме;)

1 Ответ

1 голос
/ 23 февраля 2020

Переменная «подстановка» в Examples не поддерживается. Также вы, кажется, запутались между fromLocation и cityA, я настоятельно рекомендую сделать тесты простыми, поскольку я связан с вашим предыдущим вопросом .

В любом случае, особенно когда вы используете call для генерации данных вам лучше использовать table, а затем использовать al oop:

* def data = [{ cityA: 'a', cityB: 'b' }, { cityA: 'c', cityB: 'd' }]
* call read('re-usable.feature') data

Поэтому, пожалуйста, прочитайте: https://github.com/intuit/karate#data -привод -features , вам все еще нужны 2 файла объектов, но последовательность выполнения «обратная».

В противном случае, я все еще не понимаю ваш тест. Единственный способ обойти отсутствие «динамичности» в ячейках таблицы Examples заключается в следующем:

Scenario Outline:
* def res = { cityA: 'foo' }
* def value = <fromLocation>
* match value == 'foo'

Examples:
| fromLocation |
| res.cityA |

См .: examples.feature - последний пример.

Но, надеюсь, вы поймете, что используете Examples неправильный путь, который запутает всех людей, которым необходимо прочитать ваш тест в будущем. Если у вас все еще есть вопросы, задайте новый - и на этот раз дайте краткое описание варианта использования, который вы пытаетесь автоматизировать.

...