通过优锐课核心java学习笔记中,我们可以看到如何使用Spring Cloud Contract进行测试,码了很多专业的相关知识, 分享给大家参考学习。
在使用Spring Cloud Contract进行测试
了解有关消费者/提供商关系的更多信息以及如何使用Spring Cloud合同进行测试; 测试和验证API通信。
1、了解如何使用Spring Cloud进行测试。
随着许多行业转变为微服务架构,测试这些微服务是一个挑战。 不同的团队拥有不同的服务,因此测试和验证这些微服务之间的API通信非常重要。
使用Test API框架的主要缺点是所有微服务都必须启动并运行。
例如,如果你的项目具有四个服务A,B,C和D。
测试服务A中的方法,先调用服务B,然后再调用服务C,最后调用服务D。如果这些服务(B,C和D)中的任何一个出现故障或无法正常工作,则你的测试方法(用于服务A)将失败。 尽管此方案对你的端到端测试很有用,但对于服务A的功能测试可能不是理想的选择。
如何克服呢? 是的,你是对的! 模拟从服务A到服务B的呼叫。
在此博客中,我们假设你的微服务是用Spring Boot 2编写的。让我们考虑使用“ Spring Cloud Contract”来模拟该服务。

要执行用例,我们有两个主要步骤:
1.提供者验证程序设置(服务B)。
2.消费者(服务A)设置。
2、提供商验证程序设置
在继续执行Spring Cloud Contract之前,我们需要标记依赖项。 在Gradle中,将以下类路径条目添加到build.gradle的构建脚本部分(在项目中全局引用)中。
buildscript{
dependencies{
classpath "org.springframework.cloud:spring-cloud
"-contract-gradle-plugin:2.1.3.RELEASE"
classpath "io.rest-assured:rest-assured:3.0.2"
classpath "io.rest-assured:spring-mock-mvc:3.0.2"
}
}
下一步是应用插件。 在这里使用了maven-publish,因此我可以生成工件并根据你的项目将其发布到本地或远程存储库。下一步是应用插件。 在这里使用了maven-publish,因此我可以生成工件并根据你的项目发布到本地或远程的存储库。
apply plugin: 'spring-cloud-contract'
apply plugin: 'maven-publish'
接下来,添加你的项目依赖项
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-contract-dependencies:2.1.3.RELEASE"
}
}
你可以覆盖默认的spring contract设置,这里我修改了Java类的基本路径,需要为我们的测试创建它。
contracts {
packageWithBaseClasses = 'com.mypackage.naveen.serviceB'
generatedTestSourcesDir = project.file('src/generatedContract')
}
最后,添加testCompile依赖项。
testCompile 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
进行Gradle清理和构建,并确保下载了所有依赖项,并成功构建了项目。
是时候写我们的第一份合同了。 你可以使用YAML或groovy定义合同。
我们的目的是什么? 我们必须嘲笑。
在src / test / resources / contracts下创建一个名为
Contract.make {
request {
method 'POST'
url '/testservice'
body(file("request.json"))
headers {
contentType(applicationJson())
}
}
response {
status OK()
body(file("response.json"))
headers {
contentType(applicationJson())
}
}
}
你可以在同一目录中创建两个文件“ request.json”和“ response.json”。 这些JSON文件包括匹配你要模拟的服务的请求和响应。
此后,运行Gradle测试任务-这将自动生成’ContractVerfierTest’类并运行你的测试(前提是已实现要测试的端点)。

现在,创建一个基础验证程序抽象测试类。 这是你的“ spring-cloud-contract”插件生成自动测试实现类所必需的。 在你在上面的build.gradle中提到的基本软件包下创建。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public abstract class ContractVerifierBase {
@Autowired
private WebApplicationContext context;
@Before
public void setUp() throws Exception {
RestAssuredMockMvc.webAppContextSetup(context);
}
}
现在运行Gradle-> VerificationVerification ::检查任务以确保一切正常。 如果任务成功,你将在项目的build / libs目录中看到创建的存根jar。

运行你的Gradle-> PublishStubPublicationtoMavenLocal。 这会将你的jar部署到本地Maven存储库(.m2文件夹)。你现在已经完成了第一步。 休息一下!
3、消费者设置
现在,要使用服务A中服务B的存根(模拟),我们将使用存根运行器。
与往常一样,向服务A的build.gradle添加一个依赖项。
testCompile("org.springframework.cloud:
"spring-cloud-starter-contract-stub-runner:2.0.1.RELEASE")
在服务A中创建测试方法,该服务将调用服务B方法并作为Junit Test运行。
@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceBContractVerifierTest {
private String PAC_RESPONSE = "{\"traceId\":null,\"dbLatency\":0,\"transactionStatus\":null,\"transactionCategory\":null,\"iXMLResponse\":null,\"status\":false}";
private String ENDPOINT_URL = "http://localhost:8081/testservice";
@Autowired
RestTemplate restTemplate = new RestTemplate();
@Test
public void verifyServiceBTestEndpoint(){
ServiceBRequestBO request = new ServiceBRequestBO ();
// Given:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("X-xxx-traceId", request.getTraceId());
HttpEntity<String> entity = new HttpEntity(request, headers);
//When:
ResponseEntity<String> response = restTemplate.exchange(ENDPOINT_URL, HttpMethod.POST, entity, String.class);
// then:
Assertions.assertThat(response).isNotNull();
Assertions.assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
Assertions.assertThat(response.getBody()).isEqualTo(PAC_RESPONSE);
}
这会使你的测试用例失败。 由于尚未配置存根。
POST请求“ http:// localhost:8081 / testservice”时发生I / O错误:连接被拒绝:connect; 嵌套的异常是java.net.ConnectException。
配置你的存根运行器。
@AutoConfigureStubRunner(
ids = "com.mypackage.naveen.serviceB:serviceB:+:stubs:8081",
stubsMode = StubsMode.LOCAL)
再次运行测试,测试通过。 哇! 一切都成功结束。
喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以加入我的java学习群 V–(ddmsiqi)来交流学习,里面都是同行,验证【优快云2】有资源共享。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

本文介绍了如何利用Spring Cloud Contract进行微服务API测试,解决了在测试中遇到的挑战,通过模拟调用来减少对其他服务的依赖。详细讲解了提供者验证程序设置和消费者设置的步骤,包括添加依赖、编写合同、生成存根和运行测试。
675

被折叠的 条评论
为什么被折叠?



