E2E-тесты в тмске без ручного ввода: интеграция через API

Playwright прогнал тесты - и тест-кейсы сами появились в тмске с шагами, описанием и нужной директорией. Разбираем, как это работает и как настроить с нуля.

TestRun.ru - российская система управления тестированием ПО с внешним API для программного создания тест-кейсов. Это значит: можно написать E2E-тест в Playwright, добавить пару строк в CI - и кейс автоматически появится в нужном проекте с полным набором шагов.

Как выглядит итоговая цепочка

Playwright (E2E-тест с аннотациями шагов) → Reporter (читает шаги после прогона) → POST /cases (API-запрос с ключом в X-API-Key) → TestRun (кейс в нужной директории проекта)

Шаг 1 - Получить API-ключ в TestRun

Войдите в testrun, откройте настройки организации и перейдите в раздел Настройки → «API-ключи». Нажмите «Создать новый ключ».

⚠ Ключ показывается один раз. Сразу сохраните его в переменные окружения CI. В GitHub Actions - через Settings → Secrets → New secret, имя: TESTRUN_API_KEY. Никогда не коммитьте ключ в репозиторий.

Шаг 2 - Узнать project_id своего проекта

Каждый запрос к API требует UUID проекта. Найти его можно в URL при открытом проекте в TestRun, либо через настройки проекта. Сохраните его рядом с API-ключом:

.env или GitHub Secrets

TESTRUN_API_KEY=ваш-ключ-здесь

TESTRUN_PROJECT_ID=123e4567-e89b-12d3-a456-426614174000

Шаг 3 - Написать E2E-тест с описанием шагов

Шаги теста в Playwright описываются через test.step(). Reporter вычитает их и передаст в TestRun как массив steps с полями action и expected_result.

// tests/auth.spec.ts

import { test, expect } from '@playwright/test';

test('пользователь может войти в систему', async ({ page }) => {

await test.step('открыть страницу входа', async () => {

await page.goto('/login');

await expect(page.locator('h1')).toHaveText('Вход');

});

await test.step('ввести корректные данные', async () => {

await page.fill('#email', 'user@example.com');

await page.fill('#password', 'secret');

await page.click('button[type=submit]');

});

await test.step('проверить редирект на дашборд', async () => {

await expect(page).toHaveURL('/dashboard');

});

});

Шаг 4 - Отправить тест-кейс в TestRun через API

Эндпоинт TestRun принимает один POST-запрос с заголовком X-API-Key. Вот минимальный скрипт на JS, который создаёт кейс в нужной директории:

// scripts/sync-to-testrun.js

const API_KEY = process.env.TESTRUN_API_KEY;

const PROJECT_ID = process.env.TESTRUN_PROJECT_ID;

const BASE_URL = 'https://api.testrun.ru';

async function createCase(title, steps, dirPath) {

const res = await fetch(`${BASE_URL}/api/external/cases`, {

method: 'POST',

headers: {

'Content-Type': 'application/json',

'X-API-Key': API_KEY

},

body: JSON.stringify({

title,

directory_path: dirPath,

project_id: PROJECT_ID,

steps

})

});

if (!res.ok) {

const err = await res.json();

throw new Error(`TestRun API error: ${err.detail}`);

}

const created = await res.json();

console.log(`Создан кейс #${created.test_id}: ${created.title}`);

return created;

}

// пример вызова

createCase(

'Пользователь может войти в систему',

[

{ action: 'Открыть /login', expected_result: 'Страница входа открыта' },

{ action: 'Ввести email и пароль', expected_result: 'Поля заполнены' },

{ action: 'Нажать «Войти»', expected_result: 'Редирект на /dashboard' }

],

'/Web/Auth'

);

Шаг 5 - Запустить из CI автоматически

.github/workflows/e2e.yml

name: E2E + TestRun sync

on: [push]

jobs:

e2e:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- name: Прогон E2E-тестов

run: npx playwright test

- name: Синхронизация кейсов с TestRun

run: node scripts/sync-to-testrun.js

env:

TESTRUN_API_KEY: ${{ secrets.TESTRUN_API_KEY }}

TESTRUN_PROJECT_ID: ${{ secrets.TESTRUN_PROJECT_ID }}

Что вернёт TestRun API при успехе

После успешного запроса API возвращает 201 Created. Поле test_id - порядковый номер в проекте, file_name генерируется автоматически:

{

"id": "789e4567-e89b-12d3-a456-426614174000",

"test_id": 42,

"title": "Пользователь может войти в систему",

"directory_path": "/Web/Auth",

"file_name": "test_42.json",

"steps": [

{

"order_index": 0,

"action": "Открыть /login",

"expected_result": "Страница входа открыта"

}

]

}

Возможные ошибки и что с ними делать

401 - заголовок X-API-Key отсутствует или ключ неверный. Проверьте, что секрет в CI называется именно TESTRUN_API_KEY и скопирован полностью.

403 - проект не принадлежит организации API-ключа. Убедитесь, что project_id взят из того же аккаунта TestRun, где создавался ключ.

404 - проект не найден. Проверьте, что project_id - валидный UUID и проект не был удалён.

422 - ошибка валидации: скорее всего не передан обязательный title, directory_path или project_id. Тело ответа покажет конкретное поле.

✅ Важно про directory_path: слэши всегда прямые - /Web/Auth, /Mobile/Login. Директория создаётся автоматически, если не существует.

Итог

Один эндпоинт, один заголовок с API-ключом - и тест-кейсы из Playwright живут в TestRun без ручного труда. Добавьте вызов скрипта в CI, и система управления тестированием ПО будет актуальной после каждого пуша.

Начать дискуссию