【snake】Section: 8 Testing and Code Quality

ここでは、テストコード作成方法についてまとめる

requirements.txt でテストに必要なものを準備する

f:id:yukking3:20180708144901p:plain pytest=プログラムをテストするためのフレームワーク。処理時間を測定など色々
pytest-cov=何パーセントの確認したかを表示する
flake8=Pythonプロジェクトのコードレビュー自動化

Getting Comfortable Writing Tests①

Dockerfileを確認すると、
しっかりrequirementとpipをするように指定されている。 f:id:yukking3:20180708145223p:plain



Getting Comfortable Writing Tests② conftest.pyに関して

conftest.py はpytest起動時に読み込まれる特殊なモジュール
Fixtures: 一つのテストである。
test suite: 一つ一つのテストはテストケースという。それらすべてをまとめたものをテストスイートと呼ぶ。
python - In py.test, what is the use of conftest.py files? - Stack Overflow

f:id:yukking3:20180805210604p:plain sanakeeyesフォルダーを確認すると、新たにtestフォルダーができている。 f:id:yukking3:20180708151428p:plain (scope='session')とすることで、最初に1回だけ実行する。
次に(scope='function')とすることで、functionごとでテストを行う。

(settings_override=params)は上記のパラメーターが仕込めるようになっている。 ちなみにcreate_appは3行目でimportされている。 f:id:yukking3:20180805213009p:plain app.pyの18行目はif文で設定されている。
debugがfalseでtestingがtrueでapp_createを起動させる。
現時点では深くは解説しない。

app.test_client()の役割は、testを実行するtrigerになったり、
cookiesを保持する役割がるのでブラウザー操作してるようにテスト出来る。

Getting Comfortable Writing Tests③

f:id:yukking3:20180805221223p:plain 3つのテストを行う。 f:id:yukking3:20180708151747p:plain 以下のコードを実行する

$  docker-compose exec website py.test snakeeyes/tests

config/setting.pyにserver nameを記載していなかったのでエラーが発生する。 f:id:yukking3:20180708152812p:plain

configのsettings.pyに SERVER_NAME = 'localhost:8000'を追記する。 f:id:yukking3:20180805222133p:plain すると f:id:yukking3:20180708152709p:plain


Investigating Our Code Test Coverage カーバー率を算出する

以下を実行する。

 docker-compose exec website py.test --cov-report term-missing --cov snakeeyes

f:id:yukking3:20180708153154p:plain

確かめるために、test.views.pyをコメントアウトする。 f:id:yukking3:20180708153359p:plain

この状態で再度テストパイを実行して見る。 f:id:yukking3:20180708153517p:plain

100%完了から97%に変わる。 snakeeyes/blueprints/page/views.pyを実際に確認して見ると。 f:id:yukking3:20180708153847p:plain

先ほどコメントアウトした部分もterms.htmlなので、確認されていないということがよくわかる。 f:id:yukking3:20180708153916p:plain


flake8は不要なので解説しない。