Как использовать несколько модулей API в одном файле тестирования?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать несколько модулей API в одном файле тестирования?

Сообщение Anonymous »

Отказ от ответственности: первое сообщение о stackoverflow, совершенно новое для pytest. Заранее спасибо!
Я часть новой команды контроля качества в компании. Сейчас мы концентрируемся на создании начальных тестов для различных API синхронизации (большинство из них отправляют/получают данные из базы данных SQL).
Мы используем python/pytest.
Каждый API имеет автоматически сгенерированный файл. пакет Python, который мы используем при тестировании этого API.
Каждый пакет имеет модуль «Конфигурация», модуль «ApiClient» и различные модули API для разных частей API.
наша файловая структура для тестирования:< /p>
API-тесты

├─ _init_.py
├─ conftest.py
│(различные API)
├─ CloudControlDbAPI
├─ WeatherForecastDbAPI
├─ WeatherForecastAPI
└─ AssetConfigurationProvider ├─ **conftest.py**

└─ tests

├─ test_battery_api.py

├─ test_battery_inverter_api.py

├─ test_device_api.py

└─ data (data folder with some known objects used for testing.

В «корневом» файле конфигурации:
import inspect
import re
import pytest

# get args
__options = ['host', 'username', 'password']

def pytest_addoption(parser):
for opt in __options:
parser.addoption(f'--{opt}')

# init module
@pytest.fixture
def api(config, api_client, module, request):
args = {k: request.config.getoption(k) for k in __options if request.config.getoption(k)}
config = config(**args)
api = api_client(configuration=config, header_name='Test', header_value=0)
api = module(api_client=api)
return api

Фикстура api() — это то, что мы в конечном итоге используем в тестах. он использует «config», «api_client» и «module».
Каждый API имеет разные модули «Configuration» и «ApiClient», а также различные «модули» API.
Каждая папка API (CloudControlDbAPI/WeatherForecastAPI/AssetConfigurationProvider) имеет собственный файл conftest.py:
from {API}_python_client import Configuration, ApiClient
import inspect
import re
import pytest

# Init #
@pytest.fixture(scope='session')
def config():
return Configuration

@pytest.fixture(scope='session')
def api_client():
return ApiClient

@pytest.fixture(scope='session')
def file_path():
return __file__

поэтому имена Configuration и ApiClient одинаковы, но для каждого API они взяты из разных пакетов.
Например, в < strong>WeatherForecastDbAPI:
from WeatherForecastApis.WeatherForecastDb_python_client import Configuration, ApiClient

В AssetConfigurationProvider:
from AssetConfigurationDataProvider_python_client import Configuration, ApiClient

Некоторые API имеют один API-модуль, а некоторые — несколько.
Каждый тестовый файл имел собственное приспособление модуля:
from AssetConfigurationDataProvider_python_client import **BatteryApi**
from data.batteries import *
import pytest

@pytest.fixture(scope='module')
def module():
return **BatteryApi**

# Tests #

@pytest.mark.parametrize("known_battery", known_batteries_list)
def test_get_battery_by_id(**api: BatteryApi**, known_battery: Battery):
res = api.get_battery_by_id(known_battery.site_entity_id)
assert res.model.model_id == known_battery.model_id
assert res.parameters == known_battery.parameters

Каждый тест использует приспособление api() из «корневого» теста, который использует приспособления config/api_client/module из дочернего конфликта каждого API.
Вопрос в следующем!
Как мы можем изменить наши conftest/fixtures, чтобы иметь возможность использовать несколько модулей API в одном файле или даже в тот же тест?
Сейчас фикстура api() наследует фикстуру "module" из файла, из которого выполняется тест, но что, если мы хотим использовать "BatteryApi" и Модули «BatteryManagingApi» в одном файле/тесте?
что мы можем изменить в структуре приспособления API или приспособления модуля, чтобы иметь возможность использовать как BatteryManagingApi, так и BatteryApi в одном тесте?
from AssetConfigurationDataProvider_python_client import BatteryManagingApi, BatteryApi

@pytest.fixture(scope='module')
def module():
return BatteryManagingApi

Я пытался создать класс, содержащий все используемые нами приспособления, но не уверен, что это лучшая практика, или есть более простой способ, я просто не вижу o_O
что я пробовал:
class Bse_Test_Api:
def __init__(self, config, api_client):
self._config = config
self._api_client = api_client
# self._module_list = module_list

def api(self, module, **args):
config = self._config(**args)
api = self._api_client(configuration=config, header_name='Test', header_value=0)
api = module(api_client=api)
return api


Подробнее здесь: https://stackoverflow.com/questions/783 ... sting-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»