# Assertion

**Assertion** узел - это узел, используемый для написания тестов. Каждый **Assertion** узел состоит из набора **Assertion**-ов - минимальных проверок различных утверждений. При запуске **Assertion** узла запускается проверка всех **Assertion**-ов. Если хотя бы одна проверка завершится с ошибкой, то выполнение всего **Assertion** узла завершается с ошибкой.&#x20;

**Assertion** узел может быть создан только как потомок [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.16/node-types/requeststep) узла. Причем [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.16/node-types/requeststep) узел может имет не более одного **Assertion** узла в качестве потомка.

Создать **Assertion** узел можно следующими способами: из дерева проекта в контекстном меню [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.16/node-types/requeststep) узла выбрать **Add node** -> **Assertion.** Либо в секции ответа [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.16/node-types/requeststep) узла во вкладке Assertion выбрать **+ CREATE NEW ASSERTION NODE**.

![Создание Assertion узла из секции ответа RequestStep узла](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoAyRH5uUfa-eq257%2Fa_1.png?alt=media\&token=bda458cb-838e-44f8-87b9-4cabc2425757)

В дереве проекта **Assertion** узел выглядит следующим образом:

![](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoECui6mwoRgeIDAa%2Fa_2.png?alt=media\&token=ce954185-2048-4557-b0dd-35ac6614d0a6)

Если запуск **Assertion** узла завершился успешно, то в дереве он принимает следующий вид:

![](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoFN4dUZ4-U8wBQWU%2Fa_3.png?alt=media\&token=874f8bb4-745a-4f46-80af-d172edaf0a52)

В случае, если запуск **Assertion** узла завершился с ошибкой, узел выглядит так:

![](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoGOvC0j_WBuSxzC_%2Fa_4.png?alt=media\&token=547ed1ef-2d22-402c-aa71-881a39ec06c8)

В дереве для данного типа узла доступны следующие пункты меню:

![](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoHh5OEJ4MWR_Og86%2Fa_5.png?alt=media\&token=63b7b2f7-9e27-424b-844d-170bb011036e)

* **Remove node.** Удалить узел.
* **Run.** Запустить узел.
* **Show in explorer.** Открыть папку с узлом в файловом менеджере.

Вкладка с **Assertion** узлом выглядит следующим образом:

![Интерфейс вкладки Assertion узла](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoJoMRGGK3Z5hgVkS%2Fa_6.png?alt=media\&token=821ff8a4-2406-4a59-b449-8ed75fcb380b)

На скрине отмечены следующие области:

1. Панель управления
2. Панель настроек выбранного **Assertion**-а
3. Список **Assertion**-ов

На панели управления расположены следующие кнопки

* **RUN** - запуск списка **Assertion**-ов
* **FIX ERRORS** - исправление ошибок **Assertion**-ов где это возможно. Данная кнопка активируется в случае, если есть ошибки в **Assertion**-ах. Функционал исправления ошибок описан в разделах **Исправление ошибок** каждого из **Assertion**-ов.
* **DISABLE ERRORS** - выключение **Assertion**-ов, завершившихся с ошибкой. Отключенные **Assertion**-ы не будут участвовать в дальнейших запусках. Данная кнопка активируется в случае, если есть ошибки в **Assertion**-ах
* **+ ADD ASSERTION** - добавление **Assertion** в список

Ниже панели управления находится список **Assertion**-ов. Каждый элемент в данном списке выглядит следующим образом:

![](https://1795169151-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoO8cHyDJOa7RFj4v%2Fa_7.png?alt=media\&token=0c7d1f73-fc66-4239-89de-b0fccf2dad07)

На скрине отмечены следующие области:

1. Подсветка статуса. Если **Assertion** не запускался, то его цвет серый, если запуск завершился с ошибкой - красный, если успешно - зеленый.
2. Иконка конкретного типа **Assertion**-а
3. Краткое текстовое представление **Assertion**-а
4. Удалить **Assertion**
5. Задизейблить **Assertion**. При этом не будет участвовать в последующих запусках
6. Запустить **Assertion**
7. Исправить **Assertion**

Заметим, что контролы 4, 5, 6 и 7 появляются при наведении на **Assertion**.

Интерфейс панели настроек выбранного **Assertion**-а зависит от выбранного **Assertion**-а. В следующих разделах мы подробно разберем каждый из **Assertion**-ов

### Файловое представление

**Assertion** узел хранится в файле \<nodename>.yml, где \<nodename> - название Assertion-а и имеет следующий формат:

```javascript
{
  "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#"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-ru.testmace.com/0.0.1-beta.16/node-types/assertion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
