首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取非测试模块的pytest回溯

是指在使用pytest进行单元测试时,获取出错的代码所在的非测试模块的回溯信息。

pytest是一个流行的Python单元测试框架,它提供了丰富的功能和灵活的配置选项。在编写单元测试时,如果发生断言失败或异常抛出,pytest会自动显示回溯信息,帮助开发人员快速定位问题。

要获取非测试模块的pytest回溯,可以使用pytest的插件或者自定义的钩子函数。下面是一个示例的自定义钩子函数的代码:

代码语言:txt
复制
import pytest

def pytest_runtest_protocol(item, nextitem):
    try:
        next(item)
    except pytest.UsageError:
        raise
    except Exception:
        # 获取非测试模块的回溯信息
        excinfo = pytest._pytest.runner.pytest_runtest_makereport(item, "failed", "Exception")
        if excinfo and excinfo.traceback:
            traceback = excinfo.traceback
            for entry in traceback:
                # 输出非测试模块的文件名和行号
                if not entry.frame.code.path.endswith("test_*.py"):
                    print(f"File \"{entry.frame.code.path}\", line {entry.lineno}")
        raise

def test_example():
    assert 2 + 2 == 5

在上述代码中,我们自定义了pytest_runtest_protocol函数作为pytest的钩子函数,它会在每个测试用例执行之前被调用。如果测试用例执行过程中抛出异常,我们会获取非测试模块的回溯信息,并输出非测试模块的文件名和行号。

当运行上述代码时,输出可能类似于:

代码语言:txt
复制
File "path/to/non_test_module.py", line 42

这样,我们就可以根据回溯信息快速定位到出错的非测试模块的位置。

关于获取非测试模块的pytest回溯的更多信息,可以参考pytest官方文档中关于插件和钩子函数的部分:pytest Plugins and Hooks

推荐的腾讯云相关产品:腾讯云函数(Serverless云函数计算平台),腾讯云日志服务(可用于存储和分析应用程序日志)。

腾讯云函数产品介绍链接地址:腾讯云函数

腾讯云日志服务产品介绍链接地址:腾讯云日志服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Pytest中conftest.py共享fixture(五)

有一点首先需要确认的的是,pytest中的fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制。但是我们更加希望的是在一个测试套件中,能够共享fixture的机制,这样所一个测试套件里面的所有测试点都能够共同使用,和我在早期介绍的分离测试固件的思想有点雷同。在pytest中通过conftest.py来共享fixture,如果希望多个测试文件共同使用一个fixture时候,可以在该目录下创建conftest.py文件,但是切记该文件绝对不能倒入使用,这点一定要注意,创建conftest.py文件后,把需要的fixture加入到里面,就可以使用了。先来一个简单的案例,在一个包中,有三个测试模块,每个测试点都显示开始前执行和结束后执行,也就是说,每个测试点执行的时候,先打印测试开始,然后执行测试点,然后最后打印测试结束,见案例代码:

02
  • Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]

    通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。 pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。 app 测试里面有个 monkey 测试,随机在页面点点点,不按常理的点点点能找到更多的不稳定性 bug。那么我们在写pytest用例的时候,既然每个用例都是相互独立的, 那就可以打乱用例的顺序随机执行,用到 pytest 的插件 pytest-random-order 可以实现此目的,github 地址https://github.com/jbasko/pytest-random-order

    04

    Pytest(16)随机执行测试用例pytest-random-order「建议收藏」

    通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。 pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。 app 测试里面有个 monkey 测试,随机在页面点点点,不按常理的点点点能找到更多的不稳定性 bug。那么我们在写pytest用例的时候,既然每个用例都是相互独立的, 那就可以打乱用例的顺序随机执行,用到 pytest 的插件 pytest-random-order 可以实现此目的,github 地址https://github.com/jbasko/pytest-random-order

    03

    Python pytest框架之@pytest.fixture()和conftest详解

    一、fixture简介 学pytest就不得不说fixture,fixture是pytest的精髓所在,类似unittest中setup/teardown这种前后置东西。但是比它们要强大、灵活很多,它的优势是可以跨文件共享 fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进 1、有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。 2、按模块化的方式实现,每个fixture都可以互相调用。 3、fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数function、类class、模块module或整个测试会话sessio范围。

    05
    领券