web-dev-qa-db-ja.com

nose --with-coverageを実行してすべてのパッケージファイルを取得しますが、他の依存関係とライブラリは取得しません

私のプロジェクトフォルダー(そう-私はそれがベストプラクティスであることを知っています)は次のようなものです:

.
├── app.py
├── otherscript.py
├── tests/
└── tools/
    ├── __init__.py
    └── toolfile.py

メインフォルダーtoolsフォルダー内のnose --with-coverageスクリプトをテストし、testsフォルダーを除外するには、.pyが必要です(除外することについては特に気にしませんが)

基本を実行すると

nose --with-coverage

インストールされているすべての依存関係とライブラリ(フラスコ、リクエストなど)をカバーしています

私が走るとき

nose --with-coverage --cover-package=folder name (or . or ./)

テストフォルダのカバレッジを取得します。 tools/__init__.pyファイルとapp.pyですが、残りのスクリプトは対象外です。

> (opentaba-server) D:\username\pathto\opentaba-server>nosetests --with-coverage -- cover-package=./ ... Name                                      

> Stmts   Miss  Cover   Missing
> ----------------------------------------------------------------------- Tests\functional_tests\test_return_json      26      0   100%
> Tests\unit_test\test_createdb                 0      0   100%
> Tests\unit_test\test_scrape                   0      0   100% app     
> 63     15    76%   22, 24, 72-81, 8 8-106, 133 tools\__init__         
> 0      0   100%
> ----------------------------------------------------------------------- TOTAL                                        89     15    83%
> ---------------------------------------------------------------------- Ran 3 tests in 5.182s OK

--cover-inclusive flagで実行すると、それはただ失敗します:

nosetests-scripts.py: error: no such option: --with-coverage

私はこれでどんな助けでも喜んでいます

27
alonisser

生成されたコードに非常に似た問題がありました。解決策は、ケースから生成されたコードまたはツールコードをレポートからのみ除外することでした。

したがって、次のようにnosetestsを使用してテストを実行します

nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)

その後、手動でレポートを作成するため、

coverage combine
coverage report --omit 'tools/*'

したがって、coverage.pyはツールパッケージをカバーしますが、レポートには表示されません。

13
Georg

私のtests/nose_setup_coverage.cfgファイル:

[nosetests]
verbosity=1
detailed-errors=1

with-coverage=1
cover-html=1
cover-html-dir=../../out/cover

#this is the line that fixed my equivalent of your issue
#by "climbing up" from tests/ but skipping python's **site-packages**
cover-package=..   

where=/Users/jluc/kds2/py/tests

追加cover-package=..(cfgファイル内)で、testsディレクトリ内から実行すると、pythonディレクトリはすべてカバーされますが、Djangoおよびその他のサードパーティのものは含まれません。 。

これは私のディレクトリ構造です(いくつかの非Pythonのものを除いて):

.
├── lib
├── non_app
├── ps_catalog
├── pssecurity
├── pssystem
├── static
├── static_src
├── staticfiles
├── templates
├── tests
└── websec

最後に、文書化されていないようですが、カバレッジはnosetestsから実行すると、現在の(テスト)ディレクトリにある。coveragercファイルを選択して使用します(コマンドラインまたはnose cfgファイル。これはcoverプラグイン用です。

そのファイルのomitセクションでは、除外するディレクトリをより細かく制御できます。

omit=/Users/jluc/kds2/env/lib/python2.7/*
     */batch/*
     /Users/jluc/kds2/py/non_app/*
     */migrations/*

bashでテストを実行する:

nosetests -c nose_setup_coverage.cfg

pS追加--cover-erase上記に、カバレッジをリセットします

5
JL Peyret

デフォルトでは、テストはカバレッジレポートに含まれません。これらを--cover-tests

とにかく、 nosetests --help あなたの友だちです。最も可能性が高い --cover-inclusiveフラグはカバレッジプラグインを強制終了し、他のオプション(プラグイン用)が使用できなくなります。 pdbからnoseを起動して、デバッグを試みることができます。

代わりに、ノーズテストを起動するスタンドアロンモジュールとしてカバレッジを実行できます。

1
Oleksiy