DjangoテストからDjangoテストサーバーにアクセスする
-
06-07-2019 - |
質問
(django.test.client.Clientを使用する代わりに)HTTP要求を直接実行する単体テストを作成したい。
理由が気になる場合-Djangoアプリケーションから公開するThrift-over-HTTP APIをテストしたいので、単体テストでThriftクライアントを使用したいのです。
問題は、テスト中にサーバーが実際に実行されていないことです。 django.test.client.Clientを使用する場合、実際にHTTPリクエストを行うのではなく、単にビュー関数を呼び出します。 (間違っている場合は修正してください。)
では、テストフレームワークにHTTPサーバーを強制的に起動させる最良の方法は何ですか?
次のようなことを行うbashスクリプトを書いてみました:
./manage.py testserver --addrport 7000 &
PID=$!
sleep 5
./manage.py test --no-input
kill $PID
しかし、それは面倒です(実際には機能しません)1)スリープが必要です(そうでなければ、テストサーバーによってDBが初期化される前にテストが開始されます)、2)テストはデータベースを再度初期化しようとします(テストサーバーが既に初期化した後)。
これに対する他の解決策はありますか?
ありがとう。
解決
はい、あなたは正しいです-それは問題であり、バグがあります: http:/ /code.djangoproject.com/ticket/2879
その後、意図的に省略されたマルチスレッドの問題が発生する場合があります: http://code.djangoproject.com / ticket / 10117 http://code.djangoproject.com/ticket/4513 http://code.djangoproject.com/ticket/3357
イライラしているため、ライブサーバーを別のスレッドで起動し、後でクリーニングするライブラリを作成しました。 http://devel.almad.net/trac/django-sane-testing/ 。また、ランタイムモンキーパッチによってマルチスレッド化されたDjangoのサーバーも起動し、代わりにcherrypy httpを使用できます(とにかく優れています)。
唯一の問題は、テストフレームワークとしてnoseを使用する必要があることです(標準unittestとの100%後方互換性がありますが、既に別のものを使用している場合は...)。その後、-with-djangoおよび--with-djangoliveserver /-with-cherrypyliveserverを使用するだけです。 rif約でどのように機能するかわかりません。
注意してください:
- バグレポートでDjango開発者をバグにしないでください。あなたは独力です
- Windmillは同じソリューションを提供するため、Windmillを使用している場合は、ポートの競合が発生する可能性があります