【问题标题】:how to unit test a REST client for an unreliable server?如何对不可靠服务器的 REST 客户端进行单元测试?
【发布时间】:2014-11-07 00:22:31
【问题描述】:

我正在为仍在开发中的第 3 方服务制作基于 Python 的 REST 客户端。问题是测试/验证客户端是否可以在各种场景下工作。包括不正确的回答。

客户端使用Requests library 进行远程REST 调用(主要是GET 和POST)。对于单元测试,我正在考虑使用HTTPretty 模块来模拟/模拟服务器响应。

问题在于如何处理大量可能的测试用例。考虑以下组成的 API;

请求 (GET) = http://example.com/new_api?param1=34&param2=hello

回复 = {"value1":34,"value2":"a string"}

我发现自己需要为以下场景编写单元测试用例 -

  • 客户端发送正确数量的参数
  • 客户端发送的参数值不正确
  • 客户端缺少参数
  • 服务器对上述场景的正确响应
  • 服务器未发回所有必需的值
  • 服务器混淆值参数(返回字符串而不是数字)
  • 服务器发回 HTML 而不是 JSON
  • ...等

所有这些广泛测试的目的是帮助确定错误的来源。即是我的客户有问题,还是第三方服务器有问题?

有谁知道组织 Python 测试套件以适应这些场景的好方法?编写单元测试函数感觉就像是一项永无止境的任务...... :(

【问题讨论】:

    标签: python unit-testing rest


    【解决方案1】:

    单元测试的目标是测试您认为可能需要处理错误的所有情况。另一方面,您不需要测试系统已经自然处理的事情。

    请注意,HTTP 是一种应用程序级协议,其中客户端始终发起请求,而服务器仅响应。所以我的意思是,因为您正在开发客户端,所以您不负责服务器响应。您的目标只是发送适当的请求。

    另一方面,HTTP 响应可能会触发客户端的行为。这些你想测试。例如,服务器回答 301,而您想通过发起下一个请求并获取 Location: HTTP 标头值来测试您的客户端是否正确。

    在 REST API(也称为超文本驱动)的情况下,您的客户端将解析 HTTP 响应的内容,特别是一组链接和/或 rel 相关值。基于这些值,客户端可以做出决定或向用户公开可能的选择。这些你必须测试。

    如果服务器没有在 HTTP 响应内部提供信息以继续在客户端进行探索,那么它不是 REST API,而是完全有效的 HTTP API。就那么简单。它变得更容易测试。没什么可做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多