Интеграционный тест с использованием Bot Framework и DirectLine (1)

· 3 мин чтения

Поскольку я начал работать в компании в течение короткого периода времени, мне поручили работать над интеграционным тестом для Bot Framework.

Моя работа в группе — сделать бота максимально стабильным, но прежде всего, что такое Bot Framework?

Создавайте, подключайте, развертывайте интеллектуальных ботов и управляйте ими, чтобы естественным образом взаимодействовать с вашими пользователями на веб-сайте, в приложении, в Cortana, Microsoft Teams, Skype, Slack, Facebook Messenger и т. д. Быстро начните работу с полноценной средой для создания ботов, платя только за то, что вы используете.

Вы можете найти дополнительную информацию о Bot Framework прямо здесь.

Следующее объяснение не охватывает всю основную информацию о том, как работает Bot Framework. Если вы не понимаете, пожалуйста, просмотрите официальную документацию.

Зачем мне нужен интеграционный тест?

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

Тест интеграции с ботами?

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

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

Обзор решения.

Чтобы это работало, я использовал тестовый проект в Visual Studio, который будет использовать WebClient для API Rest и файл Json, где мы будем хранить наши случаи.

JSON-файл

[[[ТОК_1]]]

Как видите, у нас есть:

  • Секрет Директа -> секрет от опубликованного бота
  • Конечная точка генерации токена Directline -> конечная точка для получения токена с использованием секрета.
  • Конечная точка разговора по прямой линии -> конечная точка, чтобы поиграть с разговором.
  • Вступление -> тестовый пример
    • Запрос -> что отправляем в беседу
    • Ответ -> то, что мы ожидаем получить
    • Assert -> что мы сравниваем

Десериализация

У нас есть идеально отформатированный файл json, теперь нам нужно загрузить его в решение, поэтому мы будем использовать JSON.NET и некоторые классы. Сначала у нас есть коллекция записей, в которой есть все, а затем для каждой коллекции есть список записей.

[[[ТОК_2]]]

И это объект, который имеет имя, запрос, ответ и утверждение для тестового примера.

[[[ТОК_3]]]

Разбор json в объект в тестовом примере

Имея классы для объекта синтаксического анализа, это довольно просто, поскольку нам нужно читать как объект.

[[[ТОК_4]]]

Теперь, имея эту коллекцию, мы сможем просмотреть ее и получить информацию, используя, например, foreach.

 foreach (TestEntry entry in data.Entries)
    {
      ....
    }

И на этом всё, следующая часть будет включать авторизацию для DirectLine, помните, что весь код хранится у меня на github в репозитории this.