如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试
Posted
技术标签:
【中文标题】如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试【英文标题】:How to load application.yaml config in spring-boot configuration for selenium testing 【发布时间】:2014-02-24 08:21:24 【问题描述】:我正在尝试对我的 spring-boot 应用程序运行 selenium 测试。 我想使用我的 application.yml 和 application-test.yml 定义的属性启动应用程序。但是,默认情况下不会发生这种情况。
我尝试像 Dave Syer suggested 那样做,并实现了一个 ApplicationContextInitializer,它使用 YamlPropertySourceLoader 读取 application.yml 和 application-test.yml 文件。
这似乎没有任何效果 - 在我的应用程序测试中将服务器端口设置为 9000 没有效果。
下面是我的测试基类代码:
@ContextConfiguration(classes = TestConfiguration.class, initializers = TestApplicationYamlLoaderApplicationContextInitializer.class)
@SharedDriver(type = SharedDriver.SharedType.ONCE)
@ActiveProfiles("test")
public abstract class IntegrationBase extends AbstractTestNGSpringContextTests
....
下面是我的 ApplicationContextInitializer 的代码:
public class TestApplicationYamlLoaderApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
@Override
public void initialize(ConfigurableApplicationContext applicationContext)
ConfigurableEnvironment env = applicationContext.getEnvironment();
YamlPropertySourceLoader loader = YamlPropertySourceLoader.matchAllLoader();
PropertySource applicationYamlPropertySource = loader.load("application.yml", new FileSystemResource("src/main/resources/application.yml"));
PropertySource testProfileYamlPropertySource = loader.load("application.yml", new FileSystemResource("src/main/resources/application-test.yml"));
env.getPropertySources().addFirst(applicationYamlPropertySource);
env.getPropertySources().addFirst(testProfileYamlPropertySource);
System.out.println("woohoo!");
还有 application-test.yml
server:
port: 9000
【问题讨论】:
【参考方案1】:@ContextConfiguration
不知道 Spring Boot 初始化程序。你试过@SpringApplicationConfiguration
吗? (那么您就不需要自定义初始化程序了。)
【讨论】:
能否请您提供解释如何配置@SpringApplicationConfiguration
的文档的链接,以便我可以指定要用于为属性赋值的 YML 文件?谢谢【参考方案2】:
在你的主配置类中使用@SpringBootApplication,那么spring boot会自动加载application.yml。如果要加载 applicaton-test.yml,只需将当前配置文件设置为测试。这是一个例子:
@SpringBootApplication
public class Main
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer()
return new PropertySourcesPlaceholderConfigurer();
public static void main(String[] args)
System.setProperty("spring.profiles.active", "test");
SpringApplication.run(Main.class, args);
你可能没有 main 方法,只需将配置文件集放在任何适当的位置,即 JVM 启动参数。
参考。 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Spring Boot 允许您将配置外部化,以便您可以在不同的环境中使用相同的应用程序代码。您可以使用属性文件、YAML 文件、环境变量和命令行参数来外部化配置。属性值可以使用 @Value 注释直接注入到您的 bean 中,通过 Spring 的 Environment 抽象访问或通过 @ConfigurationProperties 绑定到结构化对象。
Spring Boot 使用一个非常特殊的 PropertySource 顺序,旨在允许明智地覆盖值。属性按以下顺序考虑:
-
您的测试中的@TestPropertySource 注释。
命令行参数。
来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)
ServletConfig 初始化参数。
ServletContext 初始化参数。
来自 java:comp/env 的 JNDI 属性。
Java 系统属性 (System.getProperties())。
操作系统环境变量。
仅具有随机属性的 RandomValuePropertySource。*。
打包 jar 之外的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体)
打包在您的 jar 中的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体)
打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。
@Configuration 类上的@PropertySource 注释。
默认属性(使用 SpringApplication.setDefaultProperties 指定)。
【讨论】:
以上是关于如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CSS 的其余部分同时显示在 CSS 中加载的背景图像