Assertion узел - это узел, используемый для написания тестов. Каждый Assertion узел состоит из набора Assertion-ов - минимальных проверок различных утверждений. При запуске Assertion узла запускается проверка всех Assertion-ов. Если хотя бы одна проверка завершится с ошибкой, то выполнение всего Assertion узла завершается с ошибкой.
Assertion узел может быть создан как потомок RequestStep узла, либо как самостоятельный узел. Причем RequestStep узел может имет не более одного Assertion узла в качестве потомка.
Создать Assertion узел можно следующими способами: из дерева проекта в контекстном меню RequestStep узла выбрать Add node -> Assertion. Либо в секции ответа RequestStep узла во вкладке Assertion выбрать + CREATE NEW ASSERTION NODE.
В дереве проекта Assertion узел выглядит следующим образом:
Если запуск Assertion узла завершился успешно, то в дереве он принимает следующий вид:
В случае, если запуск Assertion узла завершился с ошибкой, узел выглядит так:
В дереве для данного типа узла доступны следующие пункты меню:
Remove node. Удалить узел.
Run. Запустить узел.
Show in explorer. Открыть папку с узлом в файловом менеджере.
Вкладка с Assertion узлом выглядит следующим образом:
На скрине отмечены следующие области:
Панель управления
Панель настроек выбранного Assertion-а
Список Assertion-ов
На панели управления расположены следующие кнопки
RUN - запуск списка Assertion-ов
FIX ERRORS - исправление ошибок Assertion-ов где это возможно. Данная кнопка активируется в случае, если есть ошибки в Assertion-ах. Функционал исправления ошибок описан в разделах Исправление ошибок каждого из Assertion-ов.
DISABLE ERRORS - выключение Assertion-ов, завершившихся с ошибкой. Отключенные Assertion-ы не будут участвовать в дальнейших запусках. Данная кнопка активируется в случае, если есть ошибки в Assertion-ах
+ ADD ASSERTION - добавление Assertion в список
Ниже панели управления находится список Assertion-ов. Каждый элемент в данном списке выглядит следующим образом:
На скрине отмечены следующие области:
Подсветка статуса. Если Assertion не запускался, то его цвет серый, если запуск завершился с ошибкой - красный, если успешно - зеленый
Место для захвата и перетаскивания элемента
Иконка конкретного типа Assertion-а
Краткое текстовое представление Assertion-а
Кнопка для отображения/скрытия подробностей о произошедших ошибках
Удалить Assertion
Задизейблить Assertion. При этом не будет участвовать в последующих запусках
Запустить Assertion
Исправить Assertion
Заметим, что контролы 6, 7, 8 и 9 появляются при наведении на Assertion.
Интерфейс панели настроек выбранного Assertion-а зависит от выбранного Assertion-а. В следующих разделах мы подробно разберем каждый из Assertion-ов.
Все Assertion имеют общее поле Name
для описания назначения данной проверки. Если поле оставить пустым, то будет задано описание по-умолчанию в зависимости от свойств assertion-а.
Начиная с версии 1.0.0 Assertion узел можно создавать без привязки к RequestStep как любой другой узел в проекте. Его можно использовать с целью проверки результатов работы нескольких запросов, либо как шаблон, в котором будет описан ряд типичных проверок для каждого запроса.
В отличии от Assertion-а, который привязан к RequestStep и наследует его контекст (переменные, динамические переменные, response), шаблонный Assertion получает во время запуска контекст того узла, который ссылается на данный шаблон. Контекст сохраняется во встроенную переменную $host
и инициализируется только после запуска.
Отдельный запуск шаблонного Assertion становится нецелесообразным, поскольку в нем отсутствует контекст и все проверки заведомо провалятся. По этой причине TestMace отключает возможность самостоятельного запуска такого узла и пропускает его при выполнении сценария, в котором тот находится.
Для отладки в интерфейсе шаблона отображается имя узла, который последним запускался и передавал свой контекст в шаблон. В таком случае будет доступна подсветка значений и автоподстановка в выражениях, содержащих переменную $host
Подробнее об использовании самостоятельного узла Assertion как шаблона и примеры смотрите в разделе Link Assertion.
Assertion узел хранится в файле <nodename>.yml, где <nodename> - название Assertion-а и имеет следующий формат:
{"type": "object","properties": {"type": {"description": "Type of Assertion node","const": "Assertion","type": "string"},"assertions": {"description": "List of assertions","type": "array","items": {"$ref": "#/definitions/AbstractAssertion"},"default": []},"children": {"description": "List of children names","type": "array","items": {"type": "string"},"default": []},"variables": {"$ref": "#/definitions/NodeVariables","description": "Node variables dictionary"},"name": {"description": "Node name","type": "string"}},"required": ["assertions","children","name","type","variables"],"definitions": {"AbstractAssertion": {"oneOf": [{"$ref": "#/definitions/CompareAssertion"},{"$ref": "#/definitions/ContainsAssertion"},{"$ref": "#/definitions/XPathAssertion"},{"$ref": "#/definitions/ScriptAssertion"}]},"CompareAssertion": {"type": "object","properties": {"type": {"description": "Type of Compare assertion","const": "compare","type": "string"},"actualValue": {"description": "Actual value","type": "string","default": "${$response.body}"},"operator": {"$ref": "#/definitions/CompareOperator","description": "Operator","default": "equal"},"expectedValue": {"description": "Expected value","type": "string"},"disabled": {"type": "boolean","default": false}},"required": ["actualValue","disabled","expectedValue","operator","type"]},"CompareOperator": {"enum": ["equal","greater","greater or equal","less","less or equal","not equal"],"type": "string"},"ContainsAssertion": {"type": "object","properties": {"type": {"description": "Type of Contains assertion","const": "contains","type": "string"},"text": {"description": "Text to be searched","type": "string","default": "${$response.body}"},"value": {"description": "Value for search in text","type": "string"},"disabled": {"type": "boolean","default": false}},"required": ["disabled","text","type","value"]},"XPathAssertion": {"type": "object","properties": {"type": {"description": "Type of Xpath assertion","const": "xpath","type": "string"},"text": {"description": "Text to be searched","type": "string","default": "${$response.body}"},"path": {"description": "XPath selector","type": "string"},"expectedValue": {"description": "Expected value","type": "string"},"disabled": {"type": "boolean","default": false}},"required": ["disabled","expectedValue","path","text","type"]},"ScriptAssertion": {"type": "object","properties": {"type": {"description": "Type of Script assertion","const": "script","type": "string"},"script": {"description": "Assertion script","type": "string","default": "`function test(assertion, variables) {\n // It should return true if test is passed\n // return true;\n}`"},"disabled": {"type": "boolean","default": false}},"required": ["disabled","script","type"]},"NodeVariables": {"type": "object","additionalProperties": {"type": "string"}}},"$schema": "http://json-schema.org/draft-07/schema#"}