在我的项目中,在触发测试运行时,我们将变量作为系统属性传递,例如:
public static String USER = System.getProperty("user", "ADMIN_HQ");
这样我们就可以使用当时需要的任何用户/浏览器/服务器等来运行测试。
由于这是一个公共字符串,因此需要时在代码中调用它。因此,没有参数传递给测试方法。
我遇到的问题是 Allure 报告如何显示这一点。例如,我可能运行一个 bash 文件:
#!/bin/bash
mvn -Dtest=ScreenshotComparisonTests#salesForecastComparison -Duser=ADMIN_1 -Dbrowser=CHROME_HEADLESS test
mvn -Dtest=ScreenshotComparisonTests#salesForecastComparison -Duser=ADMIN_2 -Dbrowser=CHROME_HEADLESS test
allure serve target/allure-results
我希望在 Allure 报告中将它们列为两个单独的测试用例,但它将它们分组为重试。问题是,如果 ADMIN_1 的测试失败,如果 ADMIN_2 通过,我将看不到这一点,除非我深入到所有测试的“重试”选项卡。它使图表和总体结果毫无用处。这也意味着我无法按照我想要的方式对测试进行分组,例如每个用户名等都有一个故事
如何将这些重试分成独特的测试用例?
我尝试分配史诗、故事、功能、parentSuite、Suite、subsuite 等。
我还为 BeforeEach 测试运行设置了 Allure 参数:
//Add Allure parameters
Allure.parameter("Browser", browserVersion);
Allure.parameter("OS Info", osInfo);
Allure.parameter("Server", serverName);
Allure.parameter("Build Version", version);
Allure.parameter("Logged in as", USER);
Allure.parameter("Machine username", machineUsername);
这些参数每次都不同(在本例中,登录时在测试中显示为 ADMIN_2,但当我深入重试时显示为 ADMIN_1),但它仍然将它们分组为一个测试用例。
我尝试查看container.json和result.json文件,看看我是否可以弄清楚这里需要更改什么才能让报告将它们视为单独的测试用例,但我无法弄清楚
Allure 使用测试结果参数来分隔测试和重试。您必须将
Allure.parameter
调用从设置方法移至测试主体。
如果所有参数数据都可作为系统属性,您可以考虑使用 Allure Lifecycle Listener API 自动向所有测试用例添加参数:
import io.qameta.allure.listener.TestLifecycleListener;
import io.qameta.allure.model.TestResult;
import io.qameta.allure.util.ResultsUtils;
import java.util.Objects;
public class ParametersListener implements TestLifecycleListener {
@Override
public void afterTestStart(final TestResult result) {
final String user = System.getProperty("user");
if (Objects.nonNull(user)) {
result.getParameters().add(
ResultsUtils.createParameter(
"Username",
user
)
);
}
}
}
注意:
TestLifecycleListener
需要通过SPI注册