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

Тестирование сценария с переменными

Тестирование сценария бота — это пошаговое описание взаимодействие пользователя с ботом и ожидаемых ответных реакций. Если вы используете в своем сценарии переменные $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>