如何为不可靠的服务器单元测试REST客户端?

时间:2014-11-07 00:22:31

标签: python unit-testing rest

我正在为仍处于开发阶段的第三方服务制作基于Python的REST客户端。问题是测试/验证客户端是否可以在各种情况下工作。包括不正确的回复。

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

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

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

RESPONSE = {"value1":34,"value2":"a string"}

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

  • 客户端发送正确数量的参数
  • 客户端发送错误的参数值
  • 客户端缺少参数
  • 服务器对上述情况的正确回答
  • 服务器未发回所有必需的值
  • 服务器混合值参数(返回字符串而不是数字)
  • 服务器发回HTML而不是JSON
  • ...... etc

所有这些广泛测试背后的意图是帮助确定错误源自何处。即我的客户是否有问题,或第三方服务器?

有没有人知道组织Python测试套件以适应这些场景的好方法?编写单元测试功能感觉它将成为一项永无止境的任务...... :(

1 个答案:

答案 0 :(得分:0)

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

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

另一方面,有HTTP响应可能会触发客户端的行为。这些你想测试。例如,服务器应答301,并且您希望通过启动下一个请求来测试您的客户端是否做了正确的事情,抓取Location: HTTP标头值。

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

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