Тестирование сценария с переменными
Тестирование сценария бота — это пошаговое описание взаимодействие пользователя с ботом и ожидаемых ответных реакций.
Если вы используете в своем сценарии переменные $client
и $session
, вы можете протестировать использование этих объектов при помощи тега <context>
.
Рассмотрим тестирование сценария бота с разной функциональностью для авторизованных пользователей и нет. Например, корпоративного HR-бота, для работы с которым сотрудникам компании нужно авторизоваться. Иначе основные функции бота не будут доступны.
Сценарий
Пример сценария, где пользователь должен авторизоваться:
require: phoneNumber/phoneNumber.sc
module = sys.zb-common
theme: /
state: Start
q: $regex</start>
a: Здравствуйте! Это HR-бот Just AI. Авторизуйтесь, чтобы продолжить.
state: IncomeRecord
q!: * [2] ндфл *
if: $client.isAuthorized
a: Завел задачу.
# ... Код, в результате которого бот заводит задачу.
else:
go!: /Unauthorized
state: Unauthorized
a: Вы не авторизованы. Чтобы авторизоваться, введите номер телефона, и я отправлю на него код подтверждения.
state: GetPhoneNumber
q: * $mobilePhoneNumber *
script:
# Выполняется HTTP-запрос к API. Из $parseTree извлекается номер и отправляется в запросе.
var res = $http.post("https://example.com?phone=" + $parseTree._mobilePhoneNumber);
# Внутренняя система генерирует код подтверждения, отправляет клиенту SMS-сообщение и возвращает код в ответе.
$session.authCode = res.data.authCode;
a: Введите код подтверждения. Я только что отправил его на номер {{$parseTree._mobilePhoneNumber}}.
state: GetAuthCode
q: $regexp<\d{4}>
# Код, который ввел пользователь, сравнивается с тем, что вернула внутренняя система.
if: $session.authCode === $parseTree.text
script:
$client.isAuthorized = true;
a: Завел задачу.
# ... Код, в результате которого бот заводит задачу.
else:
a: Введен неверный код, повторите попытку.
go: ..
Тестирование сценария
Фрагмент в сценарии, где пользователь авторизован, можно покрыть в тесте при помощи тега <context>
:
<test>
<test-case id="AuthorizedUser">
<q>/start</q>
<a>Здравствуйте! Это HR-бот Just AI. Авторизуйтесь, чтобы продолжить.</a>
<context var="client">
{
"isAuthorized": true
}
</context>
<q>Хочу получить справку 2-НДФЛ.</q>
<a>Завел задачу.</a>
</test-case>
</test>
Этот же фрагмент сценария можно покрыть в тесте при помощи тега <mockData>
.
При использовании этого тега вам будет нужно задать заглушки ответов (мок-объекты).
Вам также придется дублировать сценарий авторизации в других тест-кейсах.
<test>
<test-case id="AuthorizedUser">
<q>/start</q>
<a>Здравствуйте! Это HR-бот Just AI. Авторизуйтесь, чтобы продолжить.</a>
<q>Хочу получить справку 2-НДФЛ.</q>
<a>Вы не авторизованы. Чтобы авторизоваться, введите номер телефона, и я отправлю на него код подтверждения.</a>
<mockData>
<query method="post">https://example.com?phone=${phone}</query>
<parameters>
<phone>+79000000000</phone>
</parameters>
<response>
{
"authCode": "7878"
}
</response>
</mockData>
<q>79000000000</q>
<a>Введите код подтверждения. Я только что отправил его на номер +79000000000.</a>
<q>7878</q>
<a>Завел задачу.</a>
</test-case>
</test>