在Python中执行异步测试

时间:2012-11-02 12:46:07

标签: python unit-testing sockets simplehttpserver

我需要做以下测试:

  • 向服务器发送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处理程序在倒计时结束前不会回复。

1 个答案:

答案 0 :(得分:-1)

基本上,如果过程太长,你想要超时吗?在这种情况下,您应该检查信号模块。

这里有一个简洁的实现(带有装饰器):Timeout function if it takes too long to finish