Using the Stub Runner Boot Application

Spring Cloud Contract Stub Runner Boot 是一个 Spring Boot 应用程序,它公开 REST 端点以触发消息传递标签并访问 WireMock 服务器。

Stub Runner Boot Security

Stub Runner Boot 应用程序在设计上并不安全 - 为其提供安全性需要向所有存根添加安全性,即使它们实际上并不需要。由于这是一种测试实用程序 - 因此服务器*并非打算*用于生产环境。

希望 only a trusted client 具有对 Stub Runner Boot 服务器的访问权限。您不应将此应用程序作为胖 JAR 或 Docker Image 在不受信任的位置运行。

Stub Runner Server

要使用 Stub Runner Server,请添加以下依赖项:

compile "org.springframework.cloud:spring-cloud-starter-stub-runner"

然后用 @EnableStubRunnerServer 注释一个类,构建一个 fat jar,它即可工作。

关于属性,请参阅 Stub Runner Spring 部分。

Stub Runner Server Fat Jar

您可以通过运行以下命令从 Maven 下载一个单独的 JAR(例如,对于版本 2.0.1.RELEASE):

$ wget -O stub-runner.jar 'https://search.maven.org/remotecontent?filepath=org/springframework/cloud/spring-cloud-contract-stub-runner-boot/2.0.1.RELEASE/spring-cloud-contract-stub-runner-boot-2.0.1.RELEASE.jar'
$ java -jar stub-runner.jar --stubrunner.ids=... --stubrunner.repositoryRoot=...

Spring Cloud CLI

1.4.0.RELEASE 版本的 Spring Cloud CLI 项目开始,您可以通过运行 spring cloud stubrunner 来启动 Stub Runner Boot。

要传递配置,您可以在当前工作目录、名为 config 的子目录或 ~/.spring-cloud 中创建一个 stubrunner.yml 文件。如果本地安装了存根,则该文件可以类似于以下示例:

Example 1. stubrunner.yml
stubrunner:
  stubsMode: LOCAL
  ids:
    - com.example:beer-api-producer:+:9876

然后您可以在终端窗口中调用 spring cloud stubrunner 以启动 Stub Runner 服务器。该服务器在端口 8750 可用。

Endpoints

Stub Runner Boot 提供两个端点:

HTTP

对于 HTTP,Stub Runner Boot 提供了以下端点:

  • GET /stubs:返回 ivy:integer 表示法中所有正在运行的存根的列表

  • GET /stubs/{ivy}:返回给定 ivy 表示法的端口(当调用端点 ivy 时,也可仅为 artifactId

Messaging

对于消息传递,Stub Runner Boot 提供了以下端点:

  • GET /triggers:返回 ivy : [ label1, label2 …​] 符号法中所有正在运行标签的列表

  • POST /triggers/{label}:使用 label 运行触发器

  • POST /triggers/{ivy}/{label}:为给定 ivy 表示法使用 label 运行触发器(当调用端点时,ivy 也可仅为 artifactId

Example

以下示例显示了 Stub Runner Boot 的典型用法:

link:{stubrunner_core_path}/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy[role=include]

Stub Runner Boot with Service Discovery

使用 Stub Runner Boot 的一种方法是将其用作 “smoke test” 的存根馈送。这是什么意思?假设您不想部署 50 个微服务到测试环境中,以查看您的应用程序是否工作。您已经在构建过程中运行了一套测试,但您还想确保应用程序的打包工作正常。您可以将您的应用程序部署到某个环境、启动它并在其上运行一些测试,以查看它是否正常工作。我们可以将这些测试称为 "`smoke test`”,因为它们的目的是只检查少数测试场景。

这种方法的问题在于,如果您使用微服务,则很可能也会使用服务发现工具。Stub Runner Boot 允许您通过启动所需的存根并将它们注册到服务发现工具来解决此问题。

现在假设我们想要启动此应用程序,以便自动注册存根。我们可以使用 java -jar ${SYSTEM_PROPS} stub-runner-boot-eureka-example.jar 运行该应用程序来实现此目的,其中 ${SYSTEM_PROPS}

这样,您的已部署应用程序可以通过服务发现向已启动的 WireMock 服务器发送请求。很可能,第 1 至第 3 点可以在 application.yml 中设置为默认值,因为它们不太可能改变。这样,您可以在启动 Stub Runner Boot 时只提供要下载的存根的列表。