如何知道我的Python测试是否在覆盖模式下运行?

时间:2013-09-09 22:07:59

标签: python travis-ci coverage.py python-coverage

我正在使用Travis CI运行Ned Batchelder的coverage模块进行持续集成,但我想只运行集成测试并跳过功能测试,因为它们耗时太长而且覆盖率测量不会受到影响。

我为此创建了一个特殊配置,但是我想知道在Python脚本中是否存在另一种知道方法,即代码是否由coverage运行。

3 个答案:

答案 0 :(得分:2)

nose绝对有助于它:

  • Cover: code coverage插件
  • Attribute selector插件
    • 您可以使用@attr("no-coverage")装饰器标记测试,并使用-a '!no-coverage'选项
    • 运行覆盖测试
  • nose-exclude插件
    • 您可以使用--exclude-dir--exclude-dir-file选项
    • 排除正在运行的特定测试目录和测试文件

希望有所帮助。

答案 1 :(得分:1)

根据您的问题的措辞,我假设您不限制您正在运行的测试覆盖范围,并希望功能测试注意到它们正在运行覆盖范围,并且什么都不做。一种hacky方式可能是在功能测试中查看sys.argv,如果检测到覆盖率使用情况,则会采用不同的方式。但我认为更好的方法是在单独的兄弟目录中进行功能测试和单元测试,并告诉coverage只运行单元测试目录中的测试。您也可以使用--omit选项来限制正在运行的测试。

答案 2 :(得分:1)

Travis CI提供了几个可用于此的environment variables;在我的情况下,任何一个将服务:

CI=true
TRAVIS=true

即使之前提供的两个答案都非常有用,我认为这个解决方案更容易实现我所需要的。