【问题标题】:Does it make sense to run code coverage against different language versions?针对不同语言版本运行代码覆盖是否有意义?
【发布时间】:2022-01-03 19:50:14
【问题描述】:

在我参与的一个项目中,我们的管道旨在在多个不同版本的 python 上并行运行工作服:

Github Action yaml

matrix:
        include:
          - python-version: 2.7
            tox-env: py27
          - python-version: 3.6
            tox-env: py36
          - python-version: 3.7
            tox-env: py37,docs,readme,black
          - python-version: 3.8
            tox-env: py38
          - python-version: 3.9
            tox-env: py39
          - python-version: pypy3
            tox-env: pypy3
...
    - name: Coverage format into lcov
      if: ${{ matrix.python-version != '2.7' }}
      run: |
        coverage-lcov --output_file_path lcov.info

我可以理解为什么要针对相关技术的多个版本运行单元和功能测试,但是代码覆盖率,我无法真正找到一个很好的理由来继续针对所有不同版本的 python 运行。我发现针对多个版本运行此程序并没有显示任何有用的信息,除了相关线路计算中的微小差异导致管道中的无意义故障之外。

针对 3.8 和更高版本运行 coverallsapp(github 操作),导致计算返回的“相关”行比针对 3.7 和更小版本的相同代码更多。我认为,由于报告代码覆盖率降低了 -0.0%,这导致了管道故障,在详细查看实际报告之后,这是一个毫无意义的结果。

只是想提出这个问题,以确定针对这么多版本的 python 运行代码覆盖是否有任何真正的好处。

【问题讨论】:

    标签: python continuous-integration code-coverage github-actions coveralls


    【解决方案1】:

    没有。在 python 中,如果有的话,我很少看到在 python 版本上分支的代码,通常使用其他技术。无论哪种方式,覆盖范围都是相同的,例如

    try:
       # do python 2 things
    except:
       # do python 3 things instead.
    

    无论哪种方式,您都会得到大约相同数量的行。我认为您已经回答了您自己的问题,因为在某些更高版本的 python 中,工具的错误消息和元数据变得更好,可以更好地报告问题及其发生的位置。

    【讨论】:

      【解决方案2】:

      您的项目应说明您支持的 Python 版本,然后针对这些版本测试。

      建议:放弃 Python 2。它已经死了两年多了。

      对于 Python 支持,所有仍然支持的版本,除非您需要仅在较新版本中可用的功能。这意味着放弃 3.6 并支持 3.7、3.8、3.9 和 3.10。

      但是,我更喜欢只支持最后两个发布的版本。这是您项目的决定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-24
        • 2011-11-10
        • 1970-01-01
        • 2011-05-12
        • 2012-07-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多