我是使用 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 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(循环) 在这里查看更多: https://github.com/python/cpython/blob/6fcb6cfb139ade1aac6dbee0b18ca72b18cbe0d2/Lib/asyncio/events.py#L735
关于python - Pytest:runtimeerror线程 'mainthread'中没有当前事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66583461/