尝试从 serenity.conf 读取环境特定数据时获取空值

问题描述 投票:0回答:2

我正在尝试在 serenity.conf 中配置不同的环境特定数据,并尝试在我的 serenity bdd 测试中使用环境变量读取它们。我在 serenity.conf 中有以下配置

environments {
    dev {
        restapi.baseurl = "https://dev.api.3stripes.io/"
    }
    stg {
        restapi.baseurl = "https://stg.api.3stripes.io/"
    }
    default {
        restapi.baseurl = "https://prod.api.3stripes.io/"
    }
}

我正在尝试在我的 bdd 步骤中阅读此内容,如下所示

EnvironmentVariables objEnvVar = SystemEnvironmentVariables.createEnvironmentVariables();
String baseURI = objEnvVar.getProperty("restapi.baseurl");

我正在使用 maven 命令运行测试:

mvn clean verify -Denvironment=dev

但是我得到了 baseURI 字符串的空值。请让我知道这里需要更改什么才能正确读取该值。

java rest-assured serenity-bdd
2个回答
3
投票

serenity.conf
文件必须位于
src/main/resources
src/test/resources
中才能加载。

您必须使用

EnvironmentSpecificConfiguration
来读取值。

private EnvironmentVariables env;

@Test
void testMethod() {
    String baseurl =  EnvironmentSpecificConfiguration.from(env).getProperty("restapi.baseurl");
    String basepath =  EnvironmentSpecificConfiguration.from(env).getProperty("restapi.basepath");
}

我的

serenity.conf
文件看起来像:

environments {
    localhost {
        restapi.baseurl = "https://localhost:9001"
    }
    uat {
        restapi.baseurl = "https://uat.myco.com"
    }
    default {
        restapi.baseurl = "https://some.host.com"
    }
    all {
        restapi.basepath = "/path/to/api"
    }
}

我可以通过运行激活配置:

./gradlew -Denvironment=localhost clean test

0
投票

几年后遇到这个线程,并且仍在努力使用 Gradle 运行 Serenity 环境。请注意,它在 Maven 上运行良好。我期望 -D 能够“正常工作”,但在 Gradle 中,它的表现就好像将其传递给 Gradle,但从未传递给 Serenity。想出了这个看起来很沉重的解决方案,但把它留给下一个迷失的灵魂,或者更聪明的人来纠正我。

我从一个宁静的模板开始。 它包括 build.gradle,其中有一个名为 test 的部分

test {
    useJUnitPlatform()
}

我定义了一个名为 jvmArgs 的新变量,然后从命令行获取该值

test {
    useJUnitPlatform()
    def parameter = '-Denvironment='
    def environment = findProperty('environment')
    jvmArgs (parameter+environment)
}

这意味着我在命令行上将其传递为

gradlew test -Penvironment=dev

来自 Serenity 的示例环境文件 https://johnfergusonsmart.com/environment-specific-configuration-in-serenity-bdd/

来自 Serenity 的示例代码提取值

private EnvironmentVariables envVars;
@Given("{actor} is requesting api information with a valid token")
public void getsFhaCase(Actor actor) {
     String baseUrl =  EnvironmentSpecificConfiguration.from(envVars).getProperty("api.baseUrl");

感谢 如何将参数传递给使用 Gradle 运行测试的 JVM (Lukas Körfer) 有关 jvmArgs 的提示。

感谢 如何在 gradle 中将命令行参数传递给主类?Drew MacInnis)关于 findProperty 的提示。

© www.soinside.com 2019 - 2024. All rights reserved.