当前位置: 首页 > 知识库问答 >
问题:

尝试加载不同的属性进行Spring引导应用程序的cucumber集成测试?

姜彬郁
2023-03-14

这是一个与工作相关的web应用程序,使用Spring Boot 1.5.18,Cucumber 4.2.2。

目录结构是src/main/java,用于我所有的java类和包,src/main/resources以及application.properties和其他一些目录结构,一个具有环境日志和安全属性的根级文件夹。然后,我有src/test/java和我的cucumber代码,还有src/test/resources和我修改后的application.properties文件,我希望在测试执行时使用。我还想为测试指定一个不同的环境、安全、日志配置属性文件。

这是我的ApplicationTest.java类,我试图在其中使用不同的属性源。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource( value = 
{"file:${env.dir}/deploy/acceptance/config/env.properties",
    "file:${env.dir}/deploy/acceptance/config/AppConfig.properties",
    "file:${env.dir}/deploy/acceptance/security/auth.properties", 
"classpath:application-test.properties"})
public abstract class ApplicationTest {
    public ApplicationTest() {
}
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources", 
    plugin = {"pretty", "html:target/cucumber", 
"junit:target/reports/cucumber.json"}, glue = { "com.test.packages.cucumber" 
}, monochrome = true)

public class CucumberTest {

}

在SpringBoot测试中加载不同的application.yml

编辑:我认为@TestPropertySource不起作用的原因是:Spring中的属性源优先级。当我在src/test/java中加载cucumber时,它会加载我指定的那些属性,但随后它会在src/main/java文件夹中启动应用程序。这里是加载application.java中的默认属性。Spring文档说,最后加载的属性优先,所以当应用程序启动时,我的TestPropertySource会被覆盖。

我的工作解决方案:我想让cucumber在Jenkins中运行,与我们的构建和部署管道分开。但是找不到一种方法来绕过我的工作关于配置和属性的路径和目录结构的标准。所以我所做的:

4)运行mvn测试

5)利润

共有1个答案

贺轶
2023-03-14

这管用。

使用默认应用程序。

package cucumber.examples.spring.txn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@SpringBootApplication
@EnableWebMvc
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

和一些application.properties

key=App
package cucumber.examples.spring.txn;

import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
public class RunCukesTest {
}
package cucumber.examples.spring.txn;

import cucumber.api.java.Before;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

@SpringBootTest
@AutoConfigureMockMvc
public class CucumberContextConfiguration  {

    @Value("${key}")
    private String value;

    @Before
    public void setup_cucumber_spring_context(){
        // Dummy method so cucumber will recognize this class as glue
        // and use its context configuration.

        System.out.println("Property was " + value);
    }
}
key=Test
 类似资料:
  • 我有类应用程序运行正常,当你运行它作为Spring启动应用程序和加载属性从src/main/Resources/application.yml如下 以下是application.yml详情 但是,当您尝试对上述类abc运行junit测试时,它不会从src/main/resources/application.yml上传属性。甚至我也创建了一个测试文件应用程序。测试目录下的yml

  • 以下是我的场景。 我有我的应用程序,它构建在带有嵌入式tomcat服务器的Spring Boot上。在我的应用程序中,我有单元测试和集成测试。 首先,我想将我的应用程序构建为一个maven包(jar ),它将覆盖所有的单元测试,然后下一步是将jar文件作为spring boot application运行((java -jar myapplication.jar ),它将启动tomcat服务器。最

  • 我比较了。classpath和pom.xml,但没有发现任何可疑之处。显然是有区别的,但我要看哪里? PS:我可以通过@PropertySources加载application.properties,但是 不应该是neccessary(请参阅此处的注释) 在“spring-boot-samples”项目中不是必需的 对速度模板没有帮助

  • 我有一个java应用程序(没有Spring)。此应用程序的副本在另一台服务器上工作,另一个数据库实例。数据库表“设置”有属性主Y或N(用于副本)。在主上的任何操作后,我向kafka发送消息,kafka向副本发送操作,并使用db更新操作。测试此过程的整个周期有什么想法吗? 我使用测试容器来获取kafka和数据库。但是我不知道如何在测试容器实例中启动我的db应用程序。

  • 我有一个用selenium进行单元测试和集成测试的项目。 当我用IntelliJ执行cucumber集成测试时,它工作得很好,您可以看到: 用Intellij执行cucumber集成测试 但是,当我执行mvn集成测试时,似乎没有发现任何联调: 故障保护输出 我定义了以下POM: > 文件夹结构是文件夹结构 mvn集成-测试输出https://drive . Google . com/file/d/

  • 我做错了什么?我正在使用这个小型独立应用程序,它运行并查找我的。相同的配置在JUnit中不起作用,请参阅下面: 以下不起作用,中的相同属性未加载并且只有值: