Flaskのテスト関連メモ
調べたことの雑多なメモ。かなりてきとうです。
テストツールを探す
とりあえず以下の視点で探した
- デバッグしやすさ
- 結果の見やすさ
- 導入の容易さ
- coverageとか見れる
- fixtureとか簡単につくれる
結果
とりあえず以下を使うことにした
- pytest
- pytest-cov (coverage)
- flask-testing (utility)
- factoryboy (fixture)
- SQLAlchemy
なんとなくの理由
- flask関連の情報が多いのはnoseだが、pytestのほうが結果が見やすくデバッグしやすいらしいので
- noseもpytestも導入自体は簡単
- pytestでcoverageを見るにはpytest-covがデフォらしい
- flask-testingは色々便利なメソッドがつまってる(はず)
- self.app, self.client などがデフォルトで定義されている
- 使用したテンプレートや、コンテキストを確認するassertなども定義されていて便利
- factoryboyはflask関連では情報が少ないが、fixtureってやつよりなんとなく情報量が多そう
- ORMはSQLAlchemy一択という感じらしいのでそれと連携させる
参考記事
- noseを使用
- viewはFlask付属のテストクライアント
- ロジック部分は普通のunittest
How I Structure My Flask Applications
- ツールは nose, factoryboy, mock がいいよ
- factoryboy は fixture 生成できるっぽい、モデル(ORM)利用が前提?
- rootのtestsディレクトリ以下に全てまとめる
- test用の設定は tests.settings
- factoryboy用の設定は tests.factories
- ユーティリティ系は tests.utils
- FlaskTestCaseMixinにassertなんかも作ってそこにまとめてある
- TestCaseのベースクラスを作ってそれを継承
- 共通のfixture, setUp, tearDown なんかは全てここ
- 機能毎に tests.api, tests.frontend などのモジュールを定義している
- 基本的にrequestのテストしかやってないっぽい
- レスポンスのjsonとかステータスコードを見るだけ
prschmid: Setting HTTP Request Values For Flask Unit Testing
- テストクライアントのHTTPリクエスト内容を変更したければProxyClass作ってみるとよいかも
GracefulExit - Flask と Alembic とテスト
- Alembic で DBスキーマの管理ができるらしい、SQLAlchemyとセットで使うとか
Application Factories — Flask 0.10.1 documentation
- この概念を用いるととてもよくなるらしい
- blueprint を適用しているやつだとなおさら?
The Flask Mega-Tutorial, Part XVI: Debugging, Testing and Profiling - miguelgrinberg.com
- werkzeugのProfileMiddlewareを使えばviewのパフォーマンスを計測できる
- coverage重要そう
Flask-Testing — Flask-Testing 0.3 documentation
- 便利なメソッドとかを生やしたUnitTestクラスを提供するもの?(パっと見)
- template context をassertできるっぽい
- これだけでも使う価値あり?
Testing Flask Applications — Flask 0.10.1 documentation
- 公式ドキュメント、基本的なテスト方法の手順を記載