Тесты .xml
— файлы автоматических тестов, пишутся на языке XML. Тест представляет собой пошаговое описание взаимодействия пользователя со смартапом и ожидаемых ответных реакций.
Тесты должны находиться в папке test
: папка_проекта/test/ваши_тесты.xml
.
Структура
Тесты имеют следующую структуру:
<test>
<test-case>
<q>Запрос пользователя</q>
<a>Ответ ассистента</a>
</test-case>
<test-case>
<q>Запрос пользователя</q>
<a>Ответ ассистента</a>
</test-case>
</test>
Вместо текста в ответе <a>
можно указать стейт, в который переходит система. Для этого используется два атрибута: class
и state
.
Атрибут class
указывает на стейт, в который запрос пользователя был классифицирован.
Атрибут state
— на стейт, из которого был получен ответ. Например:
<test>
<test-case>
<q>Как дела?</q>
<a state="/Offtopic/HowAreYou"/>
</test-case>
</test>
Если нужно проверить, что сначала система попадет в один стейт, а потом при помощи go!
переходит в другой, то можно использовать class
как атрибут, указывающий на стейт, в который система попала первым. Далее используйте state
как атрибут, указывающий на стейт, в который система попадает далее.
Если после первого стейта идет последовательность переходов, они также должны быть описаны при помощи атрибута state
. Например:
<test>
<test-case>
<q>Как дела?</q>
<a class="/Offtopic/HowAreYou"/>
<a state="/Offtopic/Fallback"/>
<a state="/Offtopic/HowCanIHelpYou"/>
</test-case>
</test>
class
и state
могут совпадать. Если проверяется один переход в стейт, целесообразнее использовать один из этих атрибутов при тестировании. Полная запись:
<test-case>
<q>Как дела?</q>
<a class="/Offtopic/HowAreYou" state="/Offtopic/HowAreYou"/>
</test-case>
Переопределение
Тесты выполняются автоматически при деплое смартапа, если присутствуют в папке проекта test
. Это поведение можно переопределить в файле chatbot.yaml
в секции tests
.
Секция tests
может содержать две подсекции include
и exclude
, каждая представляет собой список ant-шаблонов с именами файлов.
include
— будут выполнены тесты только из тех файлов, которые попадают под шаблоны, перечисленные в этой подсекции.exclude
— из выполнения будут исключены все файлы, которые попадают под шаблоны, перечисленные в этой подсекции.
Например:
tests:
include:
- tests.xml
- delivery.xml
- order.xml
- cart.xml
- otherCities.xml
- sauces.xml
exclude:
- time.xml