Как написать unit_test для функции, которая обновляет только глобальную переменную типа dict - Python (pytest) - PullRequest
1 голос
/ 04 ноября 2019

Код модульного теста для функции, которая выполняет операцию проверки и обновляет глобальный диктант - result_count = {'test_method':{'Total_tested': 0, 'passed': 0, 'failed': 0}

ниже указана функция

def validate_response(testmethod, response, expected_data):

    ra = response.json()

    expected = expected_data['payload']

    if (response.status_code == expected['response_status']) \
         and (result_count[testmethod['folder']]["FAILED"] < 10):    

         ------code logic - checks using jsondiff and re.expressions--

    else:
        missmatch = 'response status code missmatch'
        update_result(testmethod, 'status_code', expected_data, response, missmatch, fail=True)
        result_count[testmethod['folder']]['FAILED'] += 1

Необходимостьнаписать тест для вышеуказанной функции. чтобы проверить правильность обновления result_count.

Библиотека библиотеки регулярных выражений и jsondiff также используются в упомянутой функции.

справка, необходимая для проверки глобальной переменной и ее использования для тестирования.

Во время выполнения тестового сценария, приведенного ниже, я получил ключевую ошибку для глобальной переменной result_count. Это означает, что код не может получить доступ к result_count .. ключевая ошибка после обновления - выдает TypeError: «<=» не поддерживается между экземплярами «MagicMock» и «int» </em> какОшибка В настоящее время проблема заключается в том, что значение result_count не обновляется при выполнении приведенного ниже строчного кода.

partner_test.validate_response(test_input_mocker.method, response, expected_data)

Мой сценарий модульного теста выглядит следующим образом

@patch("tests.p_test.result")
@patch("tests.p_test.result_count")
def test_validate_response_pass(result_count_mocker, monkeypatch, result_mocker, test_input_mocker):

# Build data for validate response function

response = Resp(200, {'message': 'pong'})
response_data = response.json()
expected_data = {some_test_data}

# global variable import and initialize result, result_count
from p_test import result, result_count
result_count.update(result_count_mocker.data)
result.update(result_mocker.data)
result_count_mocker.return_value = result_count_mocker.data

def update_result_mocker(*args):
    mock operations here
    return None

monkeypatch.setattr(partner_test, "update_result", update_result_mocker)
p_test.validate_response(test_input_mocker.method, response, expected_data)

Resp ()в тесте fnction - класс ответа, созданный для макета объекта ответа.

1 Ответ

0 голосов
/ 06 ноября 2019

проблема может быть решена с помощью @ patch.dict (dict_name, values) ниже приведено решение

@patch.dict(p_test.result, {dict_values })
@patch.dict(p_test.result_count, {dict_values})
def test_validate_response(monkeypatch, test_input_mocker, result_count_test):
    response = Resp(200, {'message': 'pong'})
    response_data = response.json()

    expected_data = {----your data-----}

    def update_result_mocker(*args):
        # mock_operations


    monkeypatch.setattr(p_test, "update_result", update_result_mocker)
    p_test.validate_response(test_input_mocker.method, response, expected_data)
    print(p_test.result_count)
...