Pytest — макет конфигурации[<имя_раздела>] через configparser.ConfigParser()/config.read()Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pytest — макет конфигурации[<имя_раздела>] через configparser.ConfigParser()/config.read()

Сообщение Anonymous »

цель: я хочу протестировать оболочку подключения нашего веб-сервиса, например. GitLab, SFTP, MySQL.
Я застрял на следующей части:

Код: Выделить всё

config = configparser.ConfigParser()
config.read(r"C:\git\config.ini")
Как мне смоделировать/исправить/MagicMock, чтобы config[] возвращал определенное в test_gitlab.py значение для данного ключа. Поскольку мы получили различные вызовы вышеуказанной структуры в различных файлах .py, я бы хотел, если это возможно, не менять фактический вызов config.read(r"C:\git\config.ini").
Подходы, которые казались многообещающими, но потерпели неудачу:
  • mock configparser.ConfigParser.read.return_value = config_dict --> это не изменяет конфигурацию переменной, вместо этого возвращает dict, который (в лучшем случае) не сохраняется или прерывает выполнение
  • добавьте раздел 'GITLAB_TEST' в test_pytest.py через config.add_section('GITLAB_TEST'), config.set('GITLAB_TEST', 'token', 'test_token') --> config и его определенные разделы перезаписываются в gitlab.py как config = configparser.ConfigParser( )

Код: Выделить всё

    # ./module/io/gitlab.py
import configparser
import os
import sys
import gitlab

class GitlabApi:
def __init__(self, client=None):
if sys.platform == "win32":
config = configparser.ConfigParser()
config.read(r"C:\git\config.ini")
self.token = config["GITLAB_{}".format(client)]["token"]

def return_client(self):
self.api = gitlab.Gitlab(
"https://gitlab.company_name.com",
private_token=self.token
)
self.api.auth()
return self.api

# ./tests/test_gitlab.py
import pytest
from unittest.mock import MagicMock
from unittest.mock import Mock
from ane.io import gitlab

def test_return_client_win32():
gitlab.sys = Mock(platform="win32")
gitlab.gitlab.Gitlab = MagicMock()

test_client, expected_private_token, expected_url = "test", "test_token", "test_url"
config_dict = {
"GITLAB_TEST": {"token": "test_token"},
"GITLAB_SCRIPTS": {"token": "script_token"},
}

# following does not work
gitlab.configparser.ConfigParser = MagicMock()
gitlab.configparser.ConfigParser.return_value.read.return_value = config_dict

gitlab.GitlabApi(client=test_client)  # mocked object
gitlab.gitlab.Gitlab.assert_called_once_with(
expected_url, private_token=expected_private_token
)
Несколько переполнений стека, которые не помогли мне, но могут помочь другим:
  • Проверьте, config.read был вызван с правильным аргументом
  • Различный путь к файлу конфигурации на рабочем сервере и на локальном компьютере
python 3.7

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • VOLTTRON: ошибка установки configparser.NoSectionError: нет раздела: «вольттрон»
    Anonymous » » в форуме Linux
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Ошибка установки configparser.NoSectionError: нет раздела: «вольттрон»
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Python ConfigParser Проверка существования как раздела, так и значения ключа
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Использование ConfigParser для чтения файла без имени раздела
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Использование ConfigParser для чтения файла без имени раздела
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

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