TestMace
Search…
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-а и имеет следующий формат:
1
{
2
"type": "object",
3
"properties": {
4
"type": {
5
"description": "Type of Assertion node",
6
"const": "Assertion",
7
"type": "string"
8
},
9
"assertions": {
10
"description": "List of assertions",
11
"type": "array",
12
"items": {
13
"$ref": "#/definitions/AbstractAssertion"
14
},
15
"default": []
16
},
17
"children": {
18
"description": "List of children names",
19
"type": "array",
20
"items": {
21
"type": "string"
22
},
23
"default": []
24
},
25
"variables": {
26
"$ref": "#/definitions/NodeVariables",
27
"description": "Node variables dictionary"
28
},
29
"name": {
30
"description": "Node name",
31
"type": "string"
32
}
33
},
34
"required": [
35
"assertions",
36
"children",
37
"name",
38
"type",
39
"variables"
40
],
41
"definitions": {
42
"AbstractAssertion": {
43
"oneOf": [
44
{
45
"$ref": "#/definitions/CompareAssertion"
46
},
47
{
48
"$ref": "#/definitions/ContainsAssertion"
49
},
50
{
51
"$ref": "#/definitions/XPathAssertion"
52
},
53
{
54
"$ref": "#/definitions/ScriptAssertion"
55
}
56
]
57
},
58
"CompareAssertion": {
59
"type": "object",
60
"properties": {
61
"type": {
62
"description": "Type of Compare assertion",
63
"const": "compare",
64
"type": "string"
65
},
66
"actualValue": {
67
"description": "Actual value",
68
"type": "string",
69
"default": "${$response.body}"
70
},
71
"operator": {
72
"$ref": "#/definitions/CompareOperator",
73
"description": "Operator",
74
"default": "equal"
75
},
76
"expectedValue": {
77
"description": "Expected value",
78
"type": "string"
79
},
80
"disabled": {
81
"type": "boolean",
82
"default": false
83
}
84
},
85
"required": [
86
"actualValue",
87
"disabled",
88
"expectedValue",
89
"operator",
90
"type"
91
]
92
},
93
"CompareOperator": {
94
"enum": [
95
"equal",
96
"greater",
97
"greater or equal",
98
"less",
99
"less or equal",
100
"not equal"
101
],
102
"type": "string"
103
},
104
"ContainsAssertion": {
105
"type": "object",
106
"properties": {
107
"type": {
108
"description": "Type of Contains assertion",
109
"const": "contains",
110
"type": "string"
111
},
112
"text": {
113
"description": "Text to be searched",
114
"type": "string",
115
"default": "${$response.body}"
116
},
117
"value": {
118
"description": "Value for search in text",
119
"type": "string"
120
},
121
"disabled": {
122
"type": "boolean",
123
"default": false
124
}
125
},
126
"required": [
127
"disabled",
128
"text",
129
"type",
130
"value"
131
]
132
},
133
"XPathAssertion": {
134
"type": "object",
135
"properties": {
136
"type": {
137
"description": "Type of Xpath assertion",
138
"const": "xpath",
139
"type": "string"
140
},
141
"text": {
142
"description": "Text to be searched",
143
"type": "string",
144
"default": "${$response.body}"
145
},
146
"path": {
147
"description": "XPath selector",
148
"type": "string"
149
},
150
"expectedValue": {
151
"description": "Expected value",
152
"type": "string"
153
},
154
"disabled": {
155
"type": "boolean",
156
"default": false
157
}
158
},
159
"required": [
160
"disabled",
161
"expectedValue",
162
"path",
163
"text",
164
"type"
165
]
166
},
167
"ScriptAssertion": {
168
"type": "object",
169
"properties": {
170
"type": {
171
"description": "Type of Script assertion",
172
"const": "script",
173
"type": "string"
174
},
175
"script": {
176
"description": "Assertion script",
177
"type": "string",
178
"default": "`function test(assertion, variables) {\n // It should return true if test is passed\n // return true;\n}`"
179
},
180
"disabled": {
181
"type": "boolean",
182
"default": false
183
}
184
},
185
"required": [
186
"disabled",
187
"script",
188
"type"
189
]
190
},
191
"NodeVariables": {
192
"type": "object",
193
"additionalProperties": {
194
"type": "string"
195
}
196
}
197
},
198
"$schema": "http://json-schema.org/draft-07/schema#"
199
}
Copied!
Last modified 1yr ago