TestMace
0.0.1-beta.24
Search
K

Assertion

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 узлом выглядит следующим образом:
На скрине отмечены следующие области:
  1. 1.
    Панель управления
  2. 2.
    Панель настроек выбранного Assertion
  3. 3.
    Список Assertion-ов
На панели управления расположены следующие кнопки
  • RUN - запуск списка Assertion-ов
  • FIX ERRORS - исправление ошибок Assertion-ов где это возможно. Данная кнопка активируется в случае, если есть ошибки в Assertion-ах. Функционал исправления ошибок описан в разделах Исправление ошибок каждого из Assertion-ов.
  • DISABLE ERRORS - выключение Assertion-ов, завершившихся с ошибкой. Отключенные Assertion-ы не будут участвовать в дальнейших запусках. Данная кнопка активируется в случае, если есть ошибки в Assertion-ах
  • + ADD ASSERTION - добавление Assertion в список
Ниже панели управления находится список Assertion-ов. Каждый элемент в данном списке выглядит следующим образом:
На скрине отмечены следующие области:
  1. 1.
    Подсветка статуса. Если Assertion не запускался, то его цвет серый, если запуск завершился с ошибкой - красный, если успешно - зеленый
  2. 2.
    Место для захвата и перетаскивания элемента
  3. 3.
    Иконка конкретного типа Assertion
  4. 4.
    Краткое текстовое представление Assertion
  5. 5.
    Кнопка для отображения/скрытия подробностей о произошедших ошибках
  6. 6.
    Удалить Assertion
  7. 7.
    Задизейблить Assertion. При этом не будет участвовать в последующих запусках
  8. 8.
    Запустить Assertion
  9. 9.
    Исправить Assertion
Заметим, что контролы 6, 7, 8 и 9 появляются при наведении на Assertion.
Интерфейс панели настроек выбранного Assertion-а зависит от выбранного Assertion-а. В следующих разделах мы подробно разберем каждый из Assertion-ов.
Все Assertion имеют общее поле Name для описания назначения данной проверки. Если поле оставить пустым, то будет задано описание по-умолчанию в зависимости от свойств assertion-а.

Шаблонный Assertion

Начиная с версии 1.0.0 Assertion узел можно создавать без привязки к RequestStep как любой другой узел в проекте. Его можно использовать с целью проверки результатов работы нескольких запросов, либо как шаблон, в котором будет описан ряд типичных проверок для каждого запроса.
В отличии от Assertion-а, который привязан к RequestStep и наследует его контекст (переменные, динамические переменные, response), шаблонный Assertion получает во время запуска контекст того узла, который ссылается на данный шаблон. Контекст сохраняется во встроенную переменную $host и инициализируется только после запуска.
Отдельный запуск шаблонного Assertion становится нецелесообразным, поскольку в нем отсутствует контекст и все проверки заведомо провалятся. По этой причине TestMace отключает возможность самостоятельного запуска такого узла и пропускает его при выполнении сценария, в котором тот находится.
Для отладки в интерфейсе шаблона отображается имя узла, который последним запускался и передавал свой контекст в шаблон. В таком случае будет доступна подсветка значений и автоподстановка в выражениях, содержащих переменную $host
Пример шаблонного Assertion узла
Подробнее об использовании самостоятельного узла 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#"
}