Selenium/Cucumber 在 Maven 中为不同环境使用配置文件属性

Use profiles properties for different enviroments in Maven for Selenium/Cucumber

我使用基于 Maven 构建的 Selenium WebDriver 和 Cucumber-jvm 创建测试。 接下来我要实现:

我想要具有属性的配置文件,并根据环境在我的步骤中使用这些属性。

我在 src/test/resources 中创建了一个文件夹,并在其中添加了 2 个子文件夹:StagingDev

在每个文件夹中,我都有一个文件 config.properties,我在其中保存了 username

我的 POM 看起来像:

<profiles>
    <profile>
        <id>staging</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>

        </properties>
    </profile>

    <profile>
        <id>dev</id>
        <properties>

        </properties>
    </profile>
</profiles>

现在我想将配置文件的属性更改为如下所示:

<properties> test/resources/dev/config.properties</properties>
<properties> test/resources/staging/config.properties</properties>

我想当我 运行 我的测试在我的步骤 defs 中使用活动的暂存配置文件时调用:

system.getProperty("username")

我想要这个 return username,它在登台的属性中提供。

当我 运行 这 dev 个人资料处于活动状态时,我想获得 dev 的 属性。

  • 向您的配置文件添加属性,例如:

    <propertiesFile>staging.properties</propertiesFile>
    


    <propertiesFile>dev.properties</propertiesFile>
    
  • 相应地命名不同的属性文件并将它们直接放在 src/test/resources 中。
  • 使用 ${propertiesFile} 使用 Best practices for copying files with Maven 中描述的选项之一将相应的属性文件复制到 config.properties。我更喜欢 Wagon Maven 插件。

更新

这意味着:忘记包含两个属性文件的两个额外目录。把它们都放在src/test/resources/里,按照:

复制

staging

src/test/resources/staging.properties 复制到:

  • src/test/resources/config.properties
  • target/config.properties

取决于您将复制过程绑定到的阶段。

dev

src/test/resources/dev.properties 复制到:

  • src/test/resources/config.properties
  • target/config.properties

取决于您将复制过程绑定到的阶段。

我的解决方案是这样的:

  1. 使用Spring启动external configuration。我们可以根据您的喜好设置 application-{profile}.propertiesapplication-{profile}.yaml。将环境变量(例如主机名、uri、凭据等)放在那里。如果我们需要所有环境的变量,只需将它们放在 application.propertiesapplication.yaml.

  2. 使用 maven 参数 spring.profiles.active 相应地激活配置文件。以下命令是 CI/CD 中的一个用例:

    mvn clean verify -Dspring.profiles.active={profile} ..........