使用webservice数据库和jms编写Java/Maven集成测试

使用webservice数据库和jms编写Java/Maven集成测试,java,web-services,maven,jenkins,integration-testing,Java,Web Services,Maven,Jenkins,Integration Testing,我正在维护一个Java企业应用程序,它公开一些Web服务,并与一些JMS队列和数据库交互 我已经对大部分代码进行了单元测试,我认为一切都很好,直到在一次重构中,我将一个类移动到另一个包中,并在我没有注意到和破坏所有客户端的情况下更改了我的Web服务中的名称空间。 集成测试会捕捉到这一点,所以我正在尝试编写一个 应用程序部署在JBoss EAP 6.4上,如何在我的mvn验证步骤中进行webservice调用? JMS队列呢?它们是在应用服务器上配置的。 应用程序是否应该已经部署? 我应该在验证步

我正在维护一个Java企业应用程序,它公开一些Web服务,并与一些JMS队列和数据库交互

我已经对大部分代码进行了单元测试,我认为一切都很好,直到在一次重构中,我将一个类移动到另一个包中,并在我没有注意到和破坏所有客户端的情况下更改了我的Web服务中的名称空间。 集成测试会捕捉到这一点,所以我正在尝试编写一个

应用程序部署在JBoss EAP 6.4上,如何在我的
mvn验证
步骤中进行webservice调用? JMS队列呢?它们是在应用服务器上配置的。 应用程序是否应该已经部署? 我应该在
验证
步骤之前,使用maven将应用程序部署到JBoss安装中,还是启动嵌入式Web服务器

周围的大多数文档都让我感到困惑,而且我经常看到关于模拟的建议,这不是集成测试(我已经在单元测试中做了)


有人告诉我“只需使用Jenkins”,我阅读了文档,安装了它,但仍然不明白它应该如何帮助我编写集成测试,因为它所做的只是运行
mvn verify

这个主题太广泛了,这个问题可能有许多不同的正确答案,这在很大程度上取决于您所使用的技术,因此我将仅在本部分中首先重点介绍:

这在我的Web服务中更改了名称空间,而我没有注意到 断开所有客户端

您也可以为端点创建单元测试,我一直使用
springboot
。例如,下面的代码启动应用程序,运行
testEndpoint()
测试,然后立即关闭应用程序

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyApplication.class})
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class MyControllerTest {

    @Value("${local.server.port}")
    private int port;

    @Test
    public void testEndpoint() {
        String endpointUrl = "http://localhost:" + port;
        // make a HTTP request here to test the endpoint
    }
}
我相信任何
springmvc
应用程序都可以做到这一点,但是代码会有点不同,不像
springboot
那么简单

尽管这通常会捕获端点中的大多数错误,但它并不能消除对已部署项目进行集成测试的需要

因此,现在关注大局,如果您想要创建端到端测试,包括Web服务、JMS队列和数据库,我建议创建一个单独的项目,只包含测试,可能使用Cucumber或类似的东西。该项目应在需要时(例如部署前、每小时、每次提交和/或每晚)在Jenkins(或任何其他CI工具)中触发,并要求所有应用程序都已部署

或者,您可以让Jenkins部署一个应用程序,并仅针对这一个应用程序运行集成测试。在这种情况下,测试将取决于已部署的所有其他应用程序