4

Python GAE アプリケーションをテストするために、webtest を使用していくつかのテストを作成しようとしています。私が直面している問題は、アプリケーションがポート 8080 でリッスンしているのに、そのポートをヒットするように webtest を構成できないことです。

たとえば、 app.get('/getreport') を使用してhttp://localhost:8080/getreportにアクセスしたいとします。明らかに、これは http://localhost/getreport にヒットします。

特定のポートをヒットするように webtest を設定する方法はありますか?

4

3 に答える 3

4

paste.proxy.TransparentProxy を使用すると、http 要求に応答するものをすべてテストできます...

from webtest import TestApp
from paste.proxy import TransparentProxy
testapp = TestApp(TransparentProxy())
res = testapp.get("http://google.com")
assert res.status=="200 OK","failure....."
于 2010-05-06T01:57:02.943 に答える
2

configで、引用すると、

port

必須?いいえ、デフォルトは「80」です

リクエストの実行に使用するポート番号を定義します (例: "8080")。

編集: ユーザーは、広く使用されている Canoo アプリケーションではなく、このWeb テスト (pythonpaste の)を意味することを明確にしました。pythonpaste の webtest は非常に異なる魚のやかんであるため、私は推測しませんでした。引用します...:

これにより、HTTP サーバーを起動せずに、またテストが必要なアプリケーションの一部をショートカットする Web フレームワークを突っ込むことなく、Web アプリケーションをテストできます。WebTest が実行するテストは、WSGI HTTP サーバーがアプリケーションを呼び出す方法と完全に同等です。

HTTP サーバーは開始されず、「ポート」の概念もありません。実際の TCP/IP と HTTP が動作することなく、WSGI レベルでインプロセスで実行されます。したがって、「アプリケーション」はポート 8080 (またはその他のポート) でリッスンしませんが、HTTP サーバーがそれらを呼び出しているかのように、WSGI エントリ ポイントが直接呼び出されます。

実際に実行中の HTTP サーバーをテストする場合は、 pythonpaste ではなく、 Canooの webtest (または他の同等のフレームワーク)が必要です。後者は、ソケット層と HTTP 層のオーバーヘッドを回避することでテストを高速化しますが、この方法では、別の既存の実行中のサーバー (GAE の SDK など) をテストすることはできません。

于 2010-05-05T14:49:08.510 に答える
2

WebTest の機能を誤解していると思います。のようなものは、どのポートでもapp.get('/getreport')いかなる種類のリクエストも行うべきではありません。localhostWebTest の優れた点は、アプリを実際にサーバーで実行する必要がないことです。

以下は、WebTest ドキュメントの「What This Does」セクションからの引用です。

これにより、HTTP サーバーを起動せずに、またテストが必要なアプリケーションの一部をショートカットする Web フレームワークを突っ込むことなく、Web アプリケーションをテストできます。WebTest が実行するテストは、WSGI HTTP サーバーがアプリケーションを呼び出す方法と完全に同等です。

于 2010-05-05T15:18:42.193 に答える