我正在尝试在 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 字符串的空值。请让我知道这里需要更改什么才能正确读取该值。
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
几年后遇到这个线程,并且仍在努力使用 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 的提示。