Python 如何确定哪个单元测试涵盖了函数或方法

Python 如何确定哪个单元测试涵盖了函数或方法,python,unit-testing,code-coverage,pytest,Python,Unit Testing,Code Coverage,Pytest,从Python的角度来看,如何确定覆盖函数或方法的单元测试,或者测试运行者在套件中的测试中遇到的任何代码行?考虑到覆盖工具知道命中的特定代码,这些信息应该在手边,这似乎是合理的,但我找不到任何方法来获取这些信息(我使用py.test作为我的测试运行程序,使用cover和pytest cov模块) 我发现的一种方法是在代码中加入一个pdb.set_trace调用,但如果我能找到一种更优雅的方法,而不需要修改测试中的代码,那将非常有帮助。Coverage.py还没有提供此功能,但有一个开放的标签,我

从Python的角度来看,如何确定覆盖函数或方法的单元测试,或者测试运行者在套件中的测试中遇到的任何代码行?考虑到覆盖工具知道命中的特定代码,这些信息应该在手边,这似乎是合理的,但我找不到任何方法来获取这些信息(我使用
py.test
作为我的测试运行程序,使用
cover
pytest cov
模块)


我发现的一种方法是在代码中加入一个
pdb.set_trace
调用,但如果我能找到一种更优雅的方法,而不需要修改测试中的代码,那将非常有帮助。

Coverage.py还没有提供此功能,但有一个开放的标签,我们可以在其中讨论一些想法:


要阅读此问题的历史记录,请查看(在BitBucket跟踪器中)

我不知道此代码在当前生态系统中是否仍然有效(特别是当前的覆盖版本和nose/nose 2插件API),但来自
figleaf
包的figleaf sections插件提供了此功能

如果我记得的话,这是一个很好的概念证明,我肯定是有用的,但我认为有一些粗糙的边缘,我希望有人拿起这个想法,并真正使其顺利工作

是一个围绕coverage.py的包装实用程序,它分别测量测试套件中每个测试的代码覆盖率。其主要特点包括:

  • 使用coverage.py进行快速可靠的覆盖率跟踪
  • 能够查找哪些测试访问应用程序代码的任意部分
  • 能够将版本控制差异转换为受影响测试的子集以重新运行

它支持py.test和nose。

您的测试组织得如何?您可以运行子集来查看哪个调用了特定的行吗?我一直在使用nose来测试代码覆盖率
nosetests——有覆盖范围——覆盖测试
它们组织得很好,但由于有数千个测试的集合,我有时会遇到这个问题。我专门使用
py.test
nose
是否具有这种开箱即用的能力?似乎
--cover tests
标志只是在报告中包含了测试本身,这与我在这里寻找的不同。就我所见,唯一的方法是运行更窄的测试子集,以确定哪些测试调用了行-一般来说,覆盖工具是用来告诉你是否有人打电话,而不是从哪里打电话。谢谢你的链接。我会密切关注进展的!Coverage.py现在提供以下功能:谢谢!我会检查这些。我发现安装Smother改变了路径加载行为或py.test;这不应该影响任何进行常规python打包的人,但它确实影响了一些古怪的、带有直套的测试用例。被警告