【问题标题】:two applications, how to test the communications两个应用程序,如何测试通信
【发布时间】:2012-08-22 05:23:22
【问题描述】:

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

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

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

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

我担心的是:

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

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

有没有cmets?

【问题讨论】:

    标签: ruby-on-rails ruby cucumber integration-testing


    【解决方案1】:

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

    对于一个测试,做一个简单的测试,外部服务的行为与您的存根和模拟程序所说的一样。

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

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

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

    【讨论】:

    • 第二段,我明白你的意思,你正在尝试进行测试以确保模拟不会过时,就我而言,我认为测试应该转到 B 应用程序(外部服务),它应该有一个测试,以确保它返回它所承诺的,谢谢你的回复,但我不能同意你在第二段,:D
    【解决方案2】:

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

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

    解决方案一的问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多