savetest-cli 0.1.1__tar.gz → 0.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- savetest_cli-0.1.3/PKG-INFO +213 -0
- savetest_cli-0.1.3/README.md +203 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/pyproject.toml +1 -1
- savetest_cli-0.1.3/savetest_cli/__init__.py +1 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli/cli.py +138 -66
- savetest_cli-0.1.3/savetest_cli.egg-info/PKG-INFO +213 -0
- savetest_cli-0.1.1/PKG-INFO +0 -132
- savetest_cli-0.1.1/README.md +0 -122
- savetest_cli-0.1.1/savetest_cli/__init__.py +0 -1
- savetest_cli-0.1.1/savetest_cli.egg-info/PKG-INFO +0 -132
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/MANIFEST.in +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli/pwa-512x512.png +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli.egg-info/SOURCES.txt +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli.egg-info/dependency_links.txt +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli.egg-info/entry_points.txt +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli.egg-info/requires.txt +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/savetest_cli.egg-info/top_level.txt +0 -0
- {savetest_cli-0.1.1 → savetest_cli-0.1.3}/setup.cfg +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: savetest-cli
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary: CLI for SaveTest: zip Allure results and upload them to SaveTest
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Requires-Python: >=3.8
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: click>=8.0
|
|
9
|
+
Requires-Dist: requests>=2.28
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<img src="savetest_cli/pwa-512x512.png" alt="SaveTest" width="128">
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
# savetest-cli
|
|
16
|
+
|
|
17
|
+
CLI-утилита для упаковки Allure-результатов в ZIP и загрузки их в SaveTest.
|
|
18
|
+
|
|
19
|
+
## Установка
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install savetest-cli
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Быстрый старт
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# 1. Упаковать директорию с результатами в ZIP
|
|
31
|
+
savetest zip_report ./AllureReport
|
|
32
|
+
|
|
33
|
+
# 2. Загрузить в SaveTest и дождаться создания тест-рана
|
|
34
|
+
export SAVETEST_HOST=https://savetest.example.com
|
|
35
|
+
export SAVETEST_TOKEN=sat_xxxxxxxxxxxxxxxx
|
|
36
|
+
export SAVETEST_PROJECT_ID=42
|
|
37
|
+
export SAVETEST_BRANCH=main
|
|
38
|
+
|
|
39
|
+
savetest upload --test-run-name "Smoke $(date +%Y-%m-%d)"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Переменные окружения
|
|
45
|
+
|
|
46
|
+
Все параметры можно задать через переменные окружения — не нужно указывать флаги при каждом вызове.
|
|
47
|
+
|
|
48
|
+
| Переменная | Обязательна | Описание |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `SAVETEST_HOST` | да | URL вашего SaveTest, например `https://savetest.example.com` |
|
|
51
|
+
| `SAVETEST_TOKEN` | да | API-токен (создаётся в настройках профиля SaveTest) |
|
|
52
|
+
| `SAVETEST_PROJECT_ID` | да | ID проекта в SaveTest |
|
|
53
|
+
| `SAVETEST_BRANCH` | нет | Ветка Git, привязываемая к тест-рану |
|
|
54
|
+
| `SAVETEST_TEST_RUN_ID` | нет | ID существующего тест-рана (если не задан — создаётся новый) |
|
|
55
|
+
| `SAVETEST_TEST_RUN_NAME` | нет | Имя нового тест-рана |
|
|
56
|
+
| `SAVETEST_TEST_RUN_DESCRIPTION` | нет | Описание нового тест-рана |
|
|
57
|
+
| `SAVETEST_TEST_RUN_VERSION` | нет | Версия системы |
|
|
58
|
+
| `SAVETEST_TEST_RUN_REVISION` | нет | Ревизия / номер сборки |
|
|
59
|
+
| `SAVETEST_TEST_RUN_OBJECT` | нет | Объект тестирования |
|
|
60
|
+
| `SAVETEST_EPIC_ID` | нет | ID эпика для привязки тест-рана |
|
|
61
|
+
| `SAVETEST_EPIC_NAME` | нет | Наименование эпика в проекте (если ID неизвестен) |
|
|
62
|
+
| `SAVETEST_CONFIGURATION_ID` | нет | ID конфигурации тест-рана |
|
|
63
|
+
| `SAVETEST_CONFIGURATION_NAME` | нет | Наименование конфигурации в проекте |
|
|
64
|
+
| `SAVETEST_INCLUDE_ATTACHMENTS` | нет | `true` — включать вложения в ZIP, `false` — исключать (быстрее) |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Команды
|
|
69
|
+
|
|
70
|
+
### `savetest zip_report <path>`
|
|
71
|
+
|
|
72
|
+
Упаковывает директорию с Allure-результатами в ZIP-архив.
|
|
73
|
+
|
|
74
|
+
По умолчанию вложения (картинки, видео, `*-attachment.json`) **не включаются** — архив получается меньше и грузится быстрее. Флаг `--include-attachments` включает их.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
savetest zip_report [OPTIONS] PATH
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
| Опция | По умолчанию | Описание |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `PATH` | — | Путь к директории с Allure-результатами |
|
|
83
|
+
| `--output`, `-o` | `allure-results.zip` | Путь к выходному ZIP-файлу |
|
|
84
|
+
| `--include-attachments` | выключено | Включить вложения (картинки, видео, `*-attachment.json`) |
|
|
85
|
+
|
|
86
|
+
**Примеры:**
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
savetest zip_report ./AllureReport
|
|
90
|
+
|
|
91
|
+
savetest zip_report ./AllureReport --output report.zip
|
|
92
|
+
|
|
93
|
+
savetest zip_report ./AllureReport --include-attachments
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### `savetest upload`
|
|
99
|
+
|
|
100
|
+
Загружает ZIP-файл в SaveTest по частям и ждёт завершения импорта. По завершении выводит ссылку на созданный тест-ран.
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
savetest upload [OPTIONS]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
| Опция | Env-переменная | По умолчанию | Описание |
|
|
107
|
+
|---|---|---|---|
|
|
108
|
+
| `--host` | `SAVETEST_HOST` | — | URL SaveTest (**обязательно**) |
|
|
109
|
+
| `--token`, `-t` | `SAVETEST_TOKEN` | — | API-токен (**обязательно**) |
|
|
110
|
+
| `--project-id`, `-p` | `SAVETEST_PROJECT_ID` | — | ID проекта (**обязательно**) |
|
|
111
|
+
| `--zip-file`, `-z` | — | `allure-results.zip` | Путь к ZIP-файлу |
|
|
112
|
+
| `--branch`, `-b` | `SAVETEST_BRANCH` | — | Ветка Git |
|
|
113
|
+
| `--test-run-name` | `SAVETEST_TEST_RUN_NAME` | — | Имя нового тест-рана |
|
|
114
|
+
| `--description` | `SAVETEST_TEST_RUN_DESCRIPTION` | — | Описание нового тест-рана |
|
|
115
|
+
| `--version` | `SAVETEST_TEST_RUN_VERSION` | — | Версия системы |
|
|
116
|
+
| `--revision` | `SAVETEST_TEST_RUN_REVISION` | — | Ревизия / номер сборки |
|
|
117
|
+
| `--test-object` | `SAVETEST_TEST_RUN_OBJECT` | — | Объект тестирования |
|
|
118
|
+
| `--epic-id` | `SAVETEST_EPIC_ID` | — | ID эпика |
|
|
119
|
+
| `--epic-name` | `SAVETEST_EPIC_NAME` | — | Наименование эпика в проекте |
|
|
120
|
+
| `--configuration-id` | `SAVETEST_CONFIGURATION_ID` | — | ID конфигурации |
|
|
121
|
+
| `--configuration-name` | `SAVETEST_CONFIGURATION_NAME` | — | Наименование конфигурации |
|
|
122
|
+
| `--test-run-id` | `SAVETEST_TEST_RUN_ID` | — | ID существующего тест-рана |
|
|
123
|
+
| `--include-attachments` | `SAVETEST_INCLUDE_ATTACHMENTS` | выключено | Сообщить серверу, что ZIP содержит вложения |
|
|
124
|
+
| `--chunk-size` | — | `50` | Размер чанка при загрузке (МБ) |
|
|
125
|
+
| `--wait` / `--no-wait` | — | `--wait` | Ждать завершения импорта |
|
|
126
|
+
| `--timeout` | — | `3600` | Таймаут ожидания (сек) |
|
|
127
|
+
| `--poll-interval` | — | `1.5` | Интервал опроса статуса (сек) |
|
|
128
|
+
|
|
129
|
+
`--host`, `--token` и `--project-id` обязательны. Передавайте их через флаги или переменные окружения.
|
|
130
|
+
|
|
131
|
+
**Примеры:**
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# Через переменные окружения (рекомендуется)
|
|
135
|
+
export SAVETEST_HOST=https://savetest.example.com
|
|
136
|
+
export SAVETEST_TOKEN=sat_xxxxxxxxxxxxxxxx
|
|
137
|
+
export SAVETEST_PROJECT_ID=42
|
|
138
|
+
|
|
139
|
+
savetest upload --branch main --test-run-name "Regression $(date +%Y-%m-%d)"
|
|
140
|
+
|
|
141
|
+
# Новый тест-ран с эпиком, конфигурацией и метаданными
|
|
142
|
+
savetest upload \
|
|
143
|
+
--branch main \
|
|
144
|
+
--test-run-name "Smoke $(date +%Y-%m-%d)" \
|
|
145
|
+
--epic-name "Release 2.4" \
|
|
146
|
+
--configuration-name "Chrome / Windows" \
|
|
147
|
+
--version "2.4.0" \
|
|
148
|
+
--description "Nightly smoke on staging"
|
|
149
|
+
|
|
150
|
+
# Загрузить в существующий тест-ран
|
|
151
|
+
savetest upload --branch main --test-run-id 17
|
|
152
|
+
|
|
153
|
+
# Загрузить другой ZIP с вложениями, не ждать импорта
|
|
154
|
+
savetest upload --zip-file full-report.zip --include-attachments --no-wait
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Настройка в Jenkins
|
|
160
|
+
|
|
161
|
+
Добавьте токен в **Jenkins → Manage Jenkins → Credentials** (тип: Secret text, ID: `savetest-token`).
|
|
162
|
+
|
|
163
|
+
В `Jenkinsfile` используйте `withCredentials` и `parameters`, чтобы не хранить конфигурацию в коде:
|
|
164
|
+
|
|
165
|
+
```groovy
|
|
166
|
+
pipeline {
|
|
167
|
+
agent any
|
|
168
|
+
|
|
169
|
+
parameters {
|
|
170
|
+
string(name: 'SAVETEST_HOST', defaultValue: '', description: 'URL SaveTest')
|
|
171
|
+
string(name: 'SAVETEST_PROJECT_ID', defaultValue: '', description: 'ID проекта в SaveTest')
|
|
172
|
+
string(name: 'SAVETEST_BRANCH', defaultValue: '', description: 'Ветка Git')
|
|
173
|
+
string(name: 'SAVETEST_TEST_RUN_ID',defaultValue: '', description: 'ID тест-рана (пусто = создать новый)')
|
|
174
|
+
booleanParam(name: 'INCLUDE_ATTACHMENTS', defaultValue: false, description: 'Включать вложения в ZIP')
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
stages {
|
|
178
|
+
// ... ваши стадии запуска тестов ...
|
|
179
|
+
|
|
180
|
+
stage('Upload to SaveTest') {
|
|
181
|
+
steps {
|
|
182
|
+
withCredentials([string(credentialsId: 'savetest-token', variable: 'SAVETEST_TOKEN')]) {
|
|
183
|
+
sh '''
|
|
184
|
+
pip install savetest-cli
|
|
185
|
+
|
|
186
|
+
savetest zip_report "${WORKSPACE}/AllureReport" \
|
|
187
|
+
$([ "${INCLUDE_ATTACHMENTS}" = "true" ] && echo "--include-attachments")
|
|
188
|
+
|
|
189
|
+
savetest upload \
|
|
190
|
+
--host "${SAVETEST_HOST}" \
|
|
191
|
+
--project-id "${SAVETEST_PROJECT_ID}" \
|
|
192
|
+
--branch "${SAVETEST_BRANCH}" \
|
|
193
|
+
--test-run-name "Jenkins ${JOB_NAME} #${BUILD_NUMBER}" \
|
|
194
|
+
$( [ -n "${SAVETEST_TEST_RUN_ID}" ] && echo "--test-run-id ${SAVETEST_TEST_RUN_ID}" ) \
|
|
195
|
+
$( [ "${INCLUDE_ATTACHMENTS}" = "true" ] && echo "--include-attachments" )
|
|
196
|
+
'''
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
> `SAVETEST_TOKEN` берётся из Jenkins Credentials и передаётся в окружение через `withCredentials` — в лог и в код сборки он не попадает.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Получение API-токена
|
|
209
|
+
|
|
210
|
+
1. Войдите в SaveTest.
|
|
211
|
+
2. Откройте **Настройки профиля → API-токены**.
|
|
212
|
+
3. Создайте новый токен и скопируйте его значение.
|
|
213
|
+
4. Добавьте токен в Jenkins Credentials (или экспортируйте локально через `export SAVETEST_TOKEN=...`).
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="savetest_cli/pwa-512x512.png" alt="SaveTest" width="128">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# savetest-cli
|
|
6
|
+
|
|
7
|
+
CLI-утилита для упаковки Allure-результатов в ZIP и загрузки их в SaveTest.
|
|
8
|
+
|
|
9
|
+
## Установка
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install savetest-cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Быстрый старт
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 1. Упаковать директорию с результатами в ZIP
|
|
21
|
+
savetest zip_report ./AllureReport
|
|
22
|
+
|
|
23
|
+
# 2. Загрузить в SaveTest и дождаться создания тест-рана
|
|
24
|
+
export SAVETEST_HOST=https://savetest.example.com
|
|
25
|
+
export SAVETEST_TOKEN=sat_xxxxxxxxxxxxxxxx
|
|
26
|
+
export SAVETEST_PROJECT_ID=42
|
|
27
|
+
export SAVETEST_BRANCH=main
|
|
28
|
+
|
|
29
|
+
savetest upload --test-run-name "Smoke $(date +%Y-%m-%d)"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Переменные окружения
|
|
35
|
+
|
|
36
|
+
Все параметры можно задать через переменные окружения — не нужно указывать флаги при каждом вызове.
|
|
37
|
+
|
|
38
|
+
| Переменная | Обязательна | Описание |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `SAVETEST_HOST` | да | URL вашего SaveTest, например `https://savetest.example.com` |
|
|
41
|
+
| `SAVETEST_TOKEN` | да | API-токен (создаётся в настройках профиля SaveTest) |
|
|
42
|
+
| `SAVETEST_PROJECT_ID` | да | ID проекта в SaveTest |
|
|
43
|
+
| `SAVETEST_BRANCH` | нет | Ветка Git, привязываемая к тест-рану |
|
|
44
|
+
| `SAVETEST_TEST_RUN_ID` | нет | ID существующего тест-рана (если не задан — создаётся новый) |
|
|
45
|
+
| `SAVETEST_TEST_RUN_NAME` | нет | Имя нового тест-рана |
|
|
46
|
+
| `SAVETEST_TEST_RUN_DESCRIPTION` | нет | Описание нового тест-рана |
|
|
47
|
+
| `SAVETEST_TEST_RUN_VERSION` | нет | Версия системы |
|
|
48
|
+
| `SAVETEST_TEST_RUN_REVISION` | нет | Ревизия / номер сборки |
|
|
49
|
+
| `SAVETEST_TEST_RUN_OBJECT` | нет | Объект тестирования |
|
|
50
|
+
| `SAVETEST_EPIC_ID` | нет | ID эпика для привязки тест-рана |
|
|
51
|
+
| `SAVETEST_EPIC_NAME` | нет | Наименование эпика в проекте (если ID неизвестен) |
|
|
52
|
+
| `SAVETEST_CONFIGURATION_ID` | нет | ID конфигурации тест-рана |
|
|
53
|
+
| `SAVETEST_CONFIGURATION_NAME` | нет | Наименование конфигурации в проекте |
|
|
54
|
+
| `SAVETEST_INCLUDE_ATTACHMENTS` | нет | `true` — включать вложения в ZIP, `false` — исключать (быстрее) |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Команды
|
|
59
|
+
|
|
60
|
+
### `savetest zip_report <path>`
|
|
61
|
+
|
|
62
|
+
Упаковывает директорию с Allure-результатами в ZIP-архив.
|
|
63
|
+
|
|
64
|
+
По умолчанию вложения (картинки, видео, `*-attachment.json`) **не включаются** — архив получается меньше и грузится быстрее. Флаг `--include-attachments` включает их.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
savetest zip_report [OPTIONS] PATH
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| Опция | По умолчанию | Описание |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `PATH` | — | Путь к директории с Allure-результатами |
|
|
73
|
+
| `--output`, `-o` | `allure-results.zip` | Путь к выходному ZIP-файлу |
|
|
74
|
+
| `--include-attachments` | выключено | Включить вложения (картинки, видео, `*-attachment.json`) |
|
|
75
|
+
|
|
76
|
+
**Примеры:**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
savetest zip_report ./AllureReport
|
|
80
|
+
|
|
81
|
+
savetest zip_report ./AllureReport --output report.zip
|
|
82
|
+
|
|
83
|
+
savetest zip_report ./AllureReport --include-attachments
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### `savetest upload`
|
|
89
|
+
|
|
90
|
+
Загружает ZIP-файл в SaveTest по частям и ждёт завершения импорта. По завершении выводит ссылку на созданный тест-ран.
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
savetest upload [OPTIONS]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
| Опция | Env-переменная | По умолчанию | Описание |
|
|
97
|
+
|---|---|---|---|
|
|
98
|
+
| `--host` | `SAVETEST_HOST` | — | URL SaveTest (**обязательно**) |
|
|
99
|
+
| `--token`, `-t` | `SAVETEST_TOKEN` | — | API-токен (**обязательно**) |
|
|
100
|
+
| `--project-id`, `-p` | `SAVETEST_PROJECT_ID` | — | ID проекта (**обязательно**) |
|
|
101
|
+
| `--zip-file`, `-z` | — | `allure-results.zip` | Путь к ZIP-файлу |
|
|
102
|
+
| `--branch`, `-b` | `SAVETEST_BRANCH` | — | Ветка Git |
|
|
103
|
+
| `--test-run-name` | `SAVETEST_TEST_RUN_NAME` | — | Имя нового тест-рана |
|
|
104
|
+
| `--description` | `SAVETEST_TEST_RUN_DESCRIPTION` | — | Описание нового тест-рана |
|
|
105
|
+
| `--version` | `SAVETEST_TEST_RUN_VERSION` | — | Версия системы |
|
|
106
|
+
| `--revision` | `SAVETEST_TEST_RUN_REVISION` | — | Ревизия / номер сборки |
|
|
107
|
+
| `--test-object` | `SAVETEST_TEST_RUN_OBJECT` | — | Объект тестирования |
|
|
108
|
+
| `--epic-id` | `SAVETEST_EPIC_ID` | — | ID эпика |
|
|
109
|
+
| `--epic-name` | `SAVETEST_EPIC_NAME` | — | Наименование эпика в проекте |
|
|
110
|
+
| `--configuration-id` | `SAVETEST_CONFIGURATION_ID` | — | ID конфигурации |
|
|
111
|
+
| `--configuration-name` | `SAVETEST_CONFIGURATION_NAME` | — | Наименование конфигурации |
|
|
112
|
+
| `--test-run-id` | `SAVETEST_TEST_RUN_ID` | — | ID существующего тест-рана |
|
|
113
|
+
| `--include-attachments` | `SAVETEST_INCLUDE_ATTACHMENTS` | выключено | Сообщить серверу, что ZIP содержит вложения |
|
|
114
|
+
| `--chunk-size` | — | `50` | Размер чанка при загрузке (МБ) |
|
|
115
|
+
| `--wait` / `--no-wait` | — | `--wait` | Ждать завершения импорта |
|
|
116
|
+
| `--timeout` | — | `3600` | Таймаут ожидания (сек) |
|
|
117
|
+
| `--poll-interval` | — | `1.5` | Интервал опроса статуса (сек) |
|
|
118
|
+
|
|
119
|
+
`--host`, `--token` и `--project-id` обязательны. Передавайте их через флаги или переменные окружения.
|
|
120
|
+
|
|
121
|
+
**Примеры:**
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Через переменные окружения (рекомендуется)
|
|
125
|
+
export SAVETEST_HOST=https://savetest.example.com
|
|
126
|
+
export SAVETEST_TOKEN=sat_xxxxxxxxxxxxxxxx
|
|
127
|
+
export SAVETEST_PROJECT_ID=42
|
|
128
|
+
|
|
129
|
+
savetest upload --branch main --test-run-name "Regression $(date +%Y-%m-%d)"
|
|
130
|
+
|
|
131
|
+
# Новый тест-ран с эпиком, конфигурацией и метаданными
|
|
132
|
+
savetest upload \
|
|
133
|
+
--branch main \
|
|
134
|
+
--test-run-name "Smoke $(date +%Y-%m-%d)" \
|
|
135
|
+
--epic-name "Release 2.4" \
|
|
136
|
+
--configuration-name "Chrome / Windows" \
|
|
137
|
+
--version "2.4.0" \
|
|
138
|
+
--description "Nightly smoke on staging"
|
|
139
|
+
|
|
140
|
+
# Загрузить в существующий тест-ран
|
|
141
|
+
savetest upload --branch main --test-run-id 17
|
|
142
|
+
|
|
143
|
+
# Загрузить другой ZIP с вложениями, не ждать импорта
|
|
144
|
+
savetest upload --zip-file full-report.zip --include-attachments --no-wait
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Настройка в Jenkins
|
|
150
|
+
|
|
151
|
+
Добавьте токен в **Jenkins → Manage Jenkins → Credentials** (тип: Secret text, ID: `savetest-token`).
|
|
152
|
+
|
|
153
|
+
В `Jenkinsfile` используйте `withCredentials` и `parameters`, чтобы не хранить конфигурацию в коде:
|
|
154
|
+
|
|
155
|
+
```groovy
|
|
156
|
+
pipeline {
|
|
157
|
+
agent any
|
|
158
|
+
|
|
159
|
+
parameters {
|
|
160
|
+
string(name: 'SAVETEST_HOST', defaultValue: '', description: 'URL SaveTest')
|
|
161
|
+
string(name: 'SAVETEST_PROJECT_ID', defaultValue: '', description: 'ID проекта в SaveTest')
|
|
162
|
+
string(name: 'SAVETEST_BRANCH', defaultValue: '', description: 'Ветка Git')
|
|
163
|
+
string(name: 'SAVETEST_TEST_RUN_ID',defaultValue: '', description: 'ID тест-рана (пусто = создать новый)')
|
|
164
|
+
booleanParam(name: 'INCLUDE_ATTACHMENTS', defaultValue: false, description: 'Включать вложения в ZIP')
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
stages {
|
|
168
|
+
// ... ваши стадии запуска тестов ...
|
|
169
|
+
|
|
170
|
+
stage('Upload to SaveTest') {
|
|
171
|
+
steps {
|
|
172
|
+
withCredentials([string(credentialsId: 'savetest-token', variable: 'SAVETEST_TOKEN')]) {
|
|
173
|
+
sh '''
|
|
174
|
+
pip install savetest-cli
|
|
175
|
+
|
|
176
|
+
savetest zip_report "${WORKSPACE}/AllureReport" \
|
|
177
|
+
$([ "${INCLUDE_ATTACHMENTS}" = "true" ] && echo "--include-attachments")
|
|
178
|
+
|
|
179
|
+
savetest upload \
|
|
180
|
+
--host "${SAVETEST_HOST}" \
|
|
181
|
+
--project-id "${SAVETEST_PROJECT_ID}" \
|
|
182
|
+
--branch "${SAVETEST_BRANCH}" \
|
|
183
|
+
--test-run-name "Jenkins ${JOB_NAME} #${BUILD_NUMBER}" \
|
|
184
|
+
$( [ -n "${SAVETEST_TEST_RUN_ID}" ] && echo "--test-run-id ${SAVETEST_TEST_RUN_ID}" ) \
|
|
185
|
+
$( [ "${INCLUDE_ATTACHMENTS}" = "true" ] && echo "--include-attachments" )
|
|
186
|
+
'''
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
> `SAVETEST_TOKEN` берётся из Jenkins Credentials и передаётся в окружение через `withCredentials` — в лог и в код сборки он не попадает.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Получение API-токена
|
|
199
|
+
|
|
200
|
+
1. Войдите в SaveTest.
|
|
201
|
+
2. Откройте **Настройки профиля → API-токены**.
|
|
202
|
+
3. Создайте новый токен и скопируйте его значение.
|
|
203
|
+
4. Добавьте токен в Jenkins Credentials (или экспортируйте локально через `export SAVETEST_TOKEN=...`).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.3"
|