我正在使用空手道为Spring Boot应用程序进行集成测试。应用使用另外两个服务(服务A和服务B)。我已经为服务A和服务B编写了空手道模拟。我的集成测试是作为两个不同的功能文件编写的。其中一个特性是使用服务A和服务B的Mocks测试的。另一个特性使用服务B的Mocks和服务A的Spring契约存根。
仅具有模拟的功能
Feature: Test Some feature
Background:
* configure headers = { Content-Type: 'application/json' }
* url baseUrl
#Start up the mocks
Scenario: Start the Mocks
* karate.start({ mock: '../mock/service/service-a.feature', port: 9000})
* karate.start({ mock: '../mock/service/service-b.feature', port: 9001})
具有mock和Spring契约存根的特性
Feature: Test Some more features
Background:
* configure headers = { Content-Type: 'application/json' }
* url baseUrl
#Start up the mocks
Scenario: Start the Mocks
# Service A will use Spring Contract stubrunner.
* karate.start({ mock: '../mock/service/service-b.feature', port: 9001})
现在,当我们运行测试时,第二个失败了,说端口已经被使用了。我尝试在首先运行的功能文件的末尾使用karate.stop(9000)
,但它没有帮助。此外,我不确定这种停止方法的行为。有什么解决这个问题的建议吗?为什么模拟服务在测试完成后仍在运行?
据我所知,当JVM退出时,模拟应该停止——因此我无法解释您的情况。因此,也许您应该创建一种复制和归档bug的方法:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue
我个人建议从单元测试Java代码(通常是JUnit类)开始模拟,这意味着您可以保留对模拟的引用,然后对其调用stop()
。即使在这里,它通常也不是强制性的,因为mock应该随JVM一起终止。请阅读此处的文档:https://github.com/intuit/karate/tree/develop/karate-netty#embedding
然后,请注意,最佳实践是动态预配一个端口,然后将其传递给测试或任何其他消费者。特别是在CI-CD管线中,这避免了使用中的端口或花费太多时间去分配的问题。
也许是你想要的直接答案。当你叫空手道时。start()返回一个类型为MockServer
的对象。因此,您可以保留对它的引用,并在需要时对其调用stop()
:https://github.com/intuit/karate/tree/develop/karate-netty#within-空手道测试
例如:
* def server1 = karate.start('mock1.feature')
* def port1 = server1.port
# do some tests
* server1.stop()
我试图利用空手道(https://github.com/intuit/karate)作为测试容器化、基于云的微服务的整体测试策略中的一个关键组件。假设被测微服务和空手道都有自己的容器,流程如下: 获取本地部署的每个容器 构建(通过gradle)空手道容器中的组件(假设我们的模拟需要Java类) 部署(通过gradle)模拟并让它们在独立模式下运行 向微服务的YAMLs中注入有关模拟的信息 本地构建
当我用空手道开始模拟发球时,有没有办法将端口设置为我想要的端口。启动,而不是像这样获取端口,这将在某个端口启动服务器并返回它: 有类似的可能性:
我正在用两个应用程序做project:android应用程序(客户端)和rest服务(服务器)。我的android应用程序消耗了我的rest服务。 这两个应用程序都是单独测试的,以确保它们按照预期完成业务。在服务器测试期间,我准备请求并检查服务器响应。在客户机测试期间,我设置了一个简单的http模拟服务器,并针对不同的模拟响应测试客户机的请求。 现在,这个技术很管用。它给了我一种我喜欢的灵活性。我
如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需
情况和问题:在Spring Boot中,我如何将一个或多个模拟类/bean注入应用程序以进行集成测试?在StackOverflow上有一些答案,但它们集中在Spring Boot 1.4之前的情况,或者只是不适合我。 背景是,在下面的代码中,设置的实现依赖于第三方服务器和其他外部系统。设置的功能已经在单元测试中测试过了,所以对于完整的集成测试,我想模拟出对这些服务器或系统的依赖,只提供虚拟值。 M