3

テストを高速化するために、localhost で http サーバーをエミュレートしようとしています。

元:

import my_module

class RequestsTestCase(unittest.TestCase):
    def setUp(self):
        # ...
        html = 'hello, world'
        my_server = MyServer(html, 8888)
        my_server.run()
        ...

    def test_my_module_request_phrase(self):
        response = my_module.get_phrase('http://localhost:8888/')
        self.assertEqual(response, 'hello, world')

Python 3を使用してこのようなことは可能ですか?

4

2 に答える 2

3

インターネットを必要とせずにリクエストの応答をテストしたかっただけです (...)

問題ない。テストを実行するのと同じホストでテスト http サーバーを実行できます。テストが実行されているのと同じプロセスで実行する場合 (unittest を使用し、setUp()メソッド内からテスト サーバーを実行する場合)、テストをブロックしないように、サーバーを別のスレッドで実行する必要があります。 . urllib3 hereでそれがどのように行われるかを見ることができます。

于 2013-06-28T19:35:19.477 に答える
2

まず、次の側面を考慮してください。

  • I/O (Web リクエストなど) をプログラムの外層 (Google はクリーン アーキテクチャ) にプルできるかどうかを確認します。これにより、テストがはるかに簡単になります。
  • ライブ Web サービスを含む最終的なコンテキストでアプリケーションをテストする統合テストが実施されていることを確認してください。

残りの Web I/O を簡単に単体テストするためのツールを引き続き探している場合は、ライブラリhttprettyまたはresponseの使用を検討してください。これらのツールを使用すると、ヘッダー フィールド、リターン コードなどを含む偽の応答を簡単に指定できます。結果として得られるテスト コードは、Python モックのみ (または、他のスレッドで同時に実行するカスタムの実際の Web サーバー) を使用して記述したものよりも、はるかに簡潔で短くなります。

于 2016-04-21T15:05:47.777 に答える