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, и система управления тестированием ПО будет актуальной после каждого пуша.