Сценарии вложенности? Как я мог бы заставить сценарий использовать другие сценарии в заданном операторе?

#bdd #python-behave

#bdd #python-вести себя

Вопрос:

Я изучаю использование поведения при тестировании чат-бота.

Я могу определить простые сценарии, такие как

 Scenario: Asked a widget function question
   Given a new dialog
   When the visitor asks
   """
   What do your widgets do?
   """
   Then bot should explain widget function
  
 Scenario: Asked a widget cost question
   Given a new dialog
   When the visitor asks
   """ 
   How much does your widget cost?
   """
   Then bot should provide widget cost
  

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

Для этого вам понадобится сценарий, подобный этому

 Scenario: Asked a widget function question and price question
   Given a new dialog
   When the visitor asks
   """
   What do your widgets do?
   """
   And the bot explains widget function

   When the visitor asks
   """ 
   How much does your widget cost?
   """
   Then bot should provide widget cost
  

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

Я бы предпочел каким-то образом «вложить» сценарии. Что-то вроде этого (я знаю, что это недопустимо).

  Scenario: Asked a widget cost question
   Given user Asked a widget function question
   When the visitor asks
   """ 
   How much does your widget cost?
   """
   Then bot should provide widget cost
  

Как я мог бы сделать что-то подобное в поведении? Я думал о том, чтобы, возможно, использовать given , when и then декораторы внутри step_impl функций…

Ответ №1:

Сделайте каждое из предыдущих сообщений Given .

 Scenario: Asked a widget function question and price question
    Given a new dialog
    And the visitor already asked
        """
        What do your widgets do?
        """
    When the visitor asks
        """
        How much does your widget cost?
        """
    Then bot should provide widget cost
  

Given Оператор для предыдущих вопросов может явно ожидать правильного ответа, или он может просто дождаться любого ответа, прежде чем перейти к следующему шагу. Таким образом, предварительные условия для получения цены виджета четко указаны как заданные, что хорошо вписывается в стиль теста BDD «Когда-то». Вы также не загромождаете свой сценарий кучей Then, которые напрямую не связаны со сценарием.