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

用于集成测试的嵌入式Java HTTPS服务器

陶高扬
2023-03-14

我正在为Mule ESB应用程序编写集成测试,该应用程序通过HTTPS连接到外部API。我想模拟外部API并在Maven构建期间运行端到端联调。我的问题是关于设置嵌入式HTTPS服务器。我尝试过使用泽西,但它只提供HTTP。我正在看这个例子

https://github.com/jersey/jersey/tree/master/examples/https-clientserver-grizzly

我想知道是否还需要一些手动步骤,或者它是否可以在每次构建启动时自动设置所有内容。

有什么建议或想法吗?

编辑。我的最终目标是在可通过HTTPS访问的嵌入式服务器中部署JAX-RS服务。这不需要客户端密钥/证书配置。

编辑2。现在我的问题是证书。集成测试的目的是模拟外部组件并验证我的应用程序是否正常工作。现在,如果我设置了一个嵌入式HTTPS服务器并使用cmd行构建的证书,那么我需要在客户机中添加SSL配置(正如@Ryan Hoegg所指出的)。这不是我理想中想要的:有没有一种解决方案可以让它在不必修改客户端应用程序代码的情况下工作?这应该是一个超越Mule的一般Java问题。

共有3个答案

段铭晨
2023-03-14

如果您愿意嵌入任何其他服务器,请尝试Jetty。

有关配置,请参见此问题

司寇高洁
2023-03-14

您引用的示例会自动工作。我唯一能想到的手动部分是安全存储(密钥库、信任库)的创建。拥有它们后,您可以以与示例中相同的方式提供Grizzly HttpServer。

白星海
2023-03-14

我为此使用confleex-mock-超文本传输协议。它使用Jetty,但它为您完成所有配置。创建MockHttpsServer立即启动HTTPS服务器:

public static final int PORT = 1443;
private MockHttpsServer mockServer;

@Before
public void initHttps() {
    mockServer = new MockHttpsServer(PORT);
    mockServer.respondTo(get("a-service/resource")).withBody(expectedResponse);
}

您可以将Mule应用程序设置为信任模拟服务器使用的证书。类路径上有一个JKS格式的信任库,您可以将其提供给HTTPS连接器,如下所示:

<https:connector name="someHttpsConnector">
    <https:tls-server path="confluex-mock.truststore" storePassword="confluex" />
</https:connector>

我认为一些旧版本的mule在这种方法上有问题,因为我需要在这里使用变通方法。

编辑:只有在使用Spring配置文件运行测试时,才能为HTTPS连接器包含此配置:

<spring:beans profile="test">
    <mule>
        <!-- connector configuration goes here -->
    </mule>
</spring:beans>

确保配置文件在测试运行时确实处于活动状态的一种方法是,只需在@BeforeClass方法中进行设置:

@BeforeClass
public void initEnvironment() {
    System.setProperty("spring.profiles.active", "test");
}
 类似资料:
  • 我对我的spring boot应用程序进行了一些集成测试。spring boot根据依赖关系(和类路径JAR)选择要启动的服务器:(tomcat只有spring-boot-starter-web,如果有spring-boot-starter-undertow,则为undertow,如果有spring-boot-starter-undertow,则为jetty) 我正在编写一个过滤器,它应该可以在许

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

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

  • 我正在使用嵌入在我的Web应用程序(springboot)中的Camunda。我成功地创建了我的自定义身份提供程序(实现ReadOnlyIdtyProvider),并且正在从我的数据库中读取我的用户和组。 问题是,我认为Camunda会检查,例如,某个用户只有在他/她属于候选组时才能申请任务,但我不认为会发生这种情况。例如,我与a组的一个用户登录到驾驶舱,并能够申请分配给候选组B的任务。 所以我的

  • 我有一个相当简单的Spring Boot应用程序,它公开了一个小的REST API,并从MongoDB实例检索数据。对MongoDB实例的查询通过基于Spring数据的存储库进行。下面的一些关键代码。 所以这里的想法是让集成测试(目前是空的)连接到嵌入的mongo实例,而不是“活的”实例。然而,这并不奏效。我可以看到连接到Mongo的“live”实例的测试,如果关闭它,构建就会失败,因为它还在尝试

  • 问题内容: 我想测试嵌入式设备的功能。为简化起见,我可以说这是一个人形机器人,由PC通过C / C ++ API进行远程控制。 我非常有兴趣使用它,因为它没有样板方法。但是,我的情况要复杂一些。实际测试在C#程序上运行,大约需要24小时才能完成。通过切换到Python,我可能会节省大量开发新测试的时间。但是,在这样做之前,我正在寻找一些答案。 古老的测试套件的第一个问题是,所有测试都以预定的顺序执