Использование Boto3 Stubber в качестве менеджера контекста при вызове пользовательских функций

Я пишу несколько модульных тестов, и мы хотели бы использовать boto.stub для имитации ответов aws.

В этом случае тестируемые функции просто извлекают IP-адреса на основе некоторых входных данных, используя функцию boto3.

Я следил за документацией boto для Stubber здесь: https://botocore.amazonaws.com/v1/documentation/api/latest/reference/stubber.html

    def test_ip_address_list(self):
        ec2 = botocore.session.get_session().create_client('ec2')
        response = api_stub_result() #just returns the mocked up response. IP address is set to 10.10.0.10 as a test

        with Stubber(ec2) as stubber:
            #stubber.activate() #I've tried with and without calling activate()
            stubber.add_response('describe_instances', response, {})
            results = ip_addresses("prod") #returns a list of ip addresses using describe_instances

        print(results)
        assert ("10.10.0.10") in results

Когда я запускаю это, я ожидаю, что экземпляр, описанный в api_stub_result, будет единственным возвращенным IP-адресом или, по крайней мере, будет в списке IP-адресов.

Вместо этого функция обратилась к AWS и фактически извлекает данные для наших экземпляров.


person Sam Greinert    schedule 10.06.2019    source источник
comment
Придя к этому довольно поздно, но возможно, что, поскольку вы не соответствуете ожидаемым параметрам, это приведет к тому, что стаббер вернет ваш конкретный ответ. Попробуйте вызвать describe_instances непосредственно из стаббера, чтобы увидеть, вызывает ли он ожидаемый ответ. Если это так, то проверьте свой путь к коду ip_addresses, чтобы увидеть, вводит ли он параметры в запрос, а затем либо сопоставьте их в своей заглушке, либо проигнорируйте их с помощью stub.ANY.   -  person Palpatim    schedule 21.04.2020


Ответы (1)


Вы должны активировать стаббер перед вызовом тестируемого метода. Итак, после stubber.add_response добавьте строку для активации стаббера:

stubber.activate()

И он должен работать, как ожидалось

person Spencer Sutton    schedule 26.08.2019
comment
Использование Stubber в качестве менеджера контекста обрабатывает активацию/деактивацию для вас, поэтому использование OP with Stubber(ec2)... устраняет необходимость в явном вызове для активации. - person Palpatim; 21.04.2020