シェアする

  • このエントリーをはてなブックマークに追加





【python】【sqlalchemy】ローカル環境でdockerにデータベースを立てて単体テストする

シェアする

  • このエントリーをはてなブックマークに追加
  • 0

sqlalchemyを使った実装をしていて、単体テストをする際、

単純なクエリであればmockを使用したテストでも良いかと思いますが、

複雑なクエリをクエリビルダーによって構成している場合は、

それらをmockで確認するのはちょっと現実的ではないと思います。

そこで、今回はローカル環境にdockerを立ててそこにDBを構築し、

実際にSQLを実行した結果を元に単体テストする方法についてご紹介したいと思います。

データベースはPostgresqlです。

DB接続関連の実装

前提として、以下のようにDB接続部分を実装しているものとします。

接続情報(settings.py)

接続情報は環境変数に設定されているものとして、以下のように取得します。

接続処理(db.database.py)

sqlalchemyを使用した接続のセッション管理周りはこちらで実装しているものとします。

withを用いて使用するものは、contextmanagerを使用した書き方が

良いかと思います。詳しくはこちら

単体テスト実装

単体テストではfixtureとして環境準備を行います。

環境変数についてはpytest-mockを使用して、設定します。

dockerについては事前に起動しておく必要があり、pythonで扱うためには、

でインストールしておきます。

コンテナ起動後は、すぐにアクセスできないので

ちょっとだけ暖気運転させます。

その後はSQLファイルを読み込んで実行させ、

環境を整えます。

あとは、db_initのfixtureを引数としたテストを実装するという流れになります。

まとめ

今回の方法はjenkinsなどのCIツールで回そうとすれば、

dockerの起動を必須としますので、環境によってはサンプルコードのように、

skipのマークをつけておくのがよいかもしれないですねー。

ブログランキング・にほんブログ村へ
にほんブログ村


人気ブログランキング

20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。

今風にいうとフルスタックエンジニアということになるのかしら??

→ 詳細プロフィールというか、生い立ちはこちら

→スキルシートをご覧になる場合はこちら

→お仕事のご依頼やお見積りなどお問い合わせはこちらから!

シェアする

  • このエントリーをはてなブックマークに追加

フォローはいかがですか?