前の関連記事:linuxBean14.04(165)faif/python-patternsでデザインパターンの学習
noseはAnacondaのものを使う
Synapticパッケージマネージャからpython-noseで検索すると1.3.1がでてきてインストールするとnodetestsが使えるようになりましたが、linuxBean14.04(150)AnacondaとJupyter NotebookとLibreOffice5.2(失敗編)でインストールしたAnaconda 4.3.1にすでにインストールされていたのでそちらの方を使うことにしました。
faif/python-patternsでデザインパターンの学習で、デザインパターンの例をsrcフォルダに移動させたフォルダ構成で、srcフォルダで端末を起動します。
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ . ~/ana pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ python3 -V Python 3.6.0 :: Anaconda custom (32-bit) pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ conda list nose # packages in environment at /home/pq/anaconda3: # nose 1.3.7 py36_1noseの1.3.7がインストールされていることがわかりました。
最初に使っている. ~/anaというコマンドはlinuxBean14.04(115)pythonコマンドをpipコマンドとともに切り替えるで作成したAnacondaを有効にするシェルスクリプトです。
noseはnose2がでていますが、conda search nose2ではパッケージはでてきませんでした。
coveralls、codecov、flake8
.travis.ymlを読むとcoverallsとcodecov、flake8というパッケージもインストールしているのでこれらについても確認しましたがこれらはインストールされていませんでした。
conda searchでこれらのパッケージを検索してみたところflake8だけあったのでとりあえずそれをインストールしました。
(結局flake8はアンイストールしました。)
conda install flake8
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ conda install flake8
Fetching package metadata .........
Solving package specifications: .
Package plan for installation in environment /home/pq/anaconda3:
The following NEW packages will be INSTALLED:
flake8: 3.3.0-py36_0
mccabe: 0.6.1-py36_0
pycodestyle: 2.3.1-py36_0
The following packages will be UPDATED:
conda: 4.3.14-py36_0 --> 4.3.16-py36_0
Proceed ([y]/n)?
Flake8 — flake8 2.0 documentationとははじめに — pep8-ja 1.0 ドキュメントに従っているかコードをチェックするものです。
pip install coveralls
pip install codecov
coverallsもcodecovも:: Anaconda Cloudには64bit版しかなかったので、これらはpipでインストールしました。
(あとで判明しますがこれらをローカルにインストールする必要性はなく、結局アンイストールしました。)
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ pip install coveralls
Collecting coveralls
Downloading coveralls-1.1-py2.py3-none-any.whl
Requirement already satisfied: requests>=1.0.0 in /home/pq/anaconda3/lib/python3.6/site-packages (from coveralls)
Collecting coverage>=3.6 (from coveralls)
Downloading coverage-4.3.4-cp36-cp36m-manylinux1_i686.whl (189kB)
100% |████████████████████████████████| 194kB 44kB/s
Collecting docopt>=0.6.1 (from coveralls)
Downloading docopt-0.6.2.tar.gz
Building wheels for collected packages: docopt
Running setup.py bdist_wheel for docopt ... done
Stored in directory: /home/pq/.cache/pip/wheels/b2/16/5f/c33a2bb5f2dce71205f8e65cbfd05647d79d441282be31fd82
Successfully built docopt
Installing collected packages: coverage, docopt, coveralls
Successfully installed coverage-4.3.4 coveralls-1.1 docopt-0.6.2
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ pip install codecov
Collecting codecov
Downloading codecov-2.0.7-py2.py3-none-any.whl
Requirement already satisfied: coverage in /home/pq/anaconda3/lib/python3.6/site-packages (from codecov)
Requirement already satisfied: requests>=2.7.9 in /home/pq/anaconda3/lib/python3.6/site-packages (from codecov)
Installing collected packages: codecov
Successfully installed codecov-2.0.7
coverallsは1.1、codecovは2.0.7がインストールされました。
coverallsもcodecovもともにテストのコード網羅率を表示するようですが、 faif/python-patternsでは2つとも使っていますので2つともインストールしました。
(先にも書いたように結局アンインストールしました。)
コード網羅率 - Wikipediaを読むまでは文網羅しか思いつきませんでしたが、 文網羅以外にも分岐網羅とか条件網羅とかいっぱいあります。
nosetestsのオプション
PYTHONPATH=. nosetests -s -v --with-doctest --with-cov --cover-package . --logging-level=INFO -v .
.travis.ymlファイルにあるこのコマンドをsrcフォルダで実行するとテストはすべてパスしたようです。
.coverageというテキストファイルが出力されましたが、これはcoverage.pyが出力したもので直接読むなと書いてあります。
nosetests -h
これでnosetestsのヘルプが出力されました。
Usage: nosetests [options]
Options:
-s, --nocapture Don't capture stdout (any stdout output will be printed immediately) [NOSE_NOCAPTURE]
-v, --verbose Be more verbose. [NOSE_VERBOSE]
--with-doctest Enable plugin Doctest: Activate doctest plugin to find and run doctests in non-test modules. [NOSE_WITH_DOCTEST]
--cover-package=PACKAGE
Restrict coverage output to selected packages [NOSE_COVER_PACKAGE]
--logging-level=LOGCAPTURE_LEVEL
Set the log level to capture
--with-coverage Enable plugin Coverage: Activate a coverage report using Ned Batchelder's coverage module. [NOSE_WITH_COVERAGE]
関係ありそうなところだけ抜粋してみましたが、--with-covというオプションはなくて代りに--with-coverageというオプションのヘルプがありました。引数はなくてもカレントフォルダからtestで始まるテストファイルを検索してテストしてくれるようです。
とりあえず一つずつオプションを実行して確認してみました。
オプションなしではテストの数とOKと表示されるだけです。
-sを付けるとテストの実行結果が出力されるようです、、、printの結果だけ?
-vを付けるとチェックしたテスト名一覧が出力されます。
--with-doctestを付けるとdoctestもテストされて、走らせたテストが98個から101個に増えました。
--with-covを付けるとCover=Stmts/Miss*100の一覧が出力されました。
__init__.pyがそのフォルダ名で出力されていますね。
--with-coverageも同じことのようです。
Anacondaにはデフォルトでcoverage(4.3.4)がインストールされていました。
これをアンインストールすると--with-covも反応しなくなりました。
--cover-packageは引数を一つ要求してきます。
引数に.を付けると実行できました。
--cover-packageを付けると--with-covの結果で__init__.pyがそのままの名前で出力されました。
--logging-level=INFOはnosetestsの後ろに-vをつけてかつ、--logging-level=INFOの後ろに-vを付けたときのみその関連の出力がされました。
最初のPYTHONPATH=.は環境変数PYTHONPATHにカレントディレトリのパスを代入しているのですが、このPYTHONPATHの意味が私にはいまだにわからないし、なくても結果は変わらないようにみえます。
PYTHONPATHを設定してからsys.pathでみてもそのパスは出てきませんし。
export PYTHONPATHとしても同じ結果です。
--cover-branchesで分岐網羅率も出力する
--cover-branchesで分離網羅率も出力されるようなのでやってみたら、coverage.misc.CoverageException: Can't add arcs to existing line dataというエラーがでてきました。
ned / coverage.py / 課題 / #476 - CoverageException: Can't add arcs to existing line data — Bitbucket
--cover-eraseを付けてcoverageのデータをリセットすると解決するとのことなのでやってみたらうまくいきました。
nosetests --with-doctest --with-cov --cover-erase --cover-branches --cover-package .
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ nosetests --with-doctest --with-cov --cover-erase --cover-branches --cover-package . ..................................................................................................... Name Stmts Miss Branch BrPart Cover ----------------------------------------------------------------------- behavioral/__init__.py 0 0 0 0 100% behavioral/catalog.py 66 30 10 2 50% behavioral/chain.py 99 66 20 1 29% 略 ----------------------------------------------------------------------- TOTAL 2430 781 306 44 64% ---------------------------------------------------------------------- Ran 101 tests in 3.904s OK結果は途中略しています。
StmtsとMissは文網羅率のときと同じ表示です。
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ nosetests --with-doctest --with-cov --cover-erase --cover-package ... ................................................................................................... Name Stmts Miss Cover --------------------------------------------------------- behavioral/__init__.py 0 0 100% behavioral/catalog.py 66 30 55% behavioral/chain.py 99 66 33% 略 --------------------------------------------------------- TOTAL 2430 781 68% ---------------------------------------------------------------------- Ran 101 tests in 3.912s OK文網羅率のときはこのようにMiss/Stmts*100でしたが、分岐網羅率のときはどうやって算出しているのでしょう?
論理分岐は真と偽の2つなので、コード中の分岐の総数を分母として、そのうちテスト実施(設計)したの数の総和を分子に計算を行うとブランチカバレッジ(%)が得られる。うーん、これを読んでも算出根拠はよくわかりませんでした。
情報システム用語事典:ブランチカバレッジ(ぶらんちかばれっじ) - ITmedia エンタープライズ
coverallsはTravis CI経由でしか使えずアンイストール
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ coveralls -h
Publish coverage results online via coveralls.io
Puts your coverage results on coveralls.io for everyone to see.
It makes custom report for data generated by coverage.py package and sends it to `json API`_ of coveralls.io service.
All python files in your coverage analysis are posted to this service along with coverage stats,
so please make sure you're not ruining your own security!
Usage:
coveralls [options]
coveralls debug [options]
Debug mode doesn't send anything, just outputs json to stdout, useful for development.
It also forces verbose output.
Global options:
--rcfile=<file> Specify configuration file. [default: .coveragerc]
--output=<file> Write report to file. Doesn't send anything.
--merge=<file> Merge report from file when submitting.
-h --help Display this help
-v --verbose Print extra info, True for debug command
Example:
$ coveralls
Submitting coverage to coveralls.io...
Coverage submitted!
Job #38.1
https://coveralls.io/jobs/92059
coverallsはcoveralls.ioに網羅率をアップロードするためのツールです。
しかしcoverallsを実行してみるとトークンを取得するかTravis CI経由で実行するように言われるだけです。
ということでローカルでインストールする意味はなさそうなのでアンインストールしました。
codecovもアンイストール
pq@pq-VirtualBox:~/git/python-patterns/python-patterns/src$ codecov -h
usage: codecov [-h] [--version] [--token TOKEN] [--file [FILE [FILE ...]]]
[--flags [FLAGS [FLAGS ...]]] [--env [ENV [ENV ...]]]
[--required] [--name NAME] [--gcov-root GCOV_ROOT]
[--gcov-glob [GCOV_GLOB [GCOV_GLOB ...]]]
[--gcov-exec GCOV_EXEC] [--gcov-args GCOV_ARGS]
[-X [DISABLE [DISABLE ...]]] [--root ROOT] [--commit COMMIT]
[--branch BRANCH] [--build BUILD] [--pr PR] [--tag TAG]
[--slug SLUG] [--url URL] [--cacert CACERT] [--dump] [-v]
[--no-color]
optional arguments:
-h, --help show this help message and exit
======================== Basics ========================:
--version show program's version number and exit
--token TOKEN, -t TOKEN
Private repository token or @filename for file
containing the token. Defaults to $CODECOV_TOKEN. Not
required for public repositories on Travis-CI,
CircleCI and AppVeyor
--file [FILE [FILE ...]], -f [FILE [FILE ...]]
Target a specific file for uploading
--flags [FLAGS [FLAGS ...]], -F [FLAGS [FLAGS ...]]
Flag these uploaded files with custom labels
--env [ENV [ENV ...]], -e [ENV [ENV ...]]
Store environment variables to help distinguish CI
builds.
--required If Codecov fails it will exit 1: failing the CI build.
--name NAME, -n NAME Custom defined name of the upload. Visible in Codecov
UI.
======================== gcov ========================:
--gcov-root GCOV_ROOT
Project root directory when preparing gcov
--gcov-glob [GCOV_GLOB [GCOV_GLOB ...]]
Paths to ignore during gcov gathering
--gcov-exec GCOV_EXEC
gcov executable to run. Defaults to 'gcov'
--gcov-args GCOV_ARGS
extra arguments to pass to gcov
======================== Advanced ========================:
-X [DISABLE [DISABLE ...]], --disable [DISABLE [DISABLE ...]]
Disable features. Accepting **search** to disable
crawling through directories, **detect** to disable
detecting CI provider, **gcov** disable gcov commands,
`pycov` disables running python `coverage xml`,
**fix** to disable report adjustments
http://bit.ly/1O4eBpt
--root ROOT Project directory. Default: current direcory or
provided in CI environment variables
--commit COMMIT, -c COMMIT
Commit sha, set automatically
--branch BRANCH, -b BRANCH
Branch name
--build BUILD Specify a custom build number to distinguish ci jobs,
provided automatically for supported ci companies
--pr PR Specify a custom pr number, provided automatically for
supported ci companies
--tag TAG Git tag
======================== Enterprise ========================:
--slug SLUG, -r SLUG Specify repository slug for Enterprise ex. owner/repo
--url URL, -u URL Your Codecov endpoint
--cacert CACERT Certificate pem bundle used to verify with your
Codecov instance
======================== Debugging ========================:
--dump Dump collected data and do not send to Codecov
-v, --verbose No comfigured yet
--no-color Do not output with color
Upload reports to Codecov
codecovもcoverallsと同じでトークンを取得しないとローカルでは何もできないのでアンインストールしました。flake8もアンインストール
flake8を実行するとたくさんの指摘を受けます。
faif/python-patternsの.travis.ymlではflake8 *pyというコマンドになっていますが、flake8 *pyでもflake8 *.pyでも何も出力されませんでした。
これも使うことはなさそうなのでアンインストールしました。
参考にしたサイト
GitHub - faif/python-patterns: A collection of design patterns/idioms in Python
Pythonのデザインパターンの例集。
GitHub - nose-devs/nose2: The successor to nose, based on unittest2
nose2はAnacondaパッケージにはまだありませんでした。
Flake8 — flake8 2.0 documentation
flake8の解説。
はじめに — pep8-ja 1.0 ドキュメント
flake8はこのコーディング規約をチェックしているようです。
:: Anaconda Cloud
Anacondaのパッケージ検索サイト。
コード網羅率 - Wikipedia
コード網羅率の解説。
ned / coverage.py / 課題 / #476 - CoverageException: Can't add arcs to existing line data — Bitbucket
--cover-branchesは--cover-eraseと一緒に使う必要がありました。
情報システム用語事典:ブランチカバレッジ(ぶらんちかばれっじ) - ITmedia エンタープライズ
分岐網羅の解説。テストした分岐/分岐の総数*100、が分岐網羅率となっています。
0 件のコメント:
コメントを投稿