私のプロジェクトフォルダー(そう-私はそれがベストプラクティスであることを知っています)は次のようなものです:
.
├── 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
私はこれでどんな助けでも喜んでいます
生成されたコードに非常に似た問題がありました。解決策は、ケースから生成されたコードまたはツールコードをレポートからのみ除外することでした。
したがって、次のようにnosetestsを使用してテストを実行します
nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)
その後、手動でレポートを作成するため、
coverage combine
coverage report --omit 'tools/*'
したがって、coverage.pyはツールパッケージをカバーしますが、レポートには表示されません。
私の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
上記に、カバレッジをリセットします
デフォルトでは、テストはカバレッジレポートに含まれません。これらを--cover-tests
とにかく、 nosetests --help
あなたの友だちです。最も可能性が高い --cover-inclusive
フラグはカバレッジプラグインを強制終了し、他のオプション(プラグイン用)が使用できなくなります。 pdb
からnoseを起動して、デバッグを試みることができます。
代わりに、ノーズテストを起動するスタンドアロンモジュールとしてカバレッジを実行できます。