4

Travis CI を使用した継続的インテグレーションでNed Batchelder のカバレッジモジュールを実行していますが、統合テストのみを実行し、機能的なテストはスキップしたいと考えています。

このための特別な構成を作成しましたが、コードがカバレッジによって実行されているかどうかを Python スクリプト内で知る別の方法があるかどうかを知りたいです。

4

6 に答える 6

2

は間違いなくそれを助けることができます:

  • カバー: コード カバレッジプラグイン
  • 属性セレクタープラグイン
    • デコレータでテストをマークし、オプション@attr("no-coverage")でカバレッジ テストを実行できます-a '!no-coverage'
  • 鼻除外プラグイン
    • --exclude-dirオプションと--exclude-dir-fileオプションを使用して、特定のテストディレクトリとテストファイルを実行から除外できます

それが役立つことを願っています。

于 2013-09-09T22:24:06.610 に答える
1

あなたの質問の言い回しに基づいて、カバレッジで実行しているテストを制限しておらず、機能テストがカバレッジで実行されていることに気づき、何もしないことを望んでいると思います。ハックな方法は、機能テストで sys.argv を見て、カバレッジの使用を検出した場合に別のことを行うことです。しかし、より良いアプローチは、機能テストと単体テストを別々の兄弟ディレクトリに配置し、単体テスト ディレクトリ内のテストのみを実行するようカバレッジに指示することだと思います。--omit オプションを使用して、実行するテストを制限することもできます。

于 2013-09-09T22:34:19.240 に答える
1

Travis CI は、これに使用できるいくつかの環境変数を提供します。私の場合、これはどれも役立ちます:

CI=true
TRAVIS=true

以前に提供された両方の回答が本当に役に立ちましたが、このソリューションは必要なものに対して実装しやすいと思います。

于 2013-10-29T12:56:42.817 に答える
0

テストがプレーン デバッグ モードで実行されているか、カバレッジ付きで実行されているか、または通常どおり実行されているかを判断する必要がありました。かなりの実験の後、私はこれを思いつきました:

import sys

# Detect PyCharm debugging mode
get_trace = getattr(sys, 'gettrace', lambda: None)

if get_trace() is None:
    debug = False
    print('runnin normsies')
else:
    debug = True
    print('debuggin')
    if 'coverage' in sys.modules.keys():
        print('covered')

それがどれほど堅牢かはわかりませんが、私にとってはうまくいきます。

于 2021-10-11T19:07:00.120 に答える
0

テストがカバレッジ モードで実行されているかどうかのチェックの実装を次に示します。gettrace_resultこれの良いところは、たとえば、テストがカバレッジではなくデバッガーによって実行されているかどうかなど、他の条件をチェックするために使用できることです。

import sys

def is_run_with_coverage():
    """Check whether test is run with coverage."""
    gettrace = getattr(sys, "gettrace", None)

    if gettrace is None:
        return False
    else:
        gettrace_result = gettrace()

    try:
        from coverage.pytracer import PyTracer
        from coverage.tracer import CTracer

        if isinstance(gettrace_result, (CTracer, PyTracer)):
            return True
    except ImportError:
        pass

    return False

pytest.mark.skipifを使用して、カバレッジ モードで実行してはならないテストをスキップできます。

@pytest.mark.skipif(is_run_with_coverage())
def test_to_skip_in_coverage_mode():
    ...
于 2021-11-02T15:22:22.130 に答える