testing - 如何实现集成测试以检查我的断路器回退是否被调用?

标签 testing spring-boot spring-cloud-netflix hystrix spring-cloud-feign

在我的应用程序中,我需要调用一个外部端点,如果速度太慢,则会激活回退。

以下代码是我的应用程序的示例:

@FeignClient(name = "${config.name}", url = "${config.url:}", fallback = ExampleFallback.class)
public interface Example {
@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    MyReturnObject find(@RequestParam("myParam") String myParam);
}

及其回退实现:

@Component
public Class ExampleFallback implements Example {

    private final FallbackService fallback;

    @Autowired
    public ExampleFallback(final FallbackService fallback) {
        this.fallback = fallback;
    }

    @Override
    public MyReturnObject find(final String myParam) {
        return fallback.find(myParam);
    }

此外,断路器的配置超时: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

我如何实现集成测试来检查我的断路器是否正常工作,即我的端点(在这种情况下模拟)是否缓慢或者它是否返回 4xx 或 5xx 之类的错误?

我将 Spring Boot 1.5.3 与 Spring Cloud (Feign + Hystrix) 结合使用

最佳答案

请注意,我不知道 Feign 或 Hystrix。

在我看来,实现一个模拟 Feign+Hystrix 不同实现细节的自动化集成测试是有问题的——这个实现细节可以随时改变。有许多不同类型的故障:无法访问主端点、非法数据(即接收到 html 错误消息,当以特殊格式导出 xml 数据时)、磁盘已满、......

如果你模拟一个端点,你假设 Feign+Hystrix 的实现细节端点在错误情况下的行为(即返回 null,返回一些特定的错误代码,抛出 Xyz 类型的异常......)

我将只创建一个自动集成测试,其中包含一个真正的主端点,该端点具有永远无法访问的 url 和一个模拟后备端点,您可以在其中验证处理的数据是否来自模拟。 此自动化测试假设从您的应用程序的角度来看,“网络连接太慢”的处理与“url-notfound”的处理相同。

对于所有其他测试,我会围绕 Feign+Hystrix 创建一个薄包装接口(interface),您可以在其中模拟 Feign+Hystrix。通过这种方式,您可以自动测试,例如,如果您从主接口(interface)接收到 200 字节然后获得一个实验,会发生什么情况。

有关隐藏外部依赖项的详细信息,请参阅 onion-architecture

关于testing - 如何实现集成测试以检查我的断路器回退是否被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533079/

相关文章:

typescript - Vitest 错误 : React refresh preamble was not loaded. 出了问题

javascript - 使用 Mocha、Chai、chaiAsPromised 和 Sinon 测试 js promises

spring-boot - 在类型 org.thymeleaf.expression.Dates 上找不到方法调用 : Method format(java. time.LocalDate,java.lang.String)

amazon-web-services - Spring Cloud 或 Netflix OSS 和 AWS 或 Azure 云如何结合在一起提供基于微服务的解决方案

vue.js - Vue-test-utils 加载依赖 - Vue3

iphone - 如何对 iOS 应用程序使用的服务器进行负载测试?

amazon-web-services - Spring Boot 和单实例 AWS Beanstalk SSL 设置错误

Spring Data Neo4j @Query 不返回子节点

spring-security - 如何编写 netflix zuul 过滤器来更改响应位置 header 属性?

java - 使用 spring-cloud-starter-netflix-eureka-client 依赖项在 pom.xml 中出现错误