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一択という感じらしいのでそれと連携させる

参考記事

Flask でアプリケーションを作る際のメモ - Memo

  • 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のテストしかやってないっぽい

prschmid: Setting HTTP Request Values For Flask Unit Testing

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

  • 公式ドキュメント、基本的なテスト方法の手順を記載