2016-07-08 12 views
1

私はPythonでマルチプロセッシングアプリケーションを持っています。私はテストを実行した後、カバレッジレポートを取得しようとしています。私はカバレッジレポートをマージしようとしていますが、私はシングルショットではできません。ブランチカバレッジファイルをPythonにマージする

以下は私が直面している問題です。 2つのテストで4つのカバレッジファイルが生成されました。そして、私は、コマンド実行したときにを「カバレッジを組み合わせた」私は次のエラーを取得する:

Can't combine line data with arc data 

私は実行する必要がカバレッジファイルマージするにコマンド4回「カバレッジを組み合わせます」。しかし、私はさらにテストを追加しようとしており、それはレポートを組み合わせることさえ難しくします。

どうすれば、すべてのカバレッジレポートを一度に組み合わせることができますか?

PS: 次のように私は設定ファイルを設定しています

[run] 
branch = True 
parallel = True 
concurrency = multiprocessing 

[report] 
# Regexes for lines to exclude from consideration 
exclude_lines = 
    # Have to re-enable the standard pragma 
    pragma: no cover 

そして、私はラインカバレッジのために正しく組み合わせたレポートを取得することができています。

EDIT:

これは私がカバレッジ

coverage --rcfile=coverage_rc_file tester_script.py test1 test2 

を得るために自分のアプリケーションを実行する方法上記のコマンドは二度私のアプリを実行し、4つのカバレッジファイルが生成されます。

その後、私は結果を結合するには、次のコマンドを実行します。

coverage combine 
+0

どのようにテストを実行しているかをカバレッジで表示できますか?なぜあなたは4回 "結合"を実行する必要がありますか? –

+0

@NedBatchelder私は自分の答えを編集しました。見てください。 –

+0

問題は、サブプロセスがあなたが使ったrcfileの名前を知らないということですか?あなたが ".coveragerc"と名づけば、すべてがうまくいくのですか? –

答えて

1

あなたがカバレッジを設定するには、コマンドラインを使用する場合は見ているエラーはこのように、発生します:

coverage run --branch --concurrency=multiprocessing myprogram.py 

問題は、コマンドライン引数がサブプロセスに伝達されないため、メインプロセスがブランチカバレッジを測定し、サブプロセスがラインカバレッジを測定することです。その後、結合ステップはファイルを結合することができません。

修正プログラムは、.coveragerc構成ファイルを使用します。しかし、あなたはそれを使用していると言います。だから、あなたがコマンドライン引数だけで始まっていない限り、何がうまくいかないのか分かりません。

+0

はい、これらのパラメータを設定ファイルに追加しました。しかし、私はまだエラーを取得しています。私はこの問題を解決しようとすることはできますか? –

0

ユニットテストで複数のディレクトリでコードを実行したとき、この問題が発生しました。 .coveragercファイルを各ディレクトリに追加して、すべてのブランチ(別名円弧)データを作成する必要がありました。私はsymlinkを使ってメインの.coveragercファイルにリンクしました。

関連する問題