Перейти к основному содержимому

Тестирование сценария бота

Это часть серии статей, посвященной созданию бота с обращением к API сервиса OpenWeatherMap.

  1. Настройка конфигурационного файла
  2. Работа с HTTP-запросом к OpenWeatherMap API
  3. Разработка сценария
  4. Тестирование (вы находитесь здесь)

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

Тестирование .xml

Создайте файл с тестами test.xml в папке test.

<test integration="false">

<test-case id="1">
<q>/start</q>
<a state="/Start"/>
</test-case>

<test-case id="2">
<mockData>
<query method="get">http://api.openweathermap.org/data/2.5/weather?APPID=***&amp;units=metric&amp;lang=ru&amp;q=москва</query>
<response type="json" status="200">{"coord":{"lon":37.62,"lat":55.75},"weather":[{"id":500,"main":"Rain","description":"небольшой дождь","icon":"10d"}],"base":"stations","main":{"temp":20.33,"feels_like":18.17,"temp_min":20,"temp_max":21,"pressure":1006,"humidity":68},"visibility":10000,"wind":{"speed":5,"deg":200},"rain":{"1h":0.43},"clouds":{"all":100},"dt":1600337349,"sys":{"type":1,"id":9029,"country":"RU","sunrise":1600311939,"sunset":1600357345},"timezone":10800,"id":524901,"name":"Москва","cod":200}</response>
</mockData>

<q>/start</q>
<a>Привет! Я электронный помощник. Я могу сообщить вам текущую погоду в любом городе. Напишите город.</a>
<q>Москва</q>
<a>Сегодня в городе Москва небольшой дождь, 20°C</a>
<a>Советую захватить с собой зонтик!</a>
</test-case>


<test-case id="3">
<q>/start</q>
<a state="/Start"/>
<q>Расскажи что-нибудь еще</q>
<a state="/CatchAll"/>
<q>Москва</q>
<a state="/GetWeather"/>
</test-case>

</test>

Нажмите на иконку Сохраните написанный сценарий, расположенную справа на верхней панели, для сохранения написанного сценария.

Напишем 3 варианта тестов:

  1. <test-case id="1"> — проверяет основной сценарий работы бота, а точнее, попадает ли бот после старта в стейт GetWeather.
  2. <test-case id="2"> — проверяет корректность работы функции-обработчика ответа на HTTP-запрос.
  • При написании этого теста воспользуемся тегом <mockData>. Он позволяет задавать в тестах фиктивные ответы на HTTP-вызовы.
  • Внутри тега <mockData> сделаем вызов API с помощью тега <query method="get"></query>. URL запроса внутри <mockData> должен полностью совпадать с URL, прописанным в сценарии. Вместо звездочек в APPID=*** подставьте свой API-ключ.
  • Пример ответа от API скопируем из лога сервера во вкладке Логи или с помощью метода log(toPrettyString(response)) залогируем ответ в скрипте сценария. Ответ указывается внутри тега <response type="json" status="200"></response>.
  • Запретим тестовым сценариям отсылать реальные HTTP-запросы, установив в теге <test> флаг integration="false".
предупреждение
В xml-тестах важно не забывать экранировать специальные символы: амперсанды, кавычки и угловые скобки. Например, в нашем URL амперсанд & экранируется до &amp;.
  1. <test-case id="3"> — проверяет работу стейта CatchAll.
подсказка

Тестирование с помощью тестового виджета

Протестируем работу бота с помощью тестового виджета.

Запустим бота и попросим его рассказать о текущей погоде в Нью-йорке:

Тестовый виджет

Теперь проверим, что стейт CatchAll срабатывает на сообщение, которое не было предусмотрено в сценарии:

Тестовый виджет

Теперь подключите самостоятельно канал и пообщайтесь с ботом.