在 Nexus 或 Artifactory 中使用 REST 文档和存根进行提供者合同测试

在这个流程中,我们不使用 Spring Cloud Contract 插件来生成测试和存根。我们编写 Spring RESTDocs,并自动生成存根。最后,我们设置构建,将存根打包并上传到存根存储网站——我们这里是Nexus或Artifactory。spring-doc.cadn.net.cn

制作流程

作为制片人,我们:spring-doc.cadn.net.cn

  1. 编写我们API的RESTDocs测试。spring-doc.cadn.net.cn

  2. 把Spring Cloud合同Stub Runner的起始角色加入我们的构建 (春云启动合同存根跑者),具体如下:spring-doc.cadn.net.cn

    梅文
    <dependencies>
    	<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
    		<scope>test</scope>
    	</dependency>
    </dependencies>
    
    <dependencyManagement>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-dependencies</artifactId>
    			<version>${spring-cloud.version}</version>
    			<type>pom</type>
    			<scope>import</scope>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    格拉德勒
    dependencies {
    	testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'
    }
    
    dependencyManagement {
    	imports {
    		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    	}
    }
  3. 我们设置了构建工具来打包我们的存根,具体如下:spring-doc.cadn.net.cn

    梅文
    <!-- pom.xml -->
    <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-assembly-plugin</artifactId>
    		<executions>
    			<execution>
    				<id>stub</id>
    				<phase>prepare-package</phase>
    				<goals>
    					<goal>single</goal>
    				</goals>
    				<inherited>false</inherited>
    				<configuration>
    					<attach>true</attach>
    					<descriptors>
    						${basedir}/src/assembly/stub.xml
    					</descriptors>
    				</configuration>
    			</execution>
    		</executions>
    	</plugin>
    </plugins>
    
    <!-- src/assembly/stub.xml -->
    <assembly
    	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    	<id>stubs</id>
    	<formats>
    		<format>jar</format>
    	</formats>
    	<includeBaseDirectory>false</includeBaseDirectory>
    	<fileSets>
    		<fileSet>
    			<directory>${project.build.directory}/generated-snippets/stubs</directory>
    			<outputDirectory>META-INF/${project.groupId}/${project.artifactId}/${project.version}/mappings</outputDirectory>
    			<includes>
    				<include>**/*</include>
    			</includes>
    		</fileSet>
    	</fileSets>
    </assembly>
    格拉德勒
    task stubsJar(type: Jar) {
    	classifier = "stubs"
    	into("META-INF/${project.group}/${project.name}/${project.version}/mappings") {
    		include('**/*.*')
    		from("${project.buildDir}/generated-snippets/stubs")
    	}
    }
    // we need the tests to pass to build the stub jar
    stubsJar.dependsOn(test)
    bootJar.dependsOn(stubsJar)

现在,当我们运行测试时,存根会自动发布和打包。spring-doc.cadn.net.cn

下图显示了生产者流程:spring-doc.cadn.net.cn

flows-provider-rest-docs-producer

消费者流

由于生成存根的工具不会影响消费者流程,你可以阅读《开发你的第一个春季云合同应用》,了解在Nexus或Artifactory中测试提供商合同中消费者端流程。spring-doc.cadn.net.cn