2

標準の感触をつかむために、単純なWSGIアプリケーションのペアを作成しています。アプリケーションが期待どおりに機能していることをテストしたいと思います。今、私はそれらのアプリケーションをホストしているサーバーを起動および停止する最良の方法を見つけようとしています。

SimpleServer私の最初の考えは、メソッドでfromを起動しwsgirefsetUpメソッドでシャットダウンすることtearDownでした。serve_foreverブロックなので、別のでその作業を行いましたThread。残念ながら、serve_foreverサーバーの起動に使用した場合、サーバーが含まれているセカンダリスレッドが停止することはなく、サーバーを強制終了threadingする方法が公開されていないことがわかりThreadます。

今、私runはサーバーの実装としてこのようなものを使用することを検討していますThread

while keep_going:
    httpd.handle_request()

ここで、は自分で設定し、自分で設定したkeep_going変数です。TruesetUpFalsetearDown

もっと良い方法はありますか?標準ライブラリだけを使用してこれらのアプリとテストを作成したいと思っていました。lib/frameworkを使用するときに抽象化するものをよりよく理解できますが、これは非常に多くの問題のようです。

ありがとう。

4

2 に答える 2

4

WSGI アプリケーションをテストする最良の方法はWebTestです。これにより、アプリのテスト サーバーを生成する必要がなくなります。TestApp代わりに、オブジェクトのメソッド呼び出しとして WSGI アプリへの HTTP リクエストを行うことができます。

>>> from webtest import TestApp
>>> from myapp import my_wsgi_app
>>> app = TestApp(my_wsgi_app)
>>> res = app.get('/')
>>> res.status
'200 OK'
>>> res.status_int
200
>>> params = {'email': 'foo@example.com', 'password': 'foo', }
>>> res = app.post('/login/', params)
>>> res.status_int
302

私は通常、テストしている WSGI アプリself.appのインスタンスを指す属性をテスト ケースに追加するベース テスト クラスを持っています。TestAppしたがって、私のテストメソッドは次のようになります。

def test_index_page(self):
    res = self.app.get('/')
    self.failUnlessEqual(res.status_int, 200)
于 2010-04-13T17:17:42.390 に答える
1

SimpleServerスレッドで実行することを意図したものではなかったと思います。stdlib のモジュールSimpleServerを使用するなど、別のプロセスで開始する方がよい場合があります。次に、およびメソッド subprocessでプロセスを生成/強制終了できます。setUptearDown

于 2010-04-13T17:16:07.713 に答える