Skip to main content

Python adapter for "swagger-coverage" tool

Project description

python license

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

Jamal Zeinalov

License

swagger-coverage-metrics распространяется под версией 2.0 Apache License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

autotests_coverage-1.1.0.tar.gz (22.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

autotests_coverage-1.1.0-py3-none-any.whl (22.1 MB view details)

Uploaded Python 3

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

Hashes for autotests_coverage-1.1.0.tar.gz
Algorithm Hash digest
SHA256 062fb7ba8ff983b99227f5dda1ddc18f9cb38a05b7101ab88f75b69019ec6ca9
MD5 317415c88d479b71239c256d3ff54687
BLAKE2b-256 db1f53096b92df75771a337abe2fbdcdb0d23e87f9ae715a53b702ce456d1577

See more details on using hashes here.

File details

Details for the file autotests_coverage-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for autotests_coverage-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 752369bea0e0a1729d1ed90b3f37518ae16bdbb29354aef648a6d547e21acda0
MD5 d1c51615465c3e5ed522d6cfcd717713
BLAKE2b-256 85980c555eb2f816c13f7a3af3807be8c3a8424d78f5cb3bc79366631f77a027

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page