在Python中执行异步测试

在Python中执行异步测试,python,unit-testing,sockets,simplehttpserver,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('htt

我需要做以下测试:

向服务器发送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)

对于POST请求,测试必须等待5秒钟,如果没有发生任何事情,则测试将失败。如何在测试中合并这些项目?如果我把sleep5放在test\u can…,httpd处理程序在倒计时结束之前不会应答。

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


这里有一个使用decorator的简洁实现:

您已经远远超越了unittest的主题,进入了集成测试。例如,使用集成测试工具代替Selenium。其他服务器也发送查询。我也需要一种HTTP服务器。我需要在生成的线程中执行断言,并在主函数中引发AssertionError。