4

Django の私のアプリは、別のアプリケーションの HTML からデータを破棄してインポートします。各解析機能をテストしましたが、他のアプリケーションを通過するクローラーもテストしたいと思います。この後、いくつかの統合テストを行いたいと思います。テストをできるだけ簡単に実行できるようにするために、ハードコーディングされた HTML を提供し、通過するすべてのパスを含む小さな Web アプリを作成して、インポートされた Web アプリケーションをモックしたいと考えています。

編集: また、私のモックには、いくつかの動的な動作が必要です。たとえば、失敗したログインと成功したログインの両方をテストするためです。そのため、静的ファイルのみを提供することはできません。

このような模擬アプリケーションをどのように作成しますか? サブクラス化しBaseHTTPServerますか?CG?いくつかのフレームワークを使用しますか (ツイルと同様に、Quixote を使用します)? それとも、Django を使用するのが合理的でしょうか? それが私が使用することを考えている解決策ですが、Django はそのような問題には複雑すぎるようです。OTOH、別のフレームワークは、そのようなほとんどの必要性に対して依存関係が重BaseHTTPServerすぎて、使用するには生すぎます。

2番目の編集:クラス、リクエストなどのモックには興味がありません。それは私が使用したいアプローチではなく、そのようなアプローチを使用する提案は私への答えではありません今まで私にそれを提案しました)。私の質問について考えるのが難しすぎる場合は、テストについて話したことを忘れてください.Pythonを使用して一般的にWebアプリケーションを大雑把にシミュレートするにはどうすればよいですか?

4

4 に答える 4

2

あなたは間違ったレベルで嘲笑していると思います。単体テストは、テスト専用に実行している場合でも、外部 Web サーバーにまったく依存する必要はありません。urllib2.Requestオブジェクト (または実際の HTTP 呼び出しを行うために使用しているもの) を、無効なログインに対する関連する応答を含む、事前に用意されたデータを返すものに置き換える必要があります。

于 2011-11-25T19:49:36.373 に答える
1

(再帰ダウンロード) を使用して参照ページをダウンロードしwget -r、ダウンロードしたページを Apache、Nginx、または Web サーバーとして使用しているものを使用して静的ページとして利用できるようにします。

Web アプリケーションからの動的な変更を表示する必要がない限り...

于 2011-11-25T19:38:36.200 に答える
0

Pythonモックを使用する必要があるようです。これにより、たとえば、patch既存のコマンド(外部URLを呼び出す場合があります)を使用して、独自のテストデータを追加できます。

テストに関しては、外部サービスにぶつかってはいけないと思います。代わりに、独自のフィクスチャ内でそのサービスに期待するデータを提供し、応答ハンドラがその役割を果たしていることをテストする必要があります。

于 2011-11-25T21:18:25.967 に答える
0

@Gagandeep Singh のソリューションをフォローしようとしました。これが最善の解決策のようで、おそらく他の状況では良い解決策ですが、私にはうまくいきませんでした。

問題は、別の Django アプリのテスト ディレクトリ内に Django アプリがあったことです。でアプリのテストを実行したときmanage.py test myapp、使用さsettings.pyれたのはプロジェクト全体のものであり、モックアプリのファイルではありませんでした。管理 APIと を使用して Djangoを起動していたmultiprocessingので、問題の一部はこのような複雑な相互作用に起因していたに違いありません。多分それを解決できるかもしれませんが、別の戦略を決めただけです.

私は上書きすることに決め、BaseHTTPServerいくつかの許容できる結果を得ました。これは簡単な作業ではありませんが、モック アプリの起動に成功しました。

于 2011-11-27T21:17:13.617 に答える