有谁知道,如何使用 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。
也许可以,但是你不应该。你打破了测试的概念。测试是通过或失败并带有失败描述的测试。这不是会部分失败的事情。
当您编写测试时,您应该只包含那些彼此绑定的断言。就像如果第一个断言失败,那么您的功能根本不需要第二个断言。这意味着如果您有彼此不依赖的断言 - 您最好制定几个测试方法,它们将完全分开并分别失败。
简而言之,测试在步骤失败后不应继续,仅此而已。否则——这是一个糟糕的测试。
附注这就是 JUnit 不允许软断言的原因。
P.P.S 如果您真的真的需要检查所有三件事 - 可能的解决方法是使用 ErrorCollector。
您正在寻找的方法称为“软断言”。 如果您使用 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;
我是自动测试新手,不确定这是否是一个好的做法,但我遇到了一个测试脚本,它派上了用场。我做了一个测试,只需循环浏览页码即可检查每个页面上的产品名称和价格。