Allure框架:如何在测试方法中仅一步失败

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

有谁知道,如何使用 Allure 框架在测试中仅失败一个步骤并允许测试完成所有步骤!

例如,我有一个测试,其中包含 3 个测试步骤,每个步骤都有自己的断言。它可以看起来像这样:

@Test
public void test() 
    step1();
    step2();
    step3();
}

@Step
public void step1() {
    Assert.assertEquals(1, 0);
}

@Step
public void step2() {
    Assert.assertEquals(1, 1);
}

@Step
public void step3() {
    Assert.assertEquals(2, 2);
}

当步骤1失败时,测试方法也会失败。是否有可能用自己的断言完成另外两个步骤而不导致测试失败?就像 TestNG 对 SoftAssert 所做的那样。 (org.testng.asserts.SoftAssert)

因此,我希望看到一份报告,我们可以在其中看到所有损坏和通过的测试步骤(在一种测试方法中),就像 1.4.9 Allure 版本中那样 https://github.com/allure-framework/allure图片报告上的-core/releases/tag/allure-core-1.4.9

unit-testing frameworks report automated-tests allure
2个回答
1
投票

也许可以,但是你不应该。你打破了测试的概念。测试是通过或失败并带有失败描述的测试。这不是会部分失败的事情。

当您编写测试时,您应该只包含那些彼此绑定的断言。就像如果第一个断言失败,那么您的功能根本不需要第二个断言。这意味着如果您有彼此不依赖的断言 - 您最好制定几个测试方法,它们将完全分开并分别失败。

简而言之,测试在步骤失败后不应继续,仅此而已。否则——这是一个糟糕的测试。

附注这就是 JUnit 不允许软断言的原因。

P.P.S 如果您真的真的需要检查所有三件事 - 可能的解决方法是使用 ErrorCollector


0
投票

您正在寻找的方法称为“软断言”。 如果您使用 TestNG,您可以这样做:

SoftAssert softAssert=new SoftAssert();
softAssert.assertEquals(true, myBoolean, "comment");
softAssert.assertEquals(1, myNumber, "comment");
softAssert.assertAll();

对于 JUnit5:

Assertions.assertAll(
   () -> assertTrue(myBoolean, "myExplanationMessage"),
   () -> assertNotNull(myObject, "myExplanationMessage")
);

如果您正在使用 Selenide 框架测试 UI,并希望一些类似

SelenideElement.should()
的方法不中断测试,您可以这样做:

Configuration.assertionMode = AssertionMode.SOFT;
.....
<your should(Condition)-like methods, which should not stop the test execution>
.....
Configuration.assertionMode = AssertionMode.STRICT;

我是自动测试新手,不确定这是否是一个好的做法,但我遇到了一个测试脚本,它派上了用场。我做了一个测试,只需循环浏览页码即可检查每个页面上的产品名称和价格。

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