2009-06-18 9 views
4

(django.test.client.Clientを使用する代わりに)直接HTTPリクエストを実行する単体テストを作成します。DjangoテストサーバーからDjangoテストサーバーにアクセスする

私がDjangoアプリケーションから公開するThrift-over-HTTP APIをテストしたいからです。なぜなら、ユニットテストでThriftクライアントを使いたいからです。

問題は、テスト中にサーバーが実際に実行されていないことです。 django.test.client.Clientを使用すると、実際にHTTPリクエストを行うのではなく、単にview関数を呼び出すだけです。 (私が間違っていれば私を訂正してください)

HTTPフレームをテストフレームワークに強制的に送信させるにはどうすればいいですか?私は睡眠を必要とする)1ので(そうでない場合は、テストが前に開始されます

./manage.py testserver --addrport 7000 & 
PID=$! 
sleep 5 
./manage.py test --no-input 
kill $PID 

しかし、それは厄介である(そして実際には動作しません):

は、私はこのような何かをbashスクリプトを書いてみましたDBはテストサーバーによって初期化されます)、2)テストはデータベースを再度初期化しようとします(テストサーバーが既に初期化した後)。

他の解決方法はありますか?

ありがとうございます。

答えて

7

うん、あなたは正しい - それは問題だとそれのためにバグがあります:あなたは、マルチスレッドの問題が発生する場合があり、http://code.djangoproject.com/ticket/2879

だけでは、意図的にommited:http://code.djangoproject.com/ticket/10117http://code.djangoproject.com/ticket/4513http://code.djangoproject.com/ticket/3357

私はイライラしています、したがって、別のスレッドでライブサーバーを起動し、後でクリーニングすることを含むライブラリを作成しました:http://devel.almad.net/trac/django-sane-testing/。また、DjangoのサーバをランタイムのMonkeypatchingでマルチスレッド化し、代わりにcherrypy httpを使うことができます(とにかくこれは良い方法です)。

noseをテストフレームワークとして使用する必要があるだけです(標準unittestと100%の下位互換性がありますが、すでに他のものを使用している場合は...)。 --with-djangoと--with-djangoliveserver/- with-cherrypyliveserverを使うことができます。それが倹約とどのように動作するのかわかりません。

ただ、注意してください:

  • をバグレポートしていないバグDjangoの開発者が行う、あなたがあなた自身の
  • 風車同じソリューションを提供しますので、あなたは風車を使用している場合、あなたはおそらくポートがあるでしょうにしているしてください紛争
+0

素敵な回答ありがとう!私のために過度のように思える。私はちょうど今のところ簡単に行くだろうと思う。これは、テストサーバに接続する通常のテスト(DjangoではないのでDBを混乱させない)を作成しておく必要があります。テストセットアップで、接続に失敗した場合は、「Djangoテストサーバーを起動してください」というような素晴らしいメッセージを表示します。 :) – ibz

+0

@Almad:[Offtopic]私たちのスラブ語では大文字で始まっても代名詞は大丈夫です。しかし、英語では、何とかして文の連続性が損なわれ、破られます。 :) –

+0

@TomaszZielinski {Offtopic]代名詞「I」は常に大文字になります。他の代名詞を文頭から大文字にすると、神格またはそのセットを参照しています。 –

関連する問題