You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.10下如何实现setUpClass的异步等效功能?

类级别异步测试固件的实现方案

方案一:基于unittest原生扩展

由于IsolatedAsyncioTestCase没有官方提供异步版的类级别 setUp/TearDown,你可以直接在同步的setUpClass和tearDownClass里,用asyncio.run()包裹异步逻辑来实现。初始化后的固件可以存在类属性中,供该类所有测试方法共享。

示例代码:

import unittest
import asyncio

class TestMyAsyncClass(unittest.IsolatedAsyncioTestCase):
    # 存储类级别异步固件
    class_fixture = None

    @classmethod
    def setUpClass(cls):
        # 在同步类方法里执行异步初始化
        cls.class_fixture = asyncio.run(cls._async_class_setup())

    @classmethod
    def tearDownClass(cls):
        # 在同步类方法里执行异步清理
        asyncio.run(cls._async_class_teardown())

    @classmethod
    async def _async_class_setup(cls):
        # 实际的异步初始化逻辑,比如建立异步连接、预加载资源
        await asyncio.sleep(0.5)
        return "shared async resource"

    @classmethod
    async def _async_class_teardown(cls):
        # 实际的异步清理逻辑,比如关闭连接、释放资源
        await asyncio.sleep(0.5)
        cls.class_fixture = None

    async def test_first_case(self):
        self.assertEqual(self.class_fixture, "shared async resource")

    async def test_second_case(self):
        self.assertIsNotNone(self.class_fixture)

方案二:用pytest类级别异步Fixture(更推荐,适配你的环境)

既然你已经在用pytest,直接用它的异步Fixture功能更简洁。设置scope="class"就能让固件在每个测试类中仅初始化和清理一次,pytest会自动处理异步逻辑的调度,不需要手动调用asyncio.run()。

示例代码:

import pytest
import asyncio

# 定义类级别异步固件
@pytest.fixture(scope="class")
async def shared_class_fixture():
    # 异步初始化步骤
    await asyncio.sleep(0.5)
    fixture_data = "shared async resource"
    yield fixture_data
    # 异步清理步骤
    await asyncio.sleep(0.5)

# 测试类(无需继承unittest类,纯pytest风格)
class TestMyAsyncClass:
    async def test_first_case(self, shared_class_fixture):
        assert shared_class_fixture == "shared async resource"

    async def test_second_case(self, shared_class_fixture):
        assert shared_class_fixture is not None

如果要保留IsolatedAsyncioTestCase的写法,方案一完全兼容pytest运行环境;如果转向纯pytest测试风格,方案二更符合pytest的设计哲学,代码也更简洁。

内容的提问来源于stack exchange,提问作者vxxxi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:22:50