使用 asyncio 加速测试

speed up test with asyncio

这是我的代码

@pytest.mark.asyncio
async def test_async():
    res = []
    for file_id in range(100):
        result = await get_files_async(file_id)
        res.append(result)
    assert res == [200 for _ in range(100)]


async def get_files_async(file_id):
    kwargs = {"verify": False, "cert": (cert, key)}
    resp = requests.request('GET', url, **kwargs)
    return resp.status_code

pytest 的计时显示需要 118 秒才能完成,这与按顺序向 url 发送请求的测试非常接近。 有什么改进可以加快这个测试吗?谢谢

您无法使用异步来加快速度,因为您使用的是 requests,这是一个同步 pkg,因此每次调用都会停止偶数循环。

您可以切换到 运行 在线程中处理请求,或者切换到像 httpx 或 aiohttp 这样的异步 pkg

如果您切换到不同的 pkg,请将 test_async 更改为 运行 并行请求

@pytest.mark.asyncio
async def test_async():
    tasks = []
    for file_id in range(100):
        tasks.append(asyncio.create_task(get_files_async(file_id)))
    res = await asyncio.gather(*tasks)
    assert res == [200 for _ in range(100)]