私はgunicornを使ってdjangoでアプリを実行しています。Selenium を使用してアプリをテストしようとしていますが、問題が発生しました。
ガンコーンで動作するジャンゴで行われるようなテストサーバーを作成する必要がありますLiveServerTestCase
。
どうすればこれを行うことができるかについてのアイデアはありますか?
注:誰かがLiveServerTestCase
プロセスではなくスレッドとして実行されていることを確認できますか
コードを読みました。インスピレーションを得るためにを探すLiveServerTestCase
ことは理にかなっていますが、拡張したり何らかの方法で呼び出したりして何かを調理しようとするとLiveServerTestCase
、トラブルが発生し、メンテナンス コストが増加します。
カスタムとメソッドを使用してテストケースクラスから作成することです。メソッド:LiveServerTestCase
unittest.TestCase
setUpClass
tearDownClass
setUpClass
テストに適した設定で Django アプリケーションのインスタンスをセットアップします。他に干渉しない場所にあるデータベース、適切な場所に記録されたログ、および通常の操作中に電子メールが送信される場合は電子メール設定システム管理者に首を絞めさせたくないなど。
[事実上、これは展開手順です。最終的にアプリケーションをデプロイしたいので、上記のプロセスはとにかく開発する必要があります。]
必要なすべてのフィクスチャをデータベースにロードします。
通常の OS コマンドを使用して、Django アプリケーションのこのインスタンスを実行する Gunicorn インスタンスを開始します。
tearDownClass
:_
再び通常の OS コマンドを使用して、Gunicorn インスタンスをシャットダウンします。
テスト用に作成されたデータベースを削除したり、作成された可能性のあるログ ファイルを削除したりします。
また、セットアップと分解の間に、テストは Gunicorn に割り当てられたポートでアプリケーションに接続し、必要に応じてさらにフィクスチャをロードします。
変更された を使用してみませんLiveServerTestCase
か?
LiveServerTestCase
には、テスト、WSGI サーバー、および Django アプリケーションのすべてのテスト セットアップが 1 つのプロセスに含まれています。Gunicorn は、このように動作するようには設計されていません。まず、マスター プロセスとワーカー プロセスを使用します。
外部プロセスで Django アプリを何らかのLiveServerTestCase
方法で開始するように変更すると、このクラスの利点の多くが失われます。プロセス空間で設定またはデータベース接続を変更するだけでよく、同じプロセスに存在するため、これらの変更が Django アプリに引き継がれるという事実にLiveServerTestCase
依存しています。アプリが別のプロセスにある場合、これらのトリックは機能しません。これを処理するために が変更されるLiveServerTestCase
と、最終結果は上で概説したものに近くなります。
追加: Gunicorn と Django を同じプロセスで実行できる人はいますか?
誰かがそれらを接着できると確信していますが、次のことを検討してください。これは、Gunicorn がマスター プロセスとワーカー プロセスを使用するように設計されているため、Gunicornのコアコードを変更することを意味します。次に、Gunicorn または Django の内部が変更されて接着剤が壊れたときに、接着剤を作成したこの人物が、この接着剤を最新の状態に保つ責任があります。結局のところ、これを行うには、この回答の冒頭で概説した方法を使用するよりも多くの作業が必要です。