【问题标题】:Executing an asynchronous test in Python在 Python 中执行异步测试
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 没有。我需要在生成的线程中进行断言并在主函数中引发 AssertionError。
猜你喜欢
  • 2023-04-06
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多