协同运行所有异步测试。
pytest-asyncio-cooperative的Python项目详细描述
使用asyncio(协作多任务处理)高效、快速地运行I/O绑定的测试套件。在
importasyncioimportpytest@pytest.mark.asyncio_cooperativeasyncdeftest_a():awaitasyncio.sleep(2)@pytest.mark.asyncio_cooperativeasyncdeftest_b():awaitasyncio.sleep(2)^{pr2}$
快速启动
pip install pytest-asyncio-cooperative
兼容性
pytest asyncio与此插件不兼容。请卸载pytest asyncio或将此标志传递给pytest-p no:asyncio
固定装置
建议异步测试使用异步fixture。在
import asyncio import pytest @pytest.fixture async def my_fixture(): await asyncio.sleep(2) yield "XXX" await asyncio.sleep(2) @pytest.mark.asyncio_cooperative async def test_a(my_fixture): await asyncio.sleep(2) assert my_fixture=="XXX"
目标
- 通过协同多任务处理减少I/O绑定测试套件的总运行时间
- 通过协同多任务减少系统资源使用
专业人士
- 一个I/O绑定的测试套件将运行得更快(例如,单个测试将花费同样长的时间)。整个测试套件的总运行时间将更快)
- 一个I/O绑定的测试套件将使用更少的系统资源(例如,只使用一个线程)
缺点
- 所有测试都必须是协同程序(即使用async关键字)
- 无法保证测试顺序(即某些阻塞操作可能需要更长时间,并影响测试结果的顺序)
- 测试必须相互隔离(即没有共享资源,没有模拟补丁)
- 没有并行性,CPU限制的测试不会获得性能优势
已知问题
当异步测试失败时,同步测试无法运行
异步测试在同步测试之前运行。如果异步测试失败,则同步测试将不会运行。因此同步测试不会报告通过或失败。在
- 项目
标签: