模拟asycnio Python请求响应

时间:2019-06-20 15:56:28

标签: python python-requests pytest python-asyncio

我正在尝试在Python 3.6.8中测试异步功能,以及:

asyncio==3.4.3
requests==2.22.0
responses==0.10.6
pytest==4.6.3
pytest-asyncio==0.10.0

我同时请求多个URL,但缩减后的函数看起来像这样:

async def check_urls_tester(url: str) -> int:
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        loop = asyncio.get_event_loop()
        futures = [loop.run_in_executor(executor, requests.head, url)]

        response = await asyncio.gather(*futures, return_exceptions=True)
        return int(response[0].status_code)

我的测试尝试看起来像:

@responses.activate
@pytest.mark.asyncio
async def test_check_urls_async(self):
    responses.add(responses.HEAD, "https://www.google.com", status=404)
    resp = await check_urls_tester("https://www.google.com")
    assert resp == 404

我希望我的函数返回404,因为我正在使用responses模拟请求,但是返回200。我可以成功地将响应与非异步函数一起使用,但不能与该异步函数一起使用。 / p>

我在这里错过了哪一步?

0 个答案:

没有答案