ym88659208ym87991671
Как тестировать сценарий | Документация для разработчиков
Skip to main content

Как тестировать сценарий

Протестировать свой сценарий можно следующими способами:

  • Онлайн - с помощью приложения Салют или собственного устройства;
  • Офлайн - в виде локального тестирования.

Тестирование онлайн

Протестировать сценарий можно через приложение Салют или собственное устройство. Для этого:

  1. Локально запустите смартап с помощью команды:

    python3 manage.py run_app
  2. Передайте в интернет порт сервера. Значение по умолчанию - 8000. При отсутствии внешнего IP-адреса можно использовать специальные сервисы. Ниже представлен пример получения IP через Ngrok:

    1. Зарегистрируйте аккаунт на ngrok для получения токена.

    2. Скачайте и распакуйте бинарный файл для своей системы — ngrok.

    3. Запустите ngrok:

      ./ngrok http 8000
  3. Перейдите в свой смартап через Studio и укажите в поле "Настройки вебхука" https адрес, который был получен в результате выполнения предыдущего пункта. Сохраните изменения.

4) Убедитесь, что вы заходите в Studio по тому же Сбер ID, что и на устройстве, с которого хотите протестировать свой сценарий.

5) Скажите ассистенту "Запусти <имя вашего смартапа>".

Если все шаги выполнены верно, то после голосовой команды запустится сценарий run_app.

Тестирование офлайн

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

python3 manage.py local_testing

В запущенной консоли можно:

  • просматривать логи и ответы вашего приложения;
  • вводить сообщения от имени пользователя, которые будут передаваться в текущий сценарий.

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

  • show_scenarios - показывает все доступные в вашем приложении сценарии;
  • show_envs - показывает все доступные переменные и настройки, которые можно менять с помощью следующей команды;
  • set - выставляет указанной переменной или настройке выбранное значение.

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

set intent run_app

Функциональные тесты

Вы можете автоматизировать тестирование смартапа с помощью функциональных тестов. Такие тесты описываются в json-файлах по определенному шаблону. Чтобы создать папку со сгенерированными шаблонами тестовых файлов, выполните команду:

python3 manage.py tests --gen <имя новой папки с тестами>

Каждый тестовый файл содержит хотя бы один тест-кейс, в котором есть список сообщений и может быть задано начальное состояние пользователя. Список сообщений — это последовательность объектов с полями request и response. На основе значения поля request формируется запрос в смартап, а полученный ответ сравнивается со значением поля response. Для выполнения всех тестов выполните команду:

python3 manage.py tests --run <имя папки с тестами>

Если тест предполагает выполнение kafka-интеграции, ответом на сообщение, вызывающее интеграцию, будет запрос в интеграцию. Следующим сообщением вы должны имитировать ответ интеграции в поле request и поставить флаг link_previous_behavior в true. Пример:

{
"test_case_1": {
"user": {},
"messages": [
{
"request": {
"payload": {
"message": {},
"intent": "integration_scenario"
}
},
"response": {
"user": {},
"messages": [
{
"messageName": "INTEGRATION_MESSAGE_NAME",
"payload": {
"key": "value"
}
}
]
}
},
{
"link_previous_behavior": true,
"request": {
"messageName": "EXAMPLE_SYSTEM_REPLY_MESSAGE_NAME",
"payload": {
"other_key": "other_value"
}
},
"response": {
"user": {},
"messages": [
{
"messageName": "ANSWER_TO_USER",
"payload": {
"pronounceText": "Успех!"
}
}
]
}
}
]
}
}

Предопределенные поля в тестах

Вы можете использовать существующие шаблоны запроса (request) и ответа (response). Эти шаблоны содержат предопределенные поля со значениями по умолчанию. Они находятся в файле predefined_fields_storage.json в директории static/references.

Чтобы их использовать, добавьте поле predefined_fields в json-файл с вашими функциональными тест-кейсами. В значение этого поля поместите ключ (название шаблона) из файла predefined_fields_storage.json.

Пример использования предопределенных полей — это тест-кейс hello_oleg_5years_programm_no из файла hello_scenario_tests.json в директории static/references/tests.

{
"hello_oleg_5years_programm_no": [
{
"request": {
"message": {},
"predefined_fields": "default_request_params"
},
"response": {
"predefined_fields": "default_response_scheme",
"pronounce_texts": [
"Как тебя зовут?"
]
}
},
{
"request": {
"message": {
"original_text": "Олег",
"normalized_text": "Олег .",
"tokenized_elements_list": [
{
"text": "Олег",
"grammem_info": {
"animacy": "anim",
"case": "nom",
"gender": "masc",
"number": "sing",
"raw_gram_info": "animacy=anim|case=nom|gender=masc|number=sing",
"part_of_speech": "NOUN"
},
"lemma": "Олег"
},
{
"text": ".",
"lemma": ".",
"token_type": "SENTENCE_ENDPOINT_TOKEN",
"token_value": {
"value": "."
},
"list_of_token_types_data": [
{
"token_type": "SENTENCE_ENDPOINT_TOKEN",
"token_value": {
"value": "."
}
}
]
}
]
},
"predefined_fields": "default_request_params"
},
"response": {
"predefined_fields": "default_response_scheme",
"pronounce_texts": [
"Привет, Олег! Меня зовут Сбер. Прошу любить и не жаловаться! Простите за глупую шутку, волнуюсь Сколько лет ты программируешь на Python?"
]
}
}
}

Также вы можете добавлять свои шаблоны с нужными полями, поместив их в файл predefined_fields_storage.json.

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

Команда запуска тестов с использованием предопределенных полей:

python <YOUR_APP_NAME>/manage.py tests static/references/tests static/references/predefined_fields_storage.json --run
Обновлено 13 сентября 2022

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней