1

を拡張するテスト クラスがありtornado.testing.AsyncHTTPTestCase、Nose を使用してそのテスト メソッドを実行しています。各テスト メソッドは、テスト対象の Tornado サーバー上の URL からの応答を調べます。これらのリクエストの一部は、完了するまでに数秒かかります。各リクエストは複数の方法でテストされます。

テストの速度が大幅に低下するため、テスト中に同じ HTTP リクエストを 2 回行うことは避けたいと考えています。これらの要求がそれぞれ 1 回だけ行われるようにする最善の方法は何ですか?

例:

class ServerTest(AsyncHTTPTestCase):
    def test_endpoint(self):
        self.http_client.fetch(self.get_url('/'), self.stop)
        response = self.wait()
        self.assertTrue(response.code == 200)

    def test_endpoint_differently(self):
        self.http_client.fetch(self.get_url('/'), self.stop)
        response = self.wait()
        self.assertTrue(response.body != "")

上記のテスト方法はどちらも/エンドポイントを要求しますが、これは遅いです。このリクエストを 1 回 (最初のテストが実行される前に) 発生させ、テストでキャッシュされた応答を調べるにはどうすればよいですか?

私はこれを次のようなクラス変数で動作させました:

class ServerTest(AsyncHTTPTestCase):
    responses = {}

    def setUp(self):
        if self.responses == {}:
            # do http request
            responses['/'] = result

しかし、これを行うためのよりクリーンな方法があるかどうか疑問に思っています(おそらく鼻を使用します)? unittestsetUpClassメソッドを調査しましたが、そのメソッドは である必要があるため@classmethod、テスト ケース インスタンスの http 要求ユーティリティは実行時にまだ使用できませんsetUpClass

4

1 に答える 1