Pytest と PostgreSQL: すべてのテストに使用できる最新のデータベース

WBOY
リリース: 2024-08-19 16:43:42
オリジナル
276 人が閲覧しました

Pytest and PostgreSQL: Fresh database for every test

誰もがお気に入りの Python テスト フレームワークである Pytest では、フィクスチャは、テストが開始される前に何かを配置し、終了後にクリーンアップする再利用可能なコードです。たとえば、一時ファイルやフォルダー、環境のセットアップ、Web サーバーの起動などです。この投稿では、クリーンアップされるテスト データベース (空または既知の状態) を作成する Pytest フィクスチャの作成方法を見ていきます。 、各テストを完全にクリーンなデータベース上で実行できるようになります.

目標

Psycopg 3 を使用して Pytest フィクスチャを作成し、テスト データベースを準備およびクリーンアップします。空のデータベースがテストに役立つことはほとんどないため、必要に応じて Yoyo 移行 (この記事の執筆時点では Web サイトがダウンしているため、archive.org スナップショットに移動) を適用してデータベースを埋めます。

したがって、このブログ投稿で作成された test_db という名前の Pytest フィクスチャの要件は次のとおりです:

  • テストデータベースが存在する場合はテスト前に削除します
  • テスト前に空のデータベースを作成オプションで、テスト前に
  • 移行を適用するか、テストデータを作成します
  • テストデータベースへの接続を提供します
  • をテストに
  • テストデータベースを削除
  • テスト後に(失敗した場合でも)
  • テストメソッドの引数をリストしてリクエストするテストメソッド:
リーリー

テスト DB に接続された通常の Psycopg Connection インスタンスを受け取ります。テストは、単純な Psycopg の一般的な使用法と同様に、必要なことを何でも実行できます。例:

リーリー


動機と選択肢

データベースに依存するテストに PostgreSQL フィクスチャを約束する Pytest プラグインがいくつかあるようです。それらはあなたにとってうまくいくかもしれません。 同じことを約束するpytest-postgresqlを試しました。独自のフィクスチャを作成する前に試してみましたが、うまく動作させることができませんでした。おそらく、彼らのドキュメントが私にとって非常にわかりにくかったからでしょう。
もう 1 つの pytest-dbt-postgres は、まったく試していません。


プロジェクトファイルのレイアウト

古典的な Python プロジェクトでは、ソースは src/ に存在し、テストは testing/:

リーリー

幻想的な Yoyo のような移行ライブラリを使用する場合、移行スクリプトはおそらく migrations/:
にあります

リーリー

構成

私たちのテスト DB フィクスチャには非常に小さな設定が必要です:

接続URL
    - (データベースなし)
  • テスト データベース名
  • - テストごとに再作成されます
  • (オプション)migrations フォルダー
  • - すべてのテストに適用する移行スクリプト
  • Pytest には、複数のファイル間でフィクスチャを共有するための自然な場所 conftest.py があります。フィクスチャ設定もそこに移動します:
リーリー

これらの値は環境変数から設定することも、状況に応じて設定することもできます。

test_db フィクスチャの作成

PostgreSQL と Psycopg ライブラリ

の知識を持って、conftest.py にフィクスチャを作成します:

リーリー移行フィクスチャの作成
私たちの場合は、

Yoyo移行

を使用します。マイグレーションの適用を yoyo という別のフィクスチャとして記述します:

リーリーすべてのテスト データベースに移行を適用する場合、test_db フィクスチャにヨーヨー フィクスチャが必要です:

リーリー

一部のテストのみに移行を適用するには、ヨーヨーを個別に必要とします:
リーリー

結論

テストにクリーンなデータベースを提供する独自のフィクスチャを構築することは、私にとって Pytest と Postgres の両方をより深く掘り下げることができる貴重な経験でした。この記事が独自のデータベース テスト スイートに役立つことを願っています。お気軽にコメント欄に質問を残していただき、コーディングを楽しんでください!

以上がPytest と PostgreSQL: すべてのテストに使用できる最新のデータベースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!