Руководство по использованию Webhooks
В Test IT реализован механизм Webhooks - отправки запросов на внешний обработчик при возникновении определенных событий в системе. Этот механизм удобно использовать для интеграции с внешними системами

Настройка webhook

Для корректной работы с webhooks нужно задать в .env файле переменную FRONTEND_URL
Webhooks может настраивать пользователь с правом Project editing / Editing или Project editing / Full access в проекте. Необходимо перейти в настройки проекта, на вкладку Webhooks.
При создании нового webhook указываются:
Название - имя вебхука, которое будет отображаться в списке вебхуков
Описание - текстовое описание вебхука, для указания краткого комментария
Событие - действие в системе, которое будет инициировать отправку вебхука
URL - адрес внешней системы, на который будет сделан запрос
Тип запроса - выбор из выпадающего списка POST, PUT или DELETE.
Поля Ключ-Значение для заголовков и query параметров запроса.
В значениях заголовков и query параметров можно использовать специальные переменные, чтобы отправлять во внешнюю систему данные, связанные с конкретным событием. Список специальных переменных предопределен для каждого события исходя из его контекста. Специальные переменные, доступные для подстановки, можно увидеть в инструкции и подсказках.
При добавлении в поле "Ключ" значения с символом нижнего подчеркивания "_" нужно включить параметр underscores_in_headers в настройках сервера, который будет принимать вебхук.
Для POST и PUT запросов есть возможность передать стандартный или свой контекст события в теле запроса. При выборе стандартного контекста будет передана предопределенная для события модель данных. В случае выбора своего контекста можно включить опцию "Заменять системные параметры" и указать переменные из списка через $.
Опция "Экранировать параметры" позволяет корректно отправлять специальные символы в XML и JSON форматах.
Также, доступна опция не отправлять тело запроса.
После заполнения всех необходимых данных нужно сохранить вебхук.
Все отправляемые вебхуки отображаются в журнале отправки, в который можно перейти с вкладки настройки вебхуков.

Webhook по событию "Запуск автотестов"

Для события "Запуск автотестов" в webhook можно использовать следующие специальные переменные:
Переменная
Описание
$AUTO_TESTS_COUNT
Количество автотестов, участвующих в запуске
$BUILD
Номер сборки, указанный при создании плана тестирования
$PRODUCT_NAME
Название продукта, указанное при создании плана тестирования
$PROJECT_GLOBAL_ID
Глобальный идентификатор проекта, к которому относятся запускаемые автотесты
$PROJECT_ID
Идентификатор проекта в GUID формате, к которому относятся запускаемые автотесты
$PROJECT_NAME
Название проекта, к которому относятся запускаемые автотесты
$START_DATE
Дата начала плана тестирования
$TEST_PLAN_GLOBAL_ID
Глобальный идентификатор плана тестирования, в рамках которого происходит запуск автотестов
$TEST_PLAN_ID
Идентификатор плана тестирования в GUID формате, в рамках которого происходит запуск автотестов
$TEST_PLAN_URL
Ссылка на план тестирования в системе Test IT
$TEST_POINTS_COUNT
Количество тестовых случаев, участвующих в запуске
$TEST_RUN_ID
Идентификатор запуска автотестов
$SERVER_URL
Ссылка на систему Test IT
$USER_NAME
Имя пользователя выполнившего запуск автотестов
При передаче контекста события в теле запроса будет передана следующая структура данных:
1
[
2
{
3
"testRunId": "string",
4
"testPlanGlobalId": 0,
5
"productName": "string",
6
"build": "string",
7
"configurations": [
8
{
9
"entityTypeName": "string",
10
"createdDate": "2019-08-15T10:01:51.412Z",
11
"modifiedDate": "2019-08-15T10:01:51.412Z",
12
"createdById": "string",
13
"modifiedById": "string",
14
"name": "string",
15
"description": "string",
16
"isActive": true,
17
"capabilities": {},
18
"projectId": "string",
19
"globalId": 0,
20
"id": "string",
21
"isDeleted": true
22
}
23
],
24
"autoTests": [
25
{
26
"createdDate": "2019-08-15T10:01:51.413Z",
27
"modifiedDate": "2019-08-15T10:01:51.413Z",
28
"createdById": "string",
29
"modifiedById": "string",
30
"workItems": [
31
{
32
"createdDate": "2019-08-15T10:01:51.413Z",
33
"modifiedDate": "2019-08-15T10:01:51.413Z",
34
"createdById": "string",
35
"modifiedById": "string",
36
"isAutomated": true,
37
"attachments": [
38
{
39
"name": "string",
40
"fileId": "string",
41
"type": "string",
42
"size": 0,
43
"createdDate": "2019-08-15T10:01:51.413Z",
44
"modifiedDate": "2019-08-15T10:01:51.413Z",
45
"createdById": "string",
46
"modifiedById": "string",
47
"workItemId": "string",
48
"id": "string",
49
"isDeleted": true
50
}
51
],
52
"autoTests": [
53
null
54
],
55
"name": "string",
56
"entityTypeName": "string",
57
"projectId": "string",
58
"sectionId": "string",
59
"description": "string",
60
"state": "string",
61
"priority": 1,
62
"globalId": 0,
63
"steps": [
64
{
65
"action": "string",
66
"expected": "string",
67
"workItemId": "string"
68
}
69
],
70
"duration": 0,
71
"attributes": [
72
{
73
"attributeId": "string",
74
"value": "string"
75
}
76
],
77
"tags": [
78
{
79
"id": "string",
80
"name": "string",
81
"createdDate": "2019-08-15T10:01:51.413Z",
82
"modifiedDate": "2019-08-15T10:01:51.413Z",
83
"createdById": "string",
84
"modifiedById": "string"
85
}
86
],
87
"links": [
88
{
89
"id": "string",
90
"isDeleted": true,
91
"title": "string",
92
"url": "string",
93
"description": "string"
94
}
95
],
96
"id": "string",
97
"isDeleted": true
98
}
99
],
100
"autotestExternalId": "string",
101
"testLinkInRepository": "string",
102
"id": "string",
103
"isDeleted": true
104
}
105
],
106
"testPoints": [
107
{
108
"configurationGlobalId": 0,
109
"autoTestIds": [
110
"string"
111
]
112
}
113
],
114
"status": "string"
115
}
116
]
Copied!

Webhook по событию "Изменение статуса тест-плана"

Для события "Изменение статуса тест-плана" в webhook можно использовать следующие специальные переменные:
Переменная
Описание
$BUILD
Номер сборки, указанный при создании плана тестирования
$PRODUCT_NAME
Название продукта, указанное при создании плана тестирования
$PROJECT_GLOBAL_ID
Глобальный идентификатор проекта, к которому относится тест-план
$PROJECT_ID
Идентификатор проекта в GUID формате, к которому относится тест-план
$PROJECT_NAME
Название проекта, к которому относится тест-план
$START_DATE
Дата планируемого начала тест-плана
$END_DATE
Дата планируемого окончания тест-плана
$STARTED_ON_DATE
Дата и время перевода тест-плана в статус "В процессе"
$COMPLETED_ON_DATE
Дата и время перевода тест-плана в статус "Завершён"
$TEST_PLAN_GLOBAL_ID
Глобальный идентификатор тест-плана
$TEST_PLAN_ID
Идентификатор тест-плана в GUID формате
$TEST_PLAN_NAME
Название тест-плана
$TEST_PLAN_STATUS
Статус в который перешёл тест-план
$TEST_PLAN_DESCRIPTION
Описание тест-плана
$TEST_PLAN_DURATION
Продолжительность тест-плана
$TEST_PLAN_URL
Ссылка на тест-план
$SERVER_URL
Ссылка на систему Test IT
$USER_NAME
Имя пользователя выполнившего изменение статуса тест-плана
При передаче контекста в теле запроса будет передана следующая структура данных:
1
{
2
"GlobalId": 0,
3
"StateName": "string",
4
"Name": "string",
5
"StartDate": "11/29/2019 14:37:00",
6
"EndDate": "11/29/2019 14:37:00",
7
"Description": "string",
8
"Build": "string",
9
"ProjectId": guid,
10
"ProductName": "string",
11
"Duration": "",
12
"Tags": [],
13
"Link": "string",
14
"IsDeleted": false
15
}
Copied!

Пример использования Webhook

С помощью webhook попробуем отправить запрос на запуск джобы в Jenkins.
Для этого создадим webhook на событие "Запуск автотестов" со следующими параметрами:
HTTP headers:
Ключ: authorization Значение: Basic ** (токен авторизации скрыт в целях безопасности)
URL parameters:
Ключ: testRunId Значение: $TEST_RUN_ID
Ключ:: testProjectId Значение: $PROJECT_ID
В логах можно увидеть результирующий запрос и ответ от внешней системы:
Запрос:
1
Method: POST
2
RequestUri: 'http://jenkins.mycompanyname.ru/job/testit-webinar
3
/buildWithParameters?testRunId=a62172c1-f067-4006-97c0-
4
e93aa8e8f3b5&testProjectId=301'
5
Version: 2.0
6
Content: <null>
7
Headers: { Authorization: Basic ****** }
Copied!
Ответ:
1
StatusCode: 201
2
ReasonPhrase: 'Created'
3
Version: 1.1
4
Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent
5
Headers:
6
{
7
Date: Fri, 26 Jul 2019 16:32:34 GMT
8
X-Content-Type-Options: nosniff
9
Location: http://jenkins.mycompanyname.ru/queue/item/1777974/
10
Server: Jetty(9.4.z-SNAPSHOT)
11
Content-Length: 0
12
}
Copied!
В Jenkins запустилась сборка проекта с полученными параметрами.