Руководство по использованию 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 параметров можно использовать специальные переменные, чтобы отправлять во внешнюю систему данные, связанные с конкретным событием. Список специальных переменных предопределен для каждого события исходя из его контекста. Специальные переменные, доступные для подстановки, можно увидеть в инструкции и подсказках.

Для POST запроса есть возможность передать контекст события в теле запроса. Это означает, что будет передана предопределенная для события модель данных. После заполнения всех необходимых данных нужно сохранить вебхук.

Все отправляемые вебхуки отображаются в журнале отправки, в который можно перейти с вкладки настройки вебхуков.

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

Для события "Запуск автотестов" в webhook можно использовать следующие специальные переменные:

Переменная

Описание

$AUTO_TESTS_COUNT

Количество автотестов, участвующих в запуске

$BUILD

Номер сборки, указанный при создании плана тестирования

$PRODUCT_NAME

Название продукта, указанное при создании плана тестирования

$PROJECT_ID

Идентификатор проекта, к которому относятся запускаемые автотесты

$PROJECT_NAME

Название проекта, к которому относятся запускаемые автотесты

$START_DATE

Дата начала плана тестирования

$TEST_PLAN_ID

Идентификатор плана тестирования, в рамках которого происходит запуск автотестов

$TEST_PLAN_URL

Ссылка на план тестирования в системе Test IT

$TEST_POINTS_COUNT

Количество тестовых случаев, участвующих в запуске

$TEST_RUN_ID

Идентификатор запуска автотестов

$TESTIT_URL

Ссылка на систему Test IT

$USER_NAME

Имя пользователя выполнившего запуск автотестов

При передаче контекста события в теле запроса будет передана следующая структура данных:

[
{
"testRunId": "string",
"testPlanGlobalId": 0,
"productName": "string",
"build": "string",
"configurations": [
{
"entityTypeName": "string",
"createdDate": "2019-08-15T10:01:51.412Z",
"modifiedDate": "2019-08-15T10:01:51.412Z",
"createdById": "string",
"modifiedById": "string",
"name": "string",
"description": "string",
"isActive": true,
"capabilities": {},
"projectId": "string",
"globalId": 0,
"id": "string",
"isDeleted": true
}
],
"autoTests": [
{
"createdDate": "2019-08-15T10:01:51.413Z",
"modifiedDate": "2019-08-15T10:01:51.413Z",
"createdById": "string",
"modifiedById": "string",
"workItems": [
{
"createdDate": "2019-08-15T10:01:51.413Z",
"modifiedDate": "2019-08-15T10:01:51.413Z",
"createdById": "string",
"modifiedById": "string",
"isAutomated": true,
"attachments": [
{
"name": "string",
"fileId": "string",
"type": "string",
"size": 0,
"createdDate": "2019-08-15T10:01:51.413Z",
"modifiedDate": "2019-08-15T10:01:51.413Z",
"createdById": "string",
"modifiedById": "string",
"workItemId": "string",
"id": "string",
"isDeleted": true
}
],
"autoTests": [
null
],
"name": "string",
"entityTypeName": "string",
"projectId": "string",
"sectionId": "string",
"description": "string",
"state": "string",
"priority": 1,
"globalId": 0,
"steps": [
{
"action": "string",
"expected": "string",
"workItemId": "string"
}
],
"duration": 0,
"attributes": [
{
"attributeId": "string",
"value": "string"
}
],
"tags": [
{
"id": "string",
"name": "string",
"createdDate": "2019-08-15T10:01:51.413Z",
"modifiedDate": "2019-08-15T10:01:51.413Z",
"createdById": "string",
"modifiedById": "string"
}
],
"links": [
{
"id": "string",
"isDeleted": true,
"title": "string",
"url": "string",
"description": "string"
}
],
"id": "string",
"isDeleted": true
}
],
"autotestExternalId": "string",
"testLinkInRepository": "string",
"id": "string",
"isDeleted": true
}
],
"testPoints": [
{
"configurationGlobalId": 0,
"autoTestIds": [
"string"
]
}
],
"status": "string"
}
]

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

Для события "Изменение статуса тест-плана" в webhook можно использовать следующие специальные переменные:

Переменная

Описание

$BUILD

Номер сборки, указанный при создании плана тестирования

$PRODUCT_NAME

Название продукта, указанное при создании плана тестирования

$PROJECT_ID

Идентификатор проекта, к которому относится тест-план

$PROJECT_NAME

Название проекта, к которому относится тест-план

$START_DATE

Дата начала тест-плана

$END_DATE

Дата окончания тест-плана

$TEST_PLAN_ID

Идентификатор тест-плана

$TEST_PLAN_NAME

Название тест-плана

$TEST_PLAN_STATUS

Статус в который перешёл тест-план

$TEST_PLAN_DESCRIPTION

Описание тест-плана

$TEST_PLAN_DURATION

Продолжительность тест-плана

$TEST_PLAN_URL

Ссылка на тест-план

$TESTIT_URL

Ссылка на систему Test IT

$USER_NAME

Имя пользователя выполнившего изменение статуса тест-плана

При передаче контекста в теле запроса будет передана следующая структура данных:

{
"GlobalId": 0,
"StateName": "string",
"Name": "string",
"StartDate": "11/29/2019 14:37:00",
"EndDate": "11/29/2019 14:37:00",
"Description": "string",
"Build": "string",
"ProjectId": guid,
"ProductName": "string",
"Duration": "",
"Tags": [],
"Link": "string",
"IsDeleted": false
}

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

С помощью webhook попробуем отправить запрос на запуск джобы в Jenkins.

Для этого создадим webhook на событие "Запуск автотестов" со следующими параметрами:

URL: http://jenkins.mycompanyname.ru/job/testit-webinar/buildWithParameters

HTTP headers:

Ключ: authorization Значение: Basic ** (токен авторизации скрыт в целях безопасности)

URL parameters:

Ключ: testRunId Значение: $TEST_RUN_ID

Ключ:: testProjectId Значение: $PROJECT_ID

В логах можно увидеть результирующий запрос и ответ от внешней системы:

Запрос:

Method: POST
RequestUri: 'http://jenkins.mycompanyname.ru/job/testit-webinar
/buildWithParameters?testRunId=a62172c1-f067-4006-97c0-
e93aa8e8f3b5&testProjectId=301'
Version: 2.0
Content: <null>
Headers: { Authorization: Basic ****** }

Ответ:

StatusCode: 201
ReasonPhrase: 'Created'
Version: 1.1
Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent
Headers:
{
Date: Fri, 26 Jul 2019 16:32:34 GMT
X-Content-Type-Options: nosniff
Location: http://jenkins.mycompanyname.ru/queue/item/1777974/
Server: Jetty(9.4.z-SNAPSHOT)
Content-Length: 0
}

В Jenkins запустилась сборка проекта с полученными параметрами.