(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) テストはデータベースを再度初期化しようとします ( testserver はすでに初期化しています)。
これに対する他の解決策はありますか?
ありがとうございました。