[英]RuntimeError: There is no current event loop in thread 'MainThread'
[英]Pytest: runtimeerror there is no current event loop in thread 'mainthread'
我是使用 asyncio 的新手,我有一个测试 function,我正在尝试使用 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 runtimeerror 线程“主线程”中没有当前事件循环
我该如何解决它,我觉得我需要以不同的方式处理线程。
我见过一些相关的问题,但没有人使用 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() 它返回一个循环,该循环无法使用 aiohttp.ClientSession() 在内部使用的 loop.call_later(),这就是您需要使用循环的原因= asyncio.new_event_loop() asyncio.set_event_loop(loop) 在此处查看更多信息: https://github.com/python/cpython/blob/6fcb6cfb139ade1aac6dbee0b18ca72b18cbe0d2/Lib/asyncio/events.py#L735
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.