同时运行测试

醋酸纤维素

我想使用asyncio(/ curio / trio)和pytest同时运行几个测试,但是我找不到任何信息。我需要自己安排时间吗?如果我这样做了,有没有办法提供一个很好的输出来区分(子)测试用例?

这是一个我正在尝试的小玩具示例:

import pytest
import time
import asyncio

pytestmark = pytest.mark.asyncio
expected_duration = 1
accepted_error = 0.1

async def test_sleep():
    start = time.time()
    time.sleep(expected_duration)
    duration = time.time() - start
    assert abs(duration-expected_duration) < accepted_error

async def test_async_sleep():
    start = time.time()
    await asyncio.sleep(expected_duration)
    duration = time.time() - start
    assert abs(duration-expected_duration) < accepted_error
纳撒尼尔·史密斯

不幸的是,pytest在内部工作的方式,您实际上不能在对trio.run/ asyncio.run/的相同调用下同时运行多个测试curio.run(这在某些方面也很不错–防止状态在测试之间泄漏,并且至少使用三重奏,它可以使您针对不同的测试以不同的方式配置三重奏,例如,将一个测试设置为使用自动跳转时钟,而另一测试则不使用。

绝对最简单的选择是使用pytest-xdist在单独的线程中运行测试。您仍然可以在每个测试内部使用异步-所有这些异步库都支持在不同线程中运行不同的循环。

如果您确实需要使用异步并发,那么我认为您必须编写一个pytest测试函数,然后在该函数内部进行自己的调度和并发。如果您采用这种方式,那么从pytest的角度来看,只有一个测试,因此要获得良好的每次测试输出并不容易。我猜你可以尝试使用pytest-subtests吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章