Доступ к значениям из внутренней функции в приспособлении pytest - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь получить доступ к ответу внутренней функции внутри моего прибора pytest. Я не уверен, что это проблема python или что-то особенное в том, как построен pytest. Приведенный ниже фрагмент - глупый пример, но он демонстрирует проблему. У меня проблема: TypeError: 'function' object is not subscriptable. Не знаю, как решить эту проблему, и мне нужна помощь.

import pytest
import requests


@pytest.fixture
def my_fixture():
    def make_request(url):
        response = requests.get(url)
        return {'code': response.status_code, 'content': response.content}

    response = make_request
    save_for_after_yield = response['content']
    yield response

    # print simulates doing something with the content as part of the clean-up
    print(save_for_after_yield)


def test_making_requests(my_fixture):
    response = my_fixture('http://httpbin.org')
    assert 200 == response

1 Ответ

0 голосов
/ 02 августа 2020

Проблема в том, что внутренняя функция не вызывается до yield, поэтому вы не можете сохранить результат до этого (и вы не можете этого знать, поскольку не знаете параметр URL). Что вы можете сделать, так это сохранить переменную после того, как она была установлена ​​внутри внутренней функции:

@pytest.fixture
def my_fixture():
    def make_request(url):
        nonlocal response_content  # needed to access the variable in the outer function
        response = requests.get(url)
        response_content = response.content
        return {'code': response.status_code, 'content': response.content}

    response_content = None  # will be set when the fixture is used
    yield make_request
    print(response_content)


def test_making_requests(my_fixture):
    response = my_fixture('http://httpbin.org')
    assert 200 == response['code']
...