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

如何在pytest中标记特定方法为非测试方法(不全局修改规则)

解决pytest误识别tf.test.TestCase.test_session为测试方法的问题

这个问题我之前在TensorFlow+pytest的组合测试里也碰到过,确实挺头疼——pytest默认会把所有以test_开头的方法都当成测试用例,哪怕它是父类提供的工具方法。给你两个不用全局修改pytest配置的优雅解决方案:

方法一:给方法设置__test__ = False

直接在类里给test_session方法添加__test__属性并设为False,pytest在扫描测试方法时会自动忽略这个方法:

from contextlib import contextmanager
import tensorflow as tf

class TestCase(tf.test.TestCase):
    @contextmanager
    def test_session(self):
        with super().test_session() as sess:
            yield sess

    # 核心设置:告诉pytest这不是测试方法
    test_session.__test__ = False

这种方式的好处是完全保留原方法名,不影响你在测试用例里正常调用self.test_session(),同时不会在测试报告里留下任何跳过的标记,因为它根本不会被pytest识别为测试用例。

方法二:使用@pytest.mark.nottest装饰器

如果你觉得设置属性的写法不够直观,可以用pytest官方提供的nottest装饰器,作用和上面完全一致:

import pytest
from contextlib import contextmanager
import tensorflow as tf

class TestCase(tf.test.TestCase):
    @pytest.mark.nottest
    @contextmanager
    def test_session(self):
        with super().test_session() as sess:
            yield sess

这个装饰器专门用来标记非测试方法,可读性更强,只要你的pytest版本在3.0以上(现在大部分项目都是)就可以正常使用。

这两种方案都不需要修改全局的pytest配置,完全针对这个特定方法处理,完美解决你之前用@pytest.mark.skip导致测试报告出现跳过标记的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:59