【发布时间】:2012-11-02 12:46:07
【问题描述】:
我需要做以下测试:
- 向服务器发送 GET 请求 (http://remote/...)
- 等待服务器发送 POST 请求作为响应 (http://local/...)
- 解析 POST 数据并做一些断言
Selenium 不适合这种情况:它无法监听连接,我也可以在没有 Selenium 的情况下发送 GET。
所以,我做了一个单元测试:
class MobiMoneyTestCase(TestCase):
def test_can_send_response(self):
resp = requests.post('http://url/api/', data={'callback': 'http://localhost:8000'})
class Handler(SimpleHTTPRequestHandler):
def do_GET(self):
assert self.path == '...'
httpd = SocketServer.ThreadingTCPServer(('localhost', 8000),Handler)
测试必须等待 5 秒钟的 POST 请求,如果没有发生任何事情,则测试失败。如何在测试中合并这些项目?如果我将sleep(5) 放入test_can...,则httpd 处理程序在倒计时结束之前不会回复。
【问题讨论】:
-
您已经超越了单元测试领域,进入了集成测试领域。改用集成测试工具(例如 Selenium)。
-
另一台服务器也发送查询。我也需要一个 HTTP 服务器。
标签: python unit-testing sockets simplehttpserver