0

我有两个应用程序,比如 A 和 B,通过 API 相互通信,现在我正在为 A 编写黄瓜测试,我有两个选择:

  1. 只需测试 API 是否发送到 B 并存根来自 B 的响应

  2. 从A(因为我正在测试A)在B上设置测试数据,并向B发送真实请求,并用VCR记录请求/响应

我更喜欢选项 #1,但我的同事说它至少需要一个真实的请求才能确保系统(包括 A 和 B)正常工作。

我担心的是:

  1. 如何从 A 的测试中为 B 准备测试数据?

  2. 将它们混合在一起很脆弱,B上的任何更改都可能导致A上的失败

任何意见?

4

2 回答 2

0

您正在编写黄瓜测试,意味着它是一个集成测试。对于集成测试,最好不要模拟任何东西,它是保存应用程序的最后一道安全门。

所以你最好最后发送一次真实的请求,以确保你的请求是正确的,而且你可以随时重复这个真实的请求。

解决方案1的问题:

  1. 您不能确保 B 更改 API 实现
  2. 您不能确保 A 向 B 发送正确的参数
  3. 很难模拟复杂的请求

所以我建议为 B 创建一个沙盒应用程序,提出真正的请求

于 2012-08-26T14:07:10.453 回答
0

对于您的大多数测试,将请求/响应存根,这样测试将在离线时通过,或者不通过。

对于一个测试,做一个简单的测试,外部服务的行为就像你的存根和模拟所说的那样。

EG 执行 get 请求仍会返回带有您希望确保模拟有效的属性的 JSON。

在大多数情况下,您的测试套件不应监控外部服务的“正常运行时间”。只是它的行为与您期望的一样。

对于正常运行时间问题,您应该使用 Nagios、Pingdom、Pagerduty 或其他什么来查看系统管理员方面。

于 2012-08-22T07:56:36.923 回答