当前位置: 首页 > 知识库问答 >
问题:

如何用gradle运行多个嵌入式服务器的spring-boot集成测试

满昊然
2023-03-14

我对我的spring boot应用程序进行了一些集成测试。spring boot根据依赖关系(和类路径JAR)选择要启动的服务器:(tomcat只有spring-boot-starter-web,如果有spring-boot-starter-undertow,则为undertow,如果有spring-boot-starter-undertow,则为jetty)

我正在编写一个过滤器,它应该可以在许多不同的服务器上工作。我没有编译依赖于任何服务器,但我想在许多服务器上测试我代码。我该怎么做呢?

当然,一种方法是让gradle脚本基于某个env变量设置依赖关系,然后使用不同的env变量值调用gradle test几次。有没有更简单的方法,这样我就可以一次测试所有的东西?比如在测试中以编程方式启动服务器?或者使用Gradle/Spring插件?

共有1个答案

单淳
2023-03-14

我的建议是为所有三个服务器添加测试范围的依赖项,但在测试代码中创建三个单独的Spring Boot应用程序类,每个应用程序类禁用EmbeddedServletContainerAutoConfiguration并导入相应的服务器配置:

@Profile("tomcat")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedTomcat.class)
public class TomcatApplication {
    public static void main(String[] args) {
        TomcatApplication.run(TomcatApplication.class, args);
    }
}

@Profile("undertow")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedUndertow.class)
public class UndertowApplication {
    public static void main(String[] args) {
        UndertowApplication.run(UndertowApplication.class, args);
    }
}

@Profile("jetty")
@SpringBootApplication(exclude = EmbeddedServletContainerAutoConfiguration.class)
@Import(EmbeddedServletContainerAutoConfiguration.EmbeddedJetty.class)
public class JettyApplication {
    public static void main(String[] args) {
        JettyApplication.run(JettyApplication.class, args);
    }
}

然后,使用适当的@activeprofiles集编写测试,您应该已经准备就绪。

 类似资料:
  • 我正在为Mule ESB应用程序编写集成测试,该应用程序通过HTTPS连接到外部API。我想模拟外部API并在Maven构建期间运行端到端联调。我的问题是关于设置嵌入式HTTPS服务器。我尝试过使用泽西,但它只提供HTTP。我正在看这个例子 https://github.com/jersey/jersey/tree/master/examples/https-clientserver-grizzl

  • 我正在开发一个cron,我正在使用一个web客户端向一个rest API发送一个post请求。我不想让嵌入式服务器保持开机状态,因为cron需要在几秒钟内完成其任务。但当我不使用服务器时: 更新:我试过了 但是获取由:java.lang.IllegalStateException:org.springframework.boot.web.reactive.context.AnnotationCon

  • 我有一个Spring Boot项目,其中定义了几个apiendpoint。我目前正在为每个API编写集成测试。我的测试类注释如下。 现在,对于我的每个测试类,都会设置一个新的上下文来执行它们,这需要时间。我更喜欢将每个apiendpoint的测试用例保存在单独的类中,以便在逻辑上组织它们,但我不希望每次添加新的控制器类和相应的测试类时,我的测试执行时间都会猛增。我在这里做错了什么?

  • 我正在尝试将外部war文件部署到spring boot的嵌入式tomcat中。我以.war文件的格式添加了gradle依赖项,我想用spring boot应用程序运行这个war,但不运行请任何人可以帮助我。

  • 我正在尝试如何在使用Eureka的Spring Boot应用程序上构建集成测试。说我有考试 我的代码路径中有该 api 调用: 这将NPE。发现客户端返回为空。如果我直接启动 Spring 启动应用程序并自己使用 API,代码工作正常。我在任何地方都没有特定的个人资料用法。我需要为发现客户端配置一些特殊的 wrt Eureka 以进行测试吗?

  • 我有一个基于maven的J2EE项目。此项目包含到数据库的连接,该连接是通过资源设置的。xml和持久性。xml。正常部署时,连接工作正常。 我的问题是,我想运行嵌入式TomEE服务器进行集成测试。对于这些测试,我需要使用内存数据库。 要启动TomEE,我使用如下所示的maven插件组合。 当我启动maven goal mvn安装时,服务器按预期运行,但数据库连接错误。我没有找到方法,如何设置,我需