@Step能在《魅力》中充满活力吗?



>我有一个用于参数化JUnit 5和Selenium测试的Allure步骤方法,该方法接收一个测试数据对象,其中包含参数化测试的所有测试数据。

此主要步骤方法调用其他子步骤方法。仅当子步骤的参数不为 null 时,才会执行子步骤。因此,我可以通过测试数据本身来控制测试执行。我在子步骤中检查 null 而不是在主步骤方法中,因为可以从任何测试中调用子步骤(我不想重复自己(。

例:

@Step
public void trade(TradeData data) {
enterAmount(data.getAmount());
enterCurrency(data.getCurrency());
}
@Step
public void enterAmount(String amount) {
if (amount != null) {
// do something
}
}
@Step
public void enterCurrency(String currency) {
if (currency != null) {
// do something
}
}

在 Allure 测试报告中,似乎始终执行子步骤。

对于上面的示例,它始终如下所示:

贸易

输入金额

输入货币

只有当我单击子步骤并看到参数为 null 时,我才能推断它没有执行。这并不理想。

相反,我希望报告仅显示已执行的步骤。让我们假设只有 ̈amount ̈ 为空,那么它看起来像:

贸易

输入货币

我可以想象,如果不使用不灵活的@Step注释,而是在 if 块中调用 Allure 方法来声明要被视为步骤的方法(伪代码(,这是可能的:

public void enterAmount(String amount) {
if (amount != null) {
Allure.context().step();
// do something
}
}

但是,这可以通过诱惑以某种方式实现吗?我更喜欢一种简单的方法,而不是非常复杂的解决方法。

您可以创建将使用 Allure 生命周期 API 创建步骤的帮助程序方法:

public static void step(String name, Runnable runnable) {
String uuid = UUID.randomUUID().toString();
StepResult result = new StepResult()
.withName(name);
Allure.getLifecycle().startStep(uuid, result);
try {
runnable.run();
Allure.getLifecycle().updateStep(uuid, s -> s.withStatus(Status.PASSED));
} catch (Throwable e) {
Allure.getLifecycle().updateStep(uuid, s -> s
.withStatus(ResultsUtils.getStatus(e).orElse(Status.BROKEN))
.withStatusDetails(ResultsUtils.getStatusDetails(e).orElse(null)));
throw e;
} finally {
Allure.getLifecycle().stopStep(uuid);
}
}

然后像这样使用它:

public void enterAmount(String amount) {
if (amount != null) {
step("Enter amount", () -> {
//do something
});
}
}

最新更新