Pytest:runtimeerror 线程中没有当前事件循环 'mainthread'
Pytest: runtimeerror there is no current event loop in thread 'mainthread'
我是 asyncio 的新手,我有一个测试函数,我正在尝试使用 pytest 进行测试:这是我的测试结构:
MyClass()
async def myFunction(payload, headers):
session = aiohttp.ClientSession()
with session.post(url, json=payload, headers=headers) as resp:
response = await resp.json()
return response
然后我的测试如下:
def my_test():
loop = asyncio.get_event_loop()
reponse = loop.run_until_complete(MyClass().myFunction(url, headers))
loop.close()
当我 运行 我的测试得到了:
pytest 运行timeerror 线程中没有当前事件循环'mainthread'
我该如何解决,我觉得我需要以不同的方式处理线程。
我看过一些相关的问题但是没有人使用pytests
最后我使用 Python 3.8.6.
这应该有效:
def my_test():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
response = loop.run_until_complete(MyClass().my_function())
loop.close()
# assert your response
解释:
由于您是从测试上下文中调用 asyncio.get_event_loop(),因此 returns 一个无法使用 loop.call_later() 的循环 loop.call_later() 在内部被 aiohttp.ClientSession(),这就是为什么你需要使用
循环 = asyncio.new_event_loop()
asyncio.set_event_loop(循环)
在这里查看更多:
https://github.com/python/cpython/blob/6fcb6cfb139ade1aac6dbee0b18ca72b18cbe0d2/Lib/asyncio/events.py#L735
我是 asyncio 的新手,我有一个测试函数,我正在尝试使用 pytest 进行测试:这是我的测试结构:
MyClass()
async def myFunction(payload, headers):
session = aiohttp.ClientSession()
with session.post(url, json=payload, headers=headers) as resp:
response = await resp.json()
return response
然后我的测试如下:
def my_test():
loop = asyncio.get_event_loop()
reponse = loop.run_until_complete(MyClass().myFunction(url, headers))
loop.close()
当我 运行 我的测试得到了:
pytest 运行timeerror 线程中没有当前事件循环'mainthread'
我该如何解决,我觉得我需要以不同的方式处理线程。
我看过一些相关的问题但是没有人使用pytests 最后我使用 Python 3.8.6.
这应该有效:
def my_test():
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
response = loop.run_until_complete(MyClass().my_function())
loop.close()
# assert your response
解释:
由于您是从测试上下文中调用 asyncio.get_event_loop(),因此 returns 一个无法使用 loop.call_later() 的循环 loop.call_later() 在内部被 aiohttp.ClientSession(),这就是为什么你需要使用 循环 = asyncio.new_event_loop() asyncio.set_event_loop(循环) 在这里查看更多: https://github.com/python/cpython/blob/6fcb6cfb139ade1aac6dbee0b18ca72b18cbe0d2/Lib/asyncio/events.py#L735