牛奶不太白 2025-04-25 15:01 采纳率: 0%
浏览 2

进程内实现并发测试,基于pytest框架

背景->我目前的测试场景中存在 异步接口,需要轮训状态去获取最终结果,符合结果,才能校验测试数据。同时我的自动化,都是同步接口偏多。
我基于 pytest 异步断言的逻辑实现,发现标记@pytest.mark.asyncio 的用例,仍然是阻塞进程,导致其他用例无法执行的。
预期->在同一进程内,实现并发运行,多个测试用例。在异步用例执行的同时,同步的测试用例能正常执行。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-04-25 15:01
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    进程内实现并发测试,基于pytest框架

    你想要实现进程内并发测试,以便在异步接口中轮训状态获取最终结果,然后校验测试数据。同时,你基于 pytest 框架,使用 @pytest.mark.asyncio 标记异步断言逻辑。

    解决方案:

    1. 使用 pytest-asyncio 插件,它提供了对 asyncio 的支持,可以在测试中使用异步函数。
    2. 在测试函数中使用 asyncio.gather 函数来并发执行异步函数。
    3. 使用 pytest.mark.asyncio 标记异步断言逻辑,以便 pytest 可以正确地处理异步测试。

    示例代码:

    import asyncio
    import pytest
    
    @pytest.mark.asyncio
    async def test_concurrent_api():
        tasks = []
        for i in range(5):
            task = asyncio.create_task(my_async_api(i))
            tasks.append(task)
        results = await asyncio.gather(*tasks)
        assert all(result == expected_result for result, expected_result in zip(results, [1, 2, 3, 4, 5]))
    

    在上面的示例代码中,我们使用 asyncio.create_task 创建了 5 个异步任务,然后使用 asyncio.gather 函数来并发执行这些任务。最后,我们使用 assert 语句来校验测试结果。

    重要提示

    • 在使用 pytest-asyncio 插件时,需要在 pytest.ini 文件中添加以下配置:
    [pytest]
    addopts = --asyncio-mode=strict
    
    • 在使用 asyncio.gather 函数时,需要确保所有异步任务都已经完成,否则可能会导致测试失败。

    希望这个解决方案能够帮助你实现进程内并发测试!

    评论

报告相同问题?

问题事件

  • 修改了问题 4月25日
  • 创建了问题 4月25日