Metadata-Version: 2.4
Name: allure-cli
Version: 0.2.4
Summary: CLI для Allure TestOps: получение Allure ID тест-кейса по названию
Author: Allure CLI Contributors
License-Expression: MIT
Project-URL: Homepage, https://github.com/teka1905/allure_cli
Project-URL: Repository, https://github.com/teka1905/allure_cli
Project-URL: Bug Tracker, https://github.com/teka1905/allure_cli/issues
Keywords: allure,testops,testing,qa,cli
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# Allure CLI

CLI для работы с Allure TestOps. Основная задача — получение Allure ID тест-кейса по названию.

[![PyPI version](https://badge.fury.io/py/allure-cli.svg)](https://pypi.org/project/allure-cli/)
[![Python](https://img.shields.io/pypi/pyversions/allure-cli.svg)](https://pypi.org/project/allure-cli/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Требования

- Python 3.10+
- Внешние зависимости не нужны (только stdlib)

## Установка

```bash
pip install allure-cli
```

После установки команда `allure-cli` будет доступна в PATH.

## Настройка

Переменные окружения (или аргументы `--url`, `--token`, `--project`):

| Переменная | Описание |
|------------|----------|
| `ALLURE_ENDPOINT` или `ALLURE_TESTOPS_URL` | Базовый URL Allure TestOps (например, `https://allure-testops.example.com`) |
| `ALLURE_TOKEN` | API-токен (создаётся в Allure: профиль → API Tokens) |
| `ALLURE_PROJECT_ID` | ID проекта (например, `211`) |

**Постоянно (zsh/bash):** добавьте в `~/.zshrc` или `~/.bashrc`:

```bash
# Allure TestOps CLI
export ALLURE_ENDPOINT="https://allure-testops.example.com"
export ALLURE_PROJECT_ID="YOUR_PROJECT_ID"
export ALLURE_TOKEN="<YOUR_TOKEN>"
```

## Использование

CLI поддерживает четыре команды:

1. **`search`** (по умолчанию) — поиск тест-кейсов по ID или названию
2. **`find-orphaned`** — поиск осиротевших (устаревших) тестов
3. **`delete`** — удаление тест-кейсов по ID из CSV файла
4. **`create`** — создание новых тест-кейсов из CSV или JSON файла

**Справка:**

```bash
# Общая справка
allure-cli
allure-cli --help

# Справка по команде search
allure-cli search
allure-cli search --help

# Справка по команде find-orphaned
allure-cli find-orphaned --help

# Справка по команде delete
allure-cli delete --help

# Справка по команде create
allure-cli create --help
```

### Команда `search` (поиск тестов)

```bash
export ALLURE_ENDPOINT=https://allure-testops.example.com
export ALLURE_PROJECT_ID=211
export ALLURE_TOKEN=<ваш_токен>

# Поиск по подстроке названия
allure-cli search "Автоответ в чат"

# Старый синтаксис (без команды) тоже работает
allure-cli "Автоответ в чат"

# Показать справку
allure-cli search
allure-cli search --help
```

**Примеры:**

```bash
# Поиск по подстроке названия — выводит id и name с цветами
allure-cli search "Автоответ в чат"

# Поиск по ID (число)
allure-cli search 12345

# Только ID, по одному на строку (без цветов)
allure-cli search -q "Автоответ в чат"

# Без цветов
allure-cli search --no-color "Автоответ в чат"

# Параметры через аргументы
allure-cli search --url https://allure-testops.example.com --project 211 --token $ALLURE_TOKEN "запрос"
```

**Вывод:**

- В обычном режиме: номер, ID (синий), название (циан), и fullName (серый) если отличается
- Результаты с цветной подсветкой для лучшей читаемости
- В quiet режиме (`-q`): только ID, по одному на строку (без цветов)

**Пример вывода:**

```
Found 3 test cases:

1. ID 12345    User login with valid credentials
   └─ tests.auth.test_login.test_user_login_valid
2. ID 12389    User login with OAuth provider
   └─ tests.auth.oauth.test_login_oauth
3. ID 12401    User login with 2FA enabled
   └─ tests.auth.two_factor.test_login_2fa
```

Где:

- `12345`, `12389`, `12401` — синий, жирный (ID)
- `User login...` — циан (название)
- `tests.auth...` — серый (fullName)

**Примечание:** Значение **ID** — это Allure ID для декоратора `@allure.id("...")` в коде тестов.

### Команда `find-orphaned` (поиск устаревших тестов)

Находит потенциально осиротевшие тест-кейсы — тесты, которые давно не обновлялись и имеют похожие активные тесты (потенциальные дубликаты с новым ID).

**Проблема:** Когда в автотестах меняется название шагов или имя сценария, Allure генерирует новый ID. В БД остаётся старый тест, который больше не выполняется и не поддерживается.

**Решение:** Команда `find-orphaned` ищет такие тесты по двум критериям:

1. Тест не обновлялся N дней (по умолчанию 30)
2. Есть другие тесты с похожими названиями (similarity >= 0.75)

```bash
# Найти осиротевшие тесты (по умолчанию: неактивны 30+ дней + similarity >= 0.75)
allure-cli find-orphaned

# Только неактивные тесты (без проверки схожести)
allure-cli find-orphaned --days 60

# Только тесты с похожими названиями (без проверки неактивности)
allure-cli find-orphaned --similarity 0.8

# Оба критерия одновременно
allure-cli find-orphaned --days 60 --similarity 0.8

# Только ID (для скриптов)
allure-cli find-orphaned -q

# Интерактивное удаление найденных тестов
allure-cli find-orphaned --delete
```

**Параметры:**

| Параметр | Описание | По умолчанию |
|----------|----------|--------------|
| `--days` | Порог неактивности (дни). Если указан один, фильтрует только по дням | 30 (если не указан `--similarity`) |
| `--similarity` | Порог схожести названий (0.0-1.0). Если указан один, фильтрует только по схожести | 0.75 (если не указан `--days`) |
| `--no-normalize` | Отключить умную нормализацию названий (см. ниже) | false (нормализация включена) |
| `--no-color` | Отключить цветной вывод | false (цвета включены) |
| `--delete` | Интерактивное удаление найденных тестов | false |
| `-q, --quiet` | Вывести только ID | false |

**Цветной вывод:**

По умолчанию результаты выводятся с цветами для лучшей читаемости:

- 🔴 **Красный** — осиротевшие тесты (кандидаты на удаление)
- 🟢 **Зелёный** — высокая схожесть (≥0.9) или свежие тесты (<7 дней)
- 🟡 **Жёлтый** — средняя схожесть (0.75-0.9) или средний возраст (7-30 дней)
- 🔵 **Синий** — ID тестов
- 🟣 **Пурпурный** — заголовки секций
- ⚪ **Серый** — второстепенная информация

Цвета автоматически отключаются при:

- Перенаправлении вывода в файл
- Переменной окружения `NO_COLOR`
- Флаге `--no-color`

```bash
# Отключить цвета
allure-cli find-orphaned --no-color

# Или через переменную окружения
NO_COLOR=1 allure-cli find-orphaned
```

### Команда `delete` (удаление тестов)

Удаляет тест-кейсы по ID из CSV файла. Поддерживает форматы CSV с разделителями ',' или ';'.

**Пример CSV файла:**

```
id,name
12345,Test case 1
12346,Test case 2
```

**Использование:**

```bash
# Удалить тест-кейсы из CSV файла
allure-cli delete --file test_cases.csv

# Удалить тест-кейсы без подтверждения (опасно!)
allure-cli delete --file test_cases.csv --yes

# Удалить тест-кейсы и показать подробный вывод
allure-cli delete --file test_cases.csv --verbose

# Удалить тест-кейсы без получения их деталей (быстрее)
allure-cli delete --file test_cases.csv --no-fetch
```

**Параметры:**

| Параметр | Описание | По умолчанию |
|----------|----------|--------------|
| `--file` | Путь к CSV файлу с ID тестов | Обязательный |
| `--yes` | Пропустить подтверждение удаления | false |
| `--verbose` | Показать подробный вывод | false |
| `--no-fetch` | Не получать детали тестов перед удалением | false |
| `--no-color` | Отключить цветной вывод | false |

**Интерактивное подтверждение:**
Команда по умолчанию запрашивает подтверждение перед удалением каждого теста:

- `y` — удалить тест
- `n` — пропустить
- `q` — завершить

**Пример вывода:**

```
Found 2 test case(s) in CSV file:
1. ID 12345 - Test case 1
2. ID 12346 - Test case 2

Delete these test cases? [y/N]: y

Deleting test cases...
[1/2] Test case 12345: deleted
[2/2] Test case 12346: deleted

Successfully deleted 2 test case(s)
```

### Команда `create` (создание тестов)

Создает новые тест-кейсы из CSV или JSON файла.

**Пример CSV файла:**

```
name,description,tags
"New test case 1","Description for test case 1","tag1;tag2"
"New test case 2","Description for test case 2","tag3"
```

**Пример JSON файла:**

```json
[
  {
    "name": "New test case 1",
    "description": "Description for test case 1",
    "tags": ["tag1", "tag2"]
  },
  {
    "name": "New test case 2",
    "description": "Description for test case 2",
    "tags": ["tag3"]
  }
]
```

**Использование:**

```bash
# Создать тест-кейсы из CSV файла
allure-cli create --file test_cases.csv

# Создать тест-кейсы из JSON файла
allure-cli create --file test_cases.json

# Создать тест-кейсы с дополнительными тегами
allure-cli create --file test_cases.csv --tag "new" --tag "automated"

# Создать тест-кейсы и показать подробный вывод
allure-cli create --file test_cases.csv --verbose
```

**Параметры:**

| Параметр | Описание | По умолчанию |
|----------|----------|--------------|
| `--file` | Путь к CSV или JSON файлу | Обязательный |
| `--tag` | Дополнительные теги для всех тестов | [] |
| `--verbose` | Показать подробный вывод | false |
| `--no-color` | Отключить цветной вывод | false |

**Интерактивный процесс:**
Команда показывает прогресс создания каждого теста:

- `✓` — успешно создан
- `✗` — ошибка при создании

**Пример вывода:**

```
Creating test cases from test_cases.csv...
[1/2] New test case 1: created (ID: 12347)
[2/2] New test case 2: created (ID: 12348)

Successfully created 2 test case(s)
```

**Логика работы флагов:**

- Без флагов: применяются оба критерия (`--days 30 --similarity 0.75`)
- Только `--days N`: ищет тесты неактивные N+ дней (без проверки схожести)
- Только `--similarity X`: ищет тесты с похожими названиями (без проверки неактивности)
- Оба флага: применяются оба критерия одновременно

**Умная нормализация названий:**

По умолчанию включена нормализация названий для более точного поиска дубликатов. Удаляется "шум":

- **Даты**: `2024-01-15`, `15/01/2024`, `20240115`
- **Временные метки**: `14:30:45`, Unix timestamps
- **Версии**: `v1.2.3`, `version 2`
- **ID и номера**: `test-123`, `[ID-456]`, `#789`, изолированные числа
- **Стоп-слова**: `test`, `check`, `verify`, `should`, `when`, `then`, `given`

**Примеры:**

```
Оригинал: "Test [TC-123] User login verification 2024-01-15"
Нормализованное: "user login"

Оригинал: "Check user login #456 v2.0"  
Нормализованное: "user login"

Результат: similarity = 1.0 (идентичны после нормализации)
```

Чтобы отключить нормализацию (сравнивать названия как есть):

```bash
allure-cli find-orphaned --no-normalize
```

**Пример вывода:**

```
Searching for orphaned tests (inactive for 30+ days, similarity >= 0.75)...

Found 2 potentially orphaned test(s):

1. Test ID 12345 (inactive for 45 days)
   Name: User login test
   Similar tests found:
      - ID 12389 (similarity: 0.92, inactive: 2 days)
        User login test updated
      - ID 12401 (similarity: 0.85, inactive: 0 days)
        User login with OAuth test

2. Test ID 11234 (inactive for 67 days)
   Name: Payment flow test
   Similar tests found:
      - ID 12500 (similarity: 0.88, inactive: 1 days)
        Payment flow test refactored
```

**Интерактивное удаление:**

```bash
allure-cli find-orphaned --delete
```

Для каждого найденного теста будет предложено:

- `y` — удалить тест
- `n` — пропустить
- `q` — завершить

## Авторизация

Используется схема из [документации ТестОпс](https://docs.qatools.ru/api): API-токен обменивается на JWT через `POST /api/uaa/oauth/token`, далее запросы к API — с заголовком `Authorization: Bearer <jwt>`.

JWT кэшируется на диск (`~/.cache/allure-cli/` или `$XDG_CACHE_HOME/allure-cli/`), чтобы не запрашивать новый токен при каждом вызове. При ответе 401 от API кэш сбрасывается и токен запрашивается заново автоматически.
-e 
