Allure Report всегда не хватало хранилища для отчётов, которое позволяло бы легко работать с историей и смотреть отчёты удалённо — а это сильно облегчило бы определение флаков и анализ трендов.

Чтобы решить эту проблему, сообщество Allure Report создало целую плеяду проектов:

На Хабре есть замечательная статья, сравнивающая эти решения, а также самостоятельную публикацию через GitLab Pages. Можно также почитать руководство для pytest и fescobar/allure-docker-service (тоже Хабр) или официальное руководство Allure Report для GitHub Pages и simple-elf/allure-report-action.

Недавно в Allure 3 появился официальный аналог этих проектов — Allure Report Storage, работающий через Docker или Cloudflare Worker. В этом руководстве я покажу, как установить и запустить это хранилище.

1. Подготовка к запуску

Код демонстрации

https://github.com/rattus-aristarchus/self-hosted-storage-demo

Что понадобится

Настройка

Установите Allure 3 и Docker.

Если уже есть проект с Allure 3, используйте его, если нет — скачайте базовый проект с Allure Starter Project и добавьте в него файл настроек Allure 3 allurerc.js:

export default {
  name: "Отчёты с историей",
  output: "./allure-report",
  historyPath: "./test-history/history.jsonl",
  plugins: {
    awesome: {
      import: "@allurereport/plugin-awesome",
      options: {
        reportName: "Отчёт для Allure Storage",
        reportLanguage: "ru",
      },
    },
  },
};

2. Запуск хранилища в Docker

Чтобы запустить хранилище в Docker, вам понадобится файл compose.yaml для образа allure/allure-report-storage (уточните номер последней версии на странице образа):

services:
  app: 
    # Здесь номер версии со страницы образа
    image: allure/allure-report-storage:v1.1.1
    environment:
      ACCESS_TOKEN: ${ACCESS_TOKEN:-change-me}
      DATABASE_PATH: /data/reports.sqlite
      DATA_DIR: /data
      HOST: 0.0.0.0
      # Основная ветка проекта; измените, если она не main
      MAIN_BRANCH: ${MAIN_BRANCH:-main}
      PORT: 3000
      PUBLIC_URL: ${PUBLIC_URL:-}
      SECRET: ${SECRET:-change-me-secret}
    ports:
      - "3000:3000"
    restart: unless-stopped
    volumes:
      - report-data:/data

volumes:
  report-data:

ACCESS_TOKEN и SECRET — произвольные строки, которые вам нужно придумать самим (в идеале — что-то длинное, что нельзя угадать; подробнее о них в документации проекта). Здесь у этих параметров есть значения по умолчанию, так что файл будет работать, даже если в нём ничего не менять.

Положите файл compose.yaml туда, откуда будете запускать Docker. Команда для запуска обычная:

docker compose up -d

После того как вы запустите контейнер, проверьте, что всё работает:

curl http://localhost:3000/api/ping

Файлы отчётов по умолчанию хранятся локально. При желании можно настроить хранение в S3-совместимом сервисе.

3. Как связать Allure 3 с хранилищем

Хранилище заработало — теперь настало время связать с ним Allure 3. Для этого запросите у хранилища токен следующей командой:

curl -sS -X POST http://localhost:3000/api/token \
  -H "Authorization: Bearer access_token_из_файла_compose"

(здесь ACCESS_TOKEN нужно взять из прошлого раздела)

Теперь внесите два изменения в файл конфигурации Allure 3:

  • добавьте только что сгенерированный токен;

  • укажите publish: true в настройках плагина, который должен публиковать отчёт.

export default {
  name: "Отчёт с историей",
  output: "./allure-report",
  historyPath: "./test-history/history.jsonl",
  plugins: {
    awesome: {
      import: "@allurereport/plugin-awesome",
      options: {
        reportName: "Отчёт",
        reportLanguage: "ru",
        // Этот отчёт будет опубликован через Allure Storage
        publish: true,
      },
    },
  },
  allureService: {
    // Только что созданный токен:
    accessToken: "ars1...",
  },
};

На этом подготовка закончена. Теперь после каждого запуска тестов Allure 3 будет выгружать отчёты в контейнер, и их можно будет посмотреть по адресу:

http://localhost:3000/reports/tree?repo=имя-вашего-репозитория

Если страница открывается, но отчётов там нет:

  • убедитесь, что в файле настроек (здесь — allurerc.js) вы правильно указали название ветки, для которой публикуется отчёт (по умолчанию — main);

  • убедитесь, что запускаете именно Allure 3 (npx allure run -- "команда запуска тестов").

Страница с отчётами должна выглядеть примерно так:

Главная страница Allure Report Storage
Главная страница Allure Report Storage

Здесь под именем ветки указаны все связанные с ней отчёты.

4. Работа с хранилищем

Отчёты в хранилище организованы по названиям репозитория и ветки. И то, и другое определяется автоматически:

  • если хранилище развёрнуто локально — по имени текущего репозитория и ветки;

  • если хранилище развёрнуто на одном из поддерживаемых CI-серверов — по переменным среды.

Ветку, из которой берутся отчёты, можно поменять следующей командой:

curl -sS -X POST http://localhost:3000/api/projects/main-branch \
  -H "Authorization: Bearer access_token" \
  -H "Content-Type: application/json" \
  -d '{ "repo": "repo_name", "main_branch": "main_branch_name"}'

В команде нужно заменить три параметра:

  • access_token — токен из прошлого раздела;

  • repo_name — имя репозитория;

  • main_branch_name — имя ветки.

Хранилище не ограничивает срок хранения отчётов, а удалить их можно только вручную. По умолчанию хранилище показывает 10 последних отчётов — чтобы изменить это значение, добавьте в файл настроек строку:

export default {
  ...
  historyLimit: 50,
};

Чтобы удалить отчёт, выполните команду:

curl -sS -X POST http://localhost:3000/api/report/<report-uuid>/delete \  -H "Authorization: Bearer ars1..."

Обратите внимание, что здесь используется не ACCESS_TOKEN из compose.yaml, а токен, полученный через API хранилища.

5. Что даёт Allure Report Storage

Allure Report Storage — отличное место для централизованного постоянного хранения отчётов, где их удобно смотреть с любой машины. Сообщество Allure Report давно чувствовало потребность в таком хранилище и создавало свои решения — теперь же есть и официальный ответ.

Комментарии (0)