Интеграция с CI-системой GitHub
Интеграция с CI-системой GitHub (GitHub Actions) позволяет:
- автоматически передавать результаты тестов из workflow GitHub в ТестОпс с помощью allurectl;
- запускать workflow GitHub из интерфейса ТестОпс через запуск джобы;
- синхронизировать статус запуска workflow сразу в обеих системах — ТестОпс и GitHub.
В настроенной интеграции одна джоба ТестОпс соответствует одному workflow GitHub, а один запуск джобы — одному запуску соответствующего workflow.
Поддерживаются как основной сервер GitHub (github.com), так и инстансы GitHub Enterprise Server.
Примечание
Чтобы настроить или удалить интеграцию в ТестОпс, вы должны иметь доступ к разделам:
- Администрирование — необходимы права администратора инстанса;
- Настройки в конкретном проекте — необходима роль владельца этого проекта.
Настройка интеграции
Чтобы настроить интеграцию с CI-системой GitHub:
Настройте связь от ТестОпс к GitHub:
Создайте токен в GitHub.
На уровне инстанса ТестОпс добавьте интеграцию с GitHub, указав:
- название интеграции;
- URL-адрес GitHub;
- URL-адрес GitHub API.
На уровне инстанса или проекта ТестОпс включите добавленную интеграцию для проекта, указав созданный токен из GitHub.
Настройте связь от GitHub к ТестОпс:
- Создайте API-токен в ТестОпс.
- Укажите созданный API-токен из ТестОпс в GitHub.
- Измените workflow в GitHub.
- Запустите и проверьте workflow в GitHub.
Параметризируйте джобу в ТестОпс и workflow в GitHub (если необходимо).
1. Настройте связь от ТестОпс к GitHub
1.1. Создайте токен в GitHub
GitHub поддерживает два типа токенов доступа: fine-grained и classic (см. Managing your personal access tokens в документации GitHub). Для интеграции с ТестОпс вы можете использовать любой тип токена.
В GitHub нажмите на ваш аватар и перейдите в раздел Settings.
В сайдбаре слева перейдите в раздел Developer settings.
В сайдбаре слева перейдите в раздел Personal access tokens → Fine-grained tokens.
Нажмите Generate new token.
Заполните поля:
- Token name — название, которое поможет вам распознать токен (например, Токен для ТестОпс).
- Expiration — срок действия токена. После указанной даты интеграция перестанет работать. Чтобы возобновить ее работу, вам нужно будет создать новый токен.
В секции Repository access выберите один из вариантов:
- All repositories — предоставить токену доступ ко всем репозиториям. Этот вариант подходит, если вы планируете настроить интеграцию для всего инстанса GitHub.
- Only select repositories — предоставить токену доступ только к определенным репозиториям. В появившемся выпадающем списке выберите репозитории, содержащие workflow, которые вы планируете использовать.
В секции Permissions нажмите + Add permissions.
В списке доступных разрешений поставьте галочку напротив Actions.
Чтобы закрыть список, нажмите вне его области.
В списке добавленных разрешений напротив Actions выберите уровень доступа Access: Read and write.
Нажмите Generate token.
В открывшемся окне подтверждения повторно нажмите Generate token.
После обновления страницы вы должны увидеть созданный токен.
Нажмите иконку Копировать рядом с токеном, чтобы скопировать его в буфер обмена.
Cохраните токен в безопасном месте, он понадобится для настройки интеграции в проекте ТестОпс.
1.2. Добавьте интеграцию с GitHub в ТестОпс
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Интеграции.
Нажмите + Добавить интеграцию в правом верхнем углу.
В списке доступных интеграций выберите GitHub.
Заполните поля:
Название — название, которое поможет вам распознать интеграцию, например, GitHub production.
Endpoint — базовый URL-адрес GitHub:
- Для github.com используйте https://github.com.
- Для GitHub Enterprise Server используйте URL-адрес вашего инстанса GitHub.
Endpoint для вызовов API — URL-адрес GitHub API:
- Для github.com убедитесь, что указано https://api.github.com.
- Для GitHub Enterprise Server используйте ⟨URL-адрес вашего инстанса GitHub⟩/api/v3.
Если вы используете GitHub Enterprise Server с самоподписанным SSL-сертификатом, поставьте галочку напротив Отключить проверку сертификата.
Нажмите Добавить интеграцию.
1.3. Включите интеграцию для проекта ТестОпс
Чтобы включить интеграцию в нужном проекте ТестОпс, воспользуйтесь одним из способов:
- Перейдите в раздел Администрирование → Интеграции.
- В списке настроенных интеграций найдите и откройте вашу интеграцию с GitHub.
- Перейдите на вкладку Проекты.
- Справа от поля поиска нажмите
+. - В выпадающем списке Проект выберите нужный проект ТестОпс.
- В секции Секрет введите токен доступа GitHub, который вы сохранили на шаге 1.1.
- Нажмите Проверить соединение. Если токен указан верно, через несколько секунд появится сообщение «Соединение установлено».
- Нажмите Добавить интеграцию.
2. Настройте связь от GitHub к ТестОпс
Выполните шаги ниже, чтобы настроить вторую часть двусторонней связи: отправку статусов workflow и результатов тестов из GitHub в ТестОпс.
2.1. Создайте токен в ТестОпс
В ТестОпс нажмите на ваш аватар и перейдите в раздел API-токены.
Нажмите + Токен.
Введите название токена, которое поможет вам распознать интеграцию, например, Токен для GitHub.
Нажмите Создать.
ТестОпс сгенерирует токен и отобразит его в модальном окне.
Нажмите иконку Копировать, чтобы скопировать токен в буфер обмена.
Cохраните токен в безопасном месте, он понадобится для настройки интеграции в GitHub.
2.2. Укажите токен в GitHub
В GitHub откройте репозиторий, для которого вы настраиваете интеграцию.
Перейдите на вкладку Settings.
В сайдбаре слева перейдите в раздел Secrets and variables → Actions.
Нажмите New repository secret.
Заполните поля:
- Name — ALLURE_TOKEN.
- Secret — API-токен, который вы сохранили на шаге 2.1.
Нажмите Add secret.
2.3. Измените workflow в GitHub
Примечание
Вам необходимо изменить каждый workflow, который запускает тесты и участвует в интеграции.
В GitHub откройте репозиторий, для которого вы настраиваете интеграцию.
Перейдите в директорию .github/workflows.
Откройте YAML-файл вашего workflow.
В блоке
workflow_dispatch→inputsдобавьте параметры:ALLURE_JOB_RUN_ID,ALLURE_USERNAME.
Важно
Для обоих параметров укажите атрибут
requiredв значении false. Это означает, что параметры можно оставить пустыми при запуске workflow в GitHub, но они должны быть обязательно определены. Без этих параметров запуск workflow со стороны ТестОпс не будет работать и вы получите ошибку 422. Подробнее см. Устранение неполадок.Добавьте или расширьте блок
env. Он должен включать переменные со значениями:ALLURE_ENDPOINT— URL-адрес инстанса ТестОпс.ALLURE_PROJECT_ID— ID проекта ТестОпс.ALLURE_TOKEN— ${{ secrets.ALLURE_TOKEN }}.ALLURE_JOB_RUN_ID— ${{ github.event.inputs.ALLURE_JOB_RUN_ID }}.ALLURE_RESULTS— путь к директории с результатами тестов (например, build/allure-results). Если в вашем репозитории несколько директорий с результатами тестов, вы можете разделить их запятыми или использовать шаблон с подстановочными символами (например, modules/*/build/allure-results).
Перед командой запуска тестов добавьте шаг, загружающий allurectl.
Совет
Рекомендуем использовать готовый GitHub Action allure-framework/setup-allurectl@v1.
Вариант загрузки и настройки allurectl без использования GitHub Action описан в примерах ниже.
Оберните команду, которая запускает тесты, в команду
allurectl watch.Если ваш инстанс ТестОпс использует самоподписанный SSL-сертификат, используйте вместо этого команду
allurectl --insecure watch.
Пример изменения workflow
Предположим, вы работаете с Java-проектом, в котором файл workflow выглядит следующим образом:
yaml
name: Run tests
on:
push:
jobs:
all-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: oracle
java-version: 17
- name: Build with Gradle
run: ./gradlew clean testЧтобы настроить интеграцию с ТестОпс, вам необходимо изменить файл по примеру ниже:
yaml
name: Run tests
on:
push:
workflow_dispatch:
inputs:
ALLURE_JOB_RUN_ID:
description: "TestOps service parameter. Leave blank"
required: false
ALLURE_USERNAME:
description: "TestOps service parameter. Leave blank"
required: false
env:
ALLURE_ENDPOINT: https://testops.example.com
ALLURE_PROJECT_ID: 1
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
ALLURE_JOB_RUN_ID: ${{ github.event.inputs.ALLURE_JOB_RUN_ID }}
ALLURE_RESULTS: "build/allure-results"
jobs:
all-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: oracle
java-version: 17
- name: Install allurectl
uses: allure-framework/setup-allurectl@v1
- name: Build with Gradle
run: allurectl watch -- ./gradlew clean test2.4. Запустите и проверьте workflow в GitHub
В GitHub откройте репозиторий, для которого вы настраиваете интеграцию.
Перейдите к запуску workflow, инициированному последним коммитом.
Примечание
Если у вас отключен автоматический запуск workflow после коммитов, выполните запуск вручную.
Дождитесь, когда завершится выполнение workflow.
В деталях выполнения workflow нажмите на джобу, которая запускает тесты.
Ближе к концу лога найдите ссылку на запуск в ТестОпс.

Перейдите по ссылке в ТестОпс и откройте результаты одного из тестов.
В карточке результата теста в левом нижнем углу найдите ссылку на workflow GitHub.

Перейдите по ссылке в GitHub, чтобы убедиться, что она работает корректно.
3. Параметризируйте джобу в ТестОпс и workflow в GitHub
GitHub использует блок inputs в YAML-файле для передачи параметров в контекст workflow. Чтобы параметризировать workflow, необходимо добавить нужные параметры в этот блок и затем указать их в блоке env. Это позволит использовать указанные параметры как переменные окружения в тестах.
ТестОпс поддерживает эту функциональность через концепцию Окружение, которая позволяет задавать параметры для новых джоб и просматривать параметры из workflow, запущенных со стороны GitHub. В ТестОпс передается весь контекст workflow, который может использоваться для связывания данных окружения с результатами тестов.
3.1. Укажите параметры в workflow GitHub
Примечание
Вам необходимо изменить каждый workflow, который запускает тесты и участвует в интеграции.
В GitHub откройте репозиторий, для которого вы настраиваете интеграцию.
Перейдите в директорию .github/workflows.
Откройте YAML-файл вашего workflow.
Добавьте параметры для запуска workflow, их описания и значения по умолчанию в блок
inputs. Например:yamlname: Run tests on: workflow_dispatch: inputs: <...> TESTS_BROWSER: description: "Browser to use for tests" required: true default: "chrome" PRODUCT_VERSION: description: "Product version" required: true default: "1.23"Укажите эти же значения в блоке
envдля передачи информации в ваши тесты через переменные окружения. Например:yamlenv: <...> TESTS_BROWSER: ${{ github.event.inputs.TESTS_BROWSER }} PRODUCT_VERSION: ${{ github.event.inputs.PRODUCT_VERSION }}
Эти переменные окружения, как и остальные, будут отправлены в ТестОпс с помощью allurectl вместе с контекстом сборки.
3.2. Добавьте глобальные переменные окружения в ТестОпс
Перед тем как использовать значения переменных окружения из workflow GitHub, создайте глобальные переменные окружения на уровне инстанса ТестОпс, которые будут хранить эти данные:
Перейдите в ваш инстанс ТестОпс.
Перейдите в раздел Администрирование → Окружения.
Для каждой переменной, которую вы хотите добавить:
- Нажмите + Создать.
- Введите глобальное название переменной.
- Нажмите Отправить.

Важно
Обязательно создайте глобальную переменную окружения Branch, так как она необходима для работы ТестОпс с API GitHub. Без нее запуск workflow из интерфейса ТестОпс будет невозможен.
3.3. Сопоставьте переменные окружения workflow с глобальными переменными окружения в ТестОпс
Перейдите в ваш проект ТестОпс.
Перейдите в раздел Настройки → Окружение.
Для каждой переменной, которую вы хотите использовать:
- Нажмите + Создать, если переменной нет в списке. Если переменная уже существует, напротив ее названия нажмите иконку Редактировать.
- В поле Ключ введите название переменной в GitHub из шага 3.1.
- В поле Переменная окружения выберите глобальное название переменной в ТестОпс из шага 3.2.
- Нажмите Отправить.

3.4. Добавьте параметры в джобу ТестОпс
Перейдите в раздел Джобы.
Напротив джобы, которую вы хотите параметризировать, нажмите
⋯→ Настроить.Для каждой переменной, которую вы хотите добавить, в секции Параметры нажмите Добавить и заполните поля:
Название — название переменной в GitHub из шага 3.1.
Значение — значение по умолчанию, которое должно использоваться, если не указано другое значение для конкретного запуска.
Примечание
Обратите внимание, что рекомендуется устанавливать одинаковые значения по умолчанию как в ТестОпс, так и в GitHub. В таком случае запуск workflow получит одно и то же окружение независимо от источника запуска.
Подробнее о настройке джобы см. Джобы → Параметры джобы.
Переменная окружения — глобальное название переменной в ТестОпс из шага 3.2.

Нажмите Отправить.
3.5. Запустите workflow через ТестОпс
На предыдущих шагах вы настроили джобу в ТестОпс, указав все параметры, которые нужно передавать в workflow GitHub. Эти параметры будут использоваться при запуске workflow из интерфейса ТестОпс.

Чтобы выполнить тесты в определенном окружении:
Создайте запуск в интерфейсе ТестОпс любым из доступных способов (подробнее см. Запуски → Создание запуска для тестовых прогонов, инициированных из ТестОпс).
В окне создания запуска в секции Окружение нажмите Добавить.
ТестОпс добавит параметры джобы в форму и заполнит их значениями по умолчанию.

При необходимости измените указанные значения параметров.
Если вам нужно запустить workflow несколько раз с разным окружением, создайте новые наборы переменных окружения. В этом случае ТестОпс отправит запрос в GitHub на выполнение нескольких workflow с различными параметрами.
Нажмите Отправить.
Примеры workflow GitHub
Как упоминалось выше, allurectl можно добавить в workflow двумя способами:
Через GitHub Action allure-framework/setup-allurectl@v1, который:
- Скачивает allurectl.
- Создает параметры на основе контекста workflow или данных, полученных от ТестОпс.
- Передает параметры конфигурации, необходимые для загрузки результатов тестов.
Через скрипт внутри workflow (если GitHub Action недоступен или ограничен), который:
- Скачивает allurectl.
- Создает необходимые параметры на основе контекста workflow.
Ниже приведены примеры простых workflow с использованием GitHub Action allure-framework/setup-allurectl@v1 и скрипта внутри workflow. В них используется pytest и показаны все элементы, необходимые для корректной передачи результатов тестов из GitHub в ТестОпс и запуска workflow из интерфейса ТестОпс.
yaml
name: run-and-upload-to-testops
on:
workflow_dispatch:
inputs:
TESTS_ENDPOINT:
description: "System under test"
required: true
default: https://system.under.test
TESTS_BROWSER:
description: "Browser to be used in tests"
required: true
default: chrome
ALLURE_JOB_RUN_ID:
description: "TestOps service parameter. Leave blank"
required: false
ALLURE_USERNAME:
description: "TestOps service parameter. Leave blank"
required: false
env:
ALLURE_RESULTS: "allure-results"
ALLURE_JOB_RUN_ID: ${{ github.event.inputs.ALLURE_JOB_RUN_ID }}
jobs:
all-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies for pytest and allure framework integration
run: |
python -m pip install --upgrade pip
pip install allure-pytest pytest
- name: install and configure allurectl using GH Action
uses: allure-framework/setup-allurectl@v1
with:
allure-endpoint: https://testops.example.com
allure-token: ${{ secrets.ALLURE_TOKEN }}
allure-project-id: 9999
- name: Run pytest tests
run: |
allurectl watch -- pytest ./test --alluredir=${ALLURE_RESULTS} --capture=no || true
env:
TESTS_ENDPOINT: ${{ github.event.inputs.TESTS_ENDPOINT }}
TESTS_BROWSER: ${{ github.event.inputs.TESTS_BROWSER }}
GITHUB_TESTS_BRANCH: ${{ github.ref_name }}Удаление интеграции
Вы можете удалить интеграцию с GitHub двумя способами — на уровне всего инстанса ТестОпс (через раздел Администрирование) или на уровне отдельного проекта (через настройки проекта).
Важно
Последствия удаления интеграции:
Удаление на уровне инстанса — связь с инстансом GitHub будет удалена из всех джоб ТестОпс, которые относятся к интеграции:
- Иконки для запуска и обновления этих джоб в разделе Джобы станут неактивными.
- Результаты запусков тестов из GitHub не будут отправляться в инстанс ТестОпс.
Удаление на уровне проекта — связь с инстансом GitHub будет удалена из джобы ТестОпс, которая относится к интеграции и находится в этом проекте:
- Иконки для запуска и обновления этой джобы в разделе Джобы останутся активными.
- ТестОпс не сможет запустить тесты из проекта на стороне GitHub. После закрытия запуска результаты этих тестов получат статус Неизвестный.
- Результаты запусков тестов из GitHub не будут отправляться в проект ТестОпс.
Во время удаления интеграции с CI-системой GitHub также будет удалена интеграция с таск-трекером GitHub. Подробнее о последствиях см. Интеграция с таск-трекером GitHub → Удаление интеграции.
Перейдите в раздел Администрирование → Интеграции.
В списке настроенных интеграций найдите и откройте вашу интеграцию с GitHub.
Перейдите на вкладку Проекты и убедитесь, что интеграция не используется в проектах ТестОпс.
Если интеграция подключена к проектам, удалите ее из них. Для этого напротив названия каждого проекта нажмите иконку корзины → Удалять.
Перейдите на вкладку Конфигурация.
Нажмите Удалить интеграцию.
Нажмите Удалить.
Устранение неполадок
Ошибка 422 при запуске workflow GitHub через интерфейс ТестОпс
Обычно ошибка 422 возникает при попытке запустить GitHub workflow, использующий workflow_dispatch, если параметры, определенные в блоке workflow_dispatch → inputs, не совпадают с параметрами, передаваемыми из джобы ТестОпс.
Как упоминалось выше, чтобы ТестОпс мог запускать workflow GitHub, в блоке inputs должны быть указаны два обязательных параметра:
ALLURE_JOB_RUN_ID,ALLURE_USERNAME.
Оба параметра должны иметь атрибут required в значении false. На стороне ТестОпс эти параметры устанавливаются автоматически, без участия пользователя, поэтому их не нужно указывать в параметрах джобы ТестОпс.
Если логика вашего workflow GitHub требует дополнительных обязательных данных (например, название браузера или название системы для тестирования), эти параметры должны быть настроены в ТестОпс как параметры конфигурации джобы.
Пример конфигурации workflow с обязательными параметрами
Предположим, вы работаете с Java-проектом, в котором файл workflow выглядит следующим образом:
yaml
name: Integration of TestOps with GitHub
on:
workflow_dispatch:
inputs:
ALLURE_JOB_RUN_ID:
description: "TestOps service parameter. Leave blank."
required: false
ALLURE_USERNAME:
description: "TestOps service parameter. Leave blank"
required: false
TEST_BROWSER:
description: "Browser for tests"
required: true
default: chrome
TEST_ENDPOINT:
description: "System under test"
required: false
default: https://staging.system.under.testВ этом случае в ТестОпс в настройках джобы должны быть указаны два обязательных параметра:
- TEST_BROWSER — обязателен, так как в
workflow_dispatchопределен атрибутомrequiredв значении true. - Branch — обязателен, несмотря на то, что не указан явно в блоке
inputs. Этот параметр связан с переменной окружения Branch в GitHub (в обоих случаях используется заглавная буква B), а его значение требуется для работы API GitHub (используется в параметреref).
Параметр TEST_ENDPOINT в настройках джобы ТестОпс может быть добавлен опционально, так как в workflow_dispatch определен атрибутом required в значении false.
Примеры поведения GitHub при попытке запустить настроенную джобу:
| Результат запуска | Конфигурация джобы в ТестОпс |
|---|---|
| Будет работать корректно. Все параметры присутствуют в workflow_dispatch → inputs | ![]() |
| Будет работать корректно. Присутствует параметр TEST_BROWSER, обязательный в workflow_dispatch → inputs | ![]() |
| Не будет работать, ошибка 422. Параметр RELEASE_ID отсутствует в workflow_dispatch → inputs | ![]() |
| Не будет работать, ошибка 422. Отсутствует параметр TEST_BROWSER, обязательный в workflow_dispatch → inputs | ![]() |
Чтобы исправить ошибку 422, синхронизируйте параметры джобы ТестОпс с параметрами workflow GitHub, указанными в workflow_dispatch → inputs.





