繁体   English   中英

Pytest:运行时错误线程“主线程”中没有当前事件循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM