Python adapter for "swagger-coverage" tool
Project description
autotests-coverage
Этот проект является форком оригинальной библиотеки swagger-coverage-py, с внесенными изменениями для улучшения функциональности. Основная цель библиотеки — оценить покрытие автотестами API на основе Swagger/OpenAPI спецификации.
Основные изменения
- Добавлена возможность указания единого файла конфигурации для всех сервисов.
- Добавлена возможность указания папки с конфигурациями и папки для сгенерированных отчетов.
- Внесены изменения для корректной работы при использовании библиотеки pytest-xdist.
0. Установить зависимости:
- Python 3.7+
- Java JDK 11+ (с указанием переменной JAVA_HOME)
1. Установить пакет autotests-coverage
pip install swagger-coverage-metrics
2. Указать переменные
API_DOCS_TYPE="openapi" # Тип API документации. Возможные значения: "swagger", "openapi". По умолчанию указано "openapi".
API_DOCS_VERSION="3.0.0" # Версия API документации. По умолчанию указано "3.0.0".
API_DOCS_FORMAT="json" # Формат API документации. Возможные значения: "json", "yaml". По умолчанию указано "json".
DEBUG_MODE=False # Включение debug-режима. По умолчанию False.
COVERAGE_REPORTS_DIR="C:/repositories/project_name/coverage/reports" # Путь до папки, в которую будут сгенерированы отчеты.
COVERAGE_CONFIGS_DIR="C:/repositories/project_name/coverage/configs" # Пусть до папки, в которой хранятся файлы конфигураций.
ВНИМАНИЕ: Перед запуском тестов из директории, указанной в переменной "COVERAGE_REPORTS_DIR" будут удалены все данные! Не нужно указывать в переменной директорию, в которой содержатся нужные данные.
3. Добавить трассировку всех вызовов API с помощью RequestSchemaHandler
from autotests_coverage.request_schema_handler import RequestSchemaHandler
from autotests_coverage.uri import URI
def _send_requests(self, method, path, **kwargs):
full_url = self.host + path
rest_response = self.session.request(method=method, url=full_url, **kwargs)
url = URI(
host=self.host,
base_path="",
unformatted_path=path,
uri_params=kwargs.get("params"),
)
RequestSchemaHandler(
url, method.lower(), rest_response, kwargs
).write_schema()
return rest_response
4. Добавить инициализацию отчетов
import pytest
from autotests_coverage.reporter import CoverageReporter
from requests.auth import HTTPBasicAuth
@pytest.fixture(scope="session", autouse=True)
def setup_swagger_coverage():
CoverageReporter.cleanup_input_files()
reporter = CoverageReporter(
api_name="petstore",
host="https://petstore.swagger.io",
coverage_config_file_name="base_config.json"
)
reporter.setup(
path_to_swagger_json="/api/v1/resources/my_project/doc/swagger.json",
auth=HTTPBasicAuth("username", "password")
)
yield
reporter.generate_report()
Для снятия метрик нескольких сервисов добавьте инициализацию для каждого сервиса
import pytest
from autotests_coverage.reporter import CoverageReporter
from requests.auth import HTTPBasicAuth
@pytest.fixture(scope="session", autouse=True)
def setup_swagger_coverage():
CoverageReporter.cleanup_input_files()
reporter1 = CoverageReporter(
api_name="petstore",
host="https://petstore.swagger.io",
coverage_config_file_name="base_config.json"
)
reporter1.setup(
path_to_swagger_json="/v2/swagger.json",
auth=HTTPBasicAuth("username", "password")
)
reporter2 = CoverageReporter(
api_name="my-project",
host="http://my-project.com",
coverage_config_file_name="my_project_config.json",
use_custom_config=True
)
reporter2.setup(
path_to_swagger_json="/api/v1/swagger.json",
auth=HTTPBasicAuth("username", "password")
)
yield
reporter1.generate_report()
reporter2.generate_report()
Шаги и параметры
api_name- Определите имя API. Это имя будет использоваться для формирования отчета. Для API в этом примере будут сгенерированы отчеты с названиями "petstore-coverage.html" и "my-project-coverage.html".
host- Хост API. Он будет использоваться для загрузки файла swagger.json и для определения выходной директории.
coverage_config_file_name- Название файла с конфигурацией. Можно указать один и тот же файл конфигурации для нескольких сервисов. Также можно указать кастомную конфигурацию для сервисов, но тогда нужно указать значение True для параметра use_custom_config.
cleanup_input_files()- этот метод удаляет все сгенерированные файлы в папке, указанной в переменной REPORTS_DIR.
path_to_swagger_json— Вторая часть HTTP-ссылки на вашу документацию OpenAPI/Swagger в формате JSON. Адаптированный файл swagger-doc-<api_name>.json будет создан в директории, указанной в переменной REPORTS_DIR.
auth- Параметр аутентификации для библиотеки requests. Не указывайте его, если ваш API не требует аутентификации.
5. Создайте и разместите файл(ы) swagger-coverage-config.json в вашем проекте
{
"rules": {
"status": {
"enable": true,
"ignore": [
"500"
],
"filter": []
},
"paths": {
"enable": true,
"ignore": [
"/user/{username}"
]
},
"only-declared-status": {
"enable": false
},
"exclude-deprecated": {
"enable": true
}
}
}
Раздел path предназначен для исключения определенных эндпоинтов (всех методов) из итогового HTML-отчета. Для этого нужно установить параметр enable в значение true и указать список эндпоинтов (как они отображаются в документации Swagger) в разделе ignore. Затем эти эндпоинты будут удалены из документации API перед сохранением локально.
Если вам нужно сделать кастомный файл конфигурации для сервисов, то создайте json-файл в папке с конфигурациями:
{
"rules": {
"status": {
"enable": true,
"ignore": [
"500",
"401"
],
"filter": []
},
"paths": {
"enable": true,
"ignore": [
"/user/{username}"
]
},
"only-declared-status": {
"enable": false
},
"exclude-deprecated": {
"enable": true
},
"writers": {
"html": {
"locale": "ru",
"filename": "swagger-coverage-report-petstore.html"
}
}
}
}
И укажите название этого файла при инициализации отчета. При этом нужно передать аргумент use_custom_config со значением True:
import pytest
from autotests_coverage.reporter import CoverageReporter
@pytest.fixture(scope="session", autouse=True)
def setup_swagger_coverage():
CoverageReporter.cleanup_input_files()
reporter = CoverageReporter(
api_name="petstore",
host="https://petstore.swagger.io",
coverage_config_file_name="my_custom_config.json",
use_custom_config=True
)
reporter.setup(
path_to_swagger_json="/api/v1/swagger.json"
)
yield
reporter.generate_report()
Дополнительные примеры настроек конфигурации вы можете найти в разделе Configuration options документации.
6. Запустите ваши тесты и откройте в браузере "<api_name>-coverage.html" отчет, созданный в директории "COVERAGE_REPORTS_DIR"
Created by
License
swagger-coverage-metrics распространяется под версией 2.0 Apache License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autotests_coverage-1.1.0.tar.gz.
File metadata
- Download URL: autotests_coverage-1.1.0.tar.gz
- Upload date:
- Size: 22.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
062fb7ba8ff983b99227f5dda1ddc18f9cb38a05b7101ab88f75b69019ec6ca9
|
|
| MD5 |
317415c88d479b71239c256d3ff54687
|
|
| BLAKE2b-256 |
db1f53096b92df75771a337abe2fbdcdb0d23e87f9ae715a53b702ce456d1577
|
File details
Details for the file autotests_coverage-1.1.0-py3-none-any.whl.
File metadata
- Download URL: autotests_coverage-1.1.0-py3-none-any.whl
- Upload date:
- Size: 22.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
752369bea0e0a1729d1ed90b3f37518ae16bdbb29354aef648a6d547e21acda0
|
|
| MD5 |
d1c51615465c3e5ed522d6cfcd717713
|
|
| BLAKE2b-256 |
85980c555eb2f816c13f7a3af3807be8c3a8424d78f5cb3bc79366631f77a027
|