用于什么“ pytest.mark.asyncio”?

时间:2019-08-12 13:11:37

标签: python-3.x pytest pytest-asyncio

我不知道可以将装饰器@pytest.mark.asyncio用于哪些目的。

我尝试在安装了pytestpytest-asyncio插件的情况下运行以下代码段,但该代码段失败,因此我得出结论pytest无需装饰器即可收集测试协程。为什么会这样存在?

async def test_div():
    return 1 / 0

1 个答案:

答案 0 :(得分:0)

当您的测试标记有@pytest.mark.asyncio时,它们与正文中的关键字await一起变为coroutines

pytest将使用event_loop装置提供的事件循环将其作为异步任务执行:

此代码与装饰器

@pytest.mark.asyncio
async def test_example(event_loop):
    do_stuff()    
    await asyncio.sleep(0.1, loop=event_loop)

等同于编写:

def test_example():
    loop = asyncio.new_event_loop()
    try:
        do_stuff()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(asyncio.sleep(0.1, loop=loop))
    finally:
        loop.close()