Spring 云应用程序与 AWS Parameter Store 的集成测试
Integration testing of a Spring Cloud application with the AWS Parameter Store
如何对 Spring 引导应用程序执行集成测试,从 AWS Parameter Store(依赖项 org.springframework.cloud:spring-cloud-starter-aws-parameter-store-config
)读取属性。
是否应该在集成测试中禁用 AWS Parameter Store 集成?
如何在集成测试中使用本地服务器(或模拟)而不是真正的 AWS Parameter Store?
为了简单性和性能,通常应在集成测试中禁用与 AWS Parameter Store 的集成。相反,从文件加载测试属性(例如,src/test/resources/test.properties
)
@SpringBootTest(properties = "aws.paramstore.enabled=false")
@TestPropertySource("classpath:/test.properties")
public class SampleTests {
//...
}
如果个别测试需要检查与 AWS Parameter Store 的集成,请使用 Testcontainers and LocalStack 易于使用的本地 AWS 云堆栈 Docker。
添加配置 class 创建自定义 ssmClient
类型 AWSSimpleSystemsManagement
bean 配置为使用 LocalStack 而不是使用真正的 AWS Parameter Store 在 org.springframework.cloud.aws.autoconfigure.paramstore.AwsParamStoreBootstrapConfiguration
中声明的默认配置.
@Configuration(proxyBeanMethods = false)
public class AwsParamStoreBootstrapConfiguration {
public static final LocalStackContainer AWS_SSM_CONTAINER = initContainer();
public static LocalStackContainer initContainer() {
LocalStackContainer container = new LocalStackContainer().withServices(SSM);
container.start();
Runtime.getRuntime().addShutdownHook(new Thread(container::stop));
return container;
}
@Bean
public AWSSimpleSystemsManagement ssmClient() {
return AWSSimpleSystemsManagementClientBuilder.standard()
.withEndpointConfiguration(AWS_SSM_CONTAINER.getEndpointConfiguration(SSM))
.withCredentials(AWS_SSM_CONTAINER.getDefaultCredentialsProvider())
.build();
}
}
至于AwsParamStorePropertySourceLocator
是由Spring云"bootstrap"上下文加载的,您需要向bootstrap上下文添加配置class通过向文件 src/test/resources/META-INF/spring.factories
添加以下条目
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.example.test.AwsParamStoreBootstrapConfiguration
同样的方法可以用于使用 Mockito 模拟 ssmClient
。
如何对 Spring 引导应用程序执行集成测试,从 AWS Parameter Store(依赖项 org.springframework.cloud:spring-cloud-starter-aws-parameter-store-config
)读取属性。
是否应该在集成测试中禁用 AWS Parameter Store 集成?
如何在集成测试中使用本地服务器(或模拟)而不是真正的 AWS Parameter Store?
为了简单性和性能,通常应在集成测试中禁用与 AWS Parameter Store 的集成。相反,从文件加载测试属性(例如,src/test/resources/test.properties
)
@SpringBootTest(properties = "aws.paramstore.enabled=false")
@TestPropertySource("classpath:/test.properties")
public class SampleTests {
//...
}
如果个别测试需要检查与 AWS Parameter Store 的集成,请使用 Testcontainers and LocalStack 易于使用的本地 AWS 云堆栈 Docker。
添加配置 class 创建自定义 ssmClient
类型 AWSSimpleSystemsManagement
bean 配置为使用 LocalStack 而不是使用真正的 AWS Parameter Store 在 org.springframework.cloud.aws.autoconfigure.paramstore.AwsParamStoreBootstrapConfiguration
中声明的默认配置.
@Configuration(proxyBeanMethods = false)
public class AwsParamStoreBootstrapConfiguration {
public static final LocalStackContainer AWS_SSM_CONTAINER = initContainer();
public static LocalStackContainer initContainer() {
LocalStackContainer container = new LocalStackContainer().withServices(SSM);
container.start();
Runtime.getRuntime().addShutdownHook(new Thread(container::stop));
return container;
}
@Bean
public AWSSimpleSystemsManagement ssmClient() {
return AWSSimpleSystemsManagementClientBuilder.standard()
.withEndpointConfiguration(AWS_SSM_CONTAINER.getEndpointConfiguration(SSM))
.withCredentials(AWS_SSM_CONTAINER.getDefaultCredentialsProvider())
.build();
}
}
至于AwsParamStorePropertySourceLocator
是由Spring云"bootstrap"上下文加载的,您需要向bootstrap上下文添加配置class通过向文件 src/test/resources/META-INF/spring.factories
添加以下条目
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.example.test.AwsParamStoreBootstrapConfiguration
同样的方法可以用于使用 Mockito 模拟 ssmClient
。