首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pytest-asyncio有一个封闭的事件循环,但仅当运行所有测试时

pytest-asyncio有一个封闭的事件循环,但仅当运行所有测试时
EN

Stack Overflow用户
提问于 2020-04-04 09:27:56
回答 1查看 2.3K关注 0票数 1

我使用pytest-asyncio版本0.10.0运行了一个测试,用于验证异步响应是否抛出了异常。

代码基本上是:

代码语言:javascript
复制
class TestThis:
    @pytest.mark.asyncio
    def test_the_thing(self):
       arg1 = "cmd"
       arg2 = "second command"
       with pytest.raises(CustomException):
           await do_thing(arg1, arg2)

现在真正奇怪的事情是,如果我单独运行它,或者如果我单独运行类,这个测试就可以正常工作。但是,当我运行所有测试(项目根目录下的pytest)时,每次都会失败,并出现运行时错误,说明循环已关闭。

EN

回答 1

Stack Overflow用户

发布于 2021-04-29 03:52:18

https://pypi.org/project/pytest-asyncio/

显然,您可以覆盖pytest-asyncio版本的事件循环fixture。它们是这样的:

代码语言:javascript
复制
@pytest.fixture
def event_loop():
    loop = asyncio.get_event_loop()
    yield loop
    loop.close()

我把它写成这样:

代码语言:javascript
复制
@pytest.fixture
def event_loop():
    loop = asyncio.get_event_loop()
    yield loop
    cleanly_shutdown(loop)

或者在其他类似的情况下:

代码语言:javascript
复制
@pytest.fixture
def event_loop():
    yield asyncio.get_event_loop()

def pytest_sessionfinish(session, exitstatus):
    asyncio.get_event_loop().close()

这些文档非常有用:https://docs.pytest.org/en/latest/reference/reference.html?highlight=sessionfinish#pytest.hookspec.pytest_sessionfinish

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61022713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档