有没有特定的python版本" #pragma nocover"可用于python覆盖工具?

时间:2017-04-08 20:18:17

标签: python coverage.py

使用python coverage.py,我喜欢做类似的事情:

const path = require('path')

module.exports = {
    entry: './app/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                use: 'babel-loader',
                exclude: /(node_modules)/,
            }
        ]
    },
    devServer: {
        contentBase: 'dist',
    }
}

然后,使用tox,没有我的python2特定代码计数对我的覆盖率报告....有什么像

if six.PY3:
    from functools import lru_cache
else:
    from .lru_cache_local imoprt lru_cache

可用?

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以通过配置文件provide your own "no cover" lines

         Df row1 : Ravi  Computers   20

         Df row2 : Jon    Electronics 21

         Df row3 : Sam    arts        20

然后您可以选择是使用Python 2配置文件,还是通过the --rcfile option使用Python 3配置文件。

           Line1: Index:Ravi
           Line2: Ravi  Computers   20
           Line3: Index:Jon
           Line4: Jon     Electronics 21
           Line5: Index:Sam
           Line6: Sam     arts        20

答案 1 :(得分:1)

不是排除行,而是最好测量python 2和python 3的覆盖范围,然后将它们组合起来。

答案 2 :(得分:1)

.coveragerc文件将扩展环境变量,因此您可以这样做:

[report]
exclude_lines =
    pragma: no cover
    pragma: nocover_${PRAGMA_VERSION}

然后像这样运行coverage.py:

PRAGMA_VERSION=py2 coverage report 

答案 3 :(得分:0)

感谢大家的灵感....我的解决方案最终看起来像这样。将.py2和.py3概括为一个很好,但tox似乎没有提供执行环境参数的大量词汇表:(。

<强> .coveragerc_py27

...
[report]
exclude_lines =
      pragma: nocover
      pragma: py2_nocover
....

<强> .coveragerc_py34

...
[run]
omit = *_py2.py

[report]
exclude_lines =
      pragma: nocover
      pragma: py3_nocover
....

<强> tox.ini

...
[testenv]
commands = pytest \
    --cov-config .coveragerc_{envname} \
    ...