【发布时间】:2019-05-09 21:28:12
【问题描述】:
我正在尝试在 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 可以实现这样的事情吗?
【问题讨论】:
-
取决于
my_server.run()的作用。如果它阻塞,那么setUp()将不会返回,并且您的测试将不会被执行。 -
您是在尝试测试客户端、服务器还是集成场景?它看起来像一个集成场景,在这种情况下,您无法真正模拟服务器并进行合法测试。如果你正在做一个客户端测试,你可以对你使用的任何 http 库进行猴子补丁,以存根实际的网络通信,并将预设响应返回给客户端。如果您正在测试服务器,除非您实际上是在尝试测试网络堆栈,否则您可以模拟出请求对象并将罐装对象提供给您的模型和其他代码。
-
在 django 中,您将使用 django.test.client。但正如 sr2222 所说,这取决于您要测试的内容。
-
除非您有一些中间件或您正在尝试测试的东西,否则您应该能够模拟出请求对象并将其输入您的模型,然后验证您是否获得了适当的响应对象。不过,您仍然应该至少进行一些粗略的端到端集成测试,以全面检查整个堆栈。
标签: python unit-testing http request python-3.3