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 中它是如何完成的。

于 2013-06-28T19:35:19.477 回答
2

首先,考虑以下几个方面:

  • 看看是否可以将 I/O(例如 Web 请求)拉到程序的外层(Google for Clean Architecture)。这将使测试变得更加简单。
  • 确保您有集成测试,在最终上下文中测试您的应用程序,包括实时 Web 服务。

如果您仍在寻找一种工具来轻松对剩余的 Web I/O 进行单元测试,请考虑使用库httpretty响应。使用这些工具,可以轻松指定虚假响应,包括标题字段、返回码等。生成的测试代码将比您单独使用 Python 模拟(或您在其他线程中同时运行的自定义真实 Web 服务器)编写的代码更简洁、更短。

于 2016-04-21T15:05:47.777 回答