【发布时间】:2018-02-08 04:16:36
【问题描述】:
也许这在测试框架中通常是不可能做到的,但是
我希望能够在测试本身内部署我正在测试的微服务。我看过 Citrus、RestAssured 和空手道,听过无数的演讲,阅读过无数的博客,但我从不知道如何完成第一阶段。似乎总是假设微服务是预先部署的。
【问题讨论】:
标签: integration-testing rest-assured citrus-framework karate
也许这在测试框架中通常是不可能做到的,但是
我希望能够在测试本身内部署我正在测试的微服务。我看过 Citrus、RestAssured 和空手道,听过无数的演讲,阅读过无数的博客,但我从不知道如何完成第一阶段。似乎总是假设微服务是预先部署的。
【问题讨论】:
标签: integration-testing rest-assured citrus-framework karate
2 分:
karate-demo 是由 JUnit 测试运行程序部署的 Spring Boot 示例。这是code that starts the server。
karate-mock-servlet 更进一步,您可以在项目中运行 HTTP 集成测试,而无需启动应用服务器。节省时间,代码覆盖率报告更容易。
如果您有任何超出这些要求的要求,我很乐意听到。我们想要实现的其中一件事是一个内置的服务器端模拟框架——想想嵌入式wiremock:但使用Karate 的DSL 很容易。但目前还没有具体的时间表。
编辑:空手道现在有嘲笑:https://github.com/intuit/karate/tree/master/karate-netty
【讨论】:
老实说,这取决于您的微服务的部署方式以及您所针对的基础架构。我更喜欢将部署集成到 Maven 构建中,因为 Maven 提供了集成前和集成后测试阶段。
如果您可以使用 Kubernetes 或 Docker,我建议您将部署与 fabric8 maven 插件(fabric8-maven-plugin、docker-maven-plugin)集成。这将在 Maven 构建中自动创建/启动/停止 Docker 容器部署。
如果你可以使用 Spring boot,官方的 maven 插件也可以这样做。
另一种可能性是使用构建管道。例如,使用 Jenkins 进行持续构建将首先部署被测系统,然后在管道中执行测试。
我个人更喜欢始终将部署和测试任务分开。如果您真的想在测试中进行部署,Citrus 作为框架能够在测试中启动/停止 Docker 容器和/或 Kubernetes pod。 Citrus 还可以与这些部署任务之前/之后的测试套件阶段集成。
【讨论】:
我找到了一种使用 docker-compose 的方法。
https://github.com/djangofan/karate-test-prime-example
基本上,创建一个运行您的服务容器的docker-compose.yml,然后在调用wait-for-it.sh 后运行e2e 测试。
【讨论】: