From 7bde2240c2f6da0dde088e0d6c4861071caa94ef Mon Sep 17 00:00:00 2001 From: Artem Eroshenko Date: Wed, 24 Mar 2021 15:22:08 +0300 Subject: [PATCH 1/5] some changes --- .../src/main/java/io/qameta/allure/testng/AllureTestNg.java | 1 + 1 file changed, 1 insertion(+) diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index 92fb3cfd9..347062c68 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -500,6 +500,7 @@ public void onConfigurationFailure(final ITestResult itr) { startTestCase(itr, parentUuid, uuid); + addClassContainerChild(itr.getMethod().getTestClass(), uuid); // results created for configuration failure should not be considered as test cases. getLifecycle().updateTestCase( uuid, From d03674a1186262023caea53917ac99619d3bde7b Mon Sep 17 00:00:00 2001 From: Artem Eroshenko Date: Sun, 28 Mar 2021 15:36:39 +0300 Subject: [PATCH 2/5] failed fixture container --- .../io/qameta/allure/testng/AllureTestNg.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index 347062c68..c574b8f76 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -15,6 +15,7 @@ */ package io.qameta.allure.testng; +import com.beust.jcommander.internal.Lists; import io.qameta.allure.Allure; import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Flaky; @@ -57,7 +58,6 @@ import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -443,7 +443,7 @@ private String createFakeContainer(final ITestNGMethod method, final Current cur .setName(getQualifiedName(method)) .setStart(System.currentTimeMillis()) .setDescription(method.getDescription()) - .setChildren(Collections.singletonList(current.getUuid())); + .setChildren(Lists.newArrayList(current.getUuid())); getLifecycle().startTestContainer(container); return parentUuid; } @@ -501,6 +501,7 @@ public void onConfigurationFailure(final ITestResult itr) { startTestCase(itr, parentUuid, uuid); addClassContainerChild(itr.getMethod().getTestClass(), uuid); + addTestContainerChild(itr.getTestContext(), uuid); // results created for configuration failure should not be considered as test cases. getLifecycle().updateTestCase( uuid, @@ -732,13 +733,20 @@ private Consumer setStatus(final Status status, final StatusDetails }; } + private void addTestContainerChild(final ITestContext context, final String childUuid) { + this.addChildToContainer(getUniqueUuid(context), childUuid); + } + private void addClassContainerChild(final ITestClass clazz, final String childUuid) { + this.addChildToContainer(classContainerUuidStorage.get(clazz), childUuid); + } + + private void addChildToContainer(final String containerUuid, final String childUuid) { lock.writeLock().lock(); try { - final String parentUuid = classContainerUuidStorage.get(clazz); - if (nonNull(parentUuid)) { + if (nonNull(containerUuid)) { getLifecycle().updateTestContainer( - parentUuid, + containerUuid, container -> container.getChildren().add(childUuid) ); } From bcd5fe1fb9de1b04e8c7bd7f94ef2be4c910884e Mon Sep 17 00:00:00 2001 From: Artem Eroshenko Date: Sun, 28 Mar 2021 15:39:19 +0300 Subject: [PATCH 3/5] rollback changes --- .../src/main/java/io/qameta/allure/testng/AllureTestNg.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index c574b8f76..5c2caeb61 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -15,7 +15,6 @@ */ package io.qameta.allure.testng; -import com.beust.jcommander.internal.Lists; import io.qameta.allure.Allure; import io.qameta.allure.AllureLifecycle; import io.qameta.allure.Flaky; @@ -58,6 +57,7 @@ import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -443,7 +443,7 @@ private String createFakeContainer(final ITestNGMethod method, final Current cur .setName(getQualifiedName(method)) .setStart(System.currentTimeMillis()) .setDescription(method.getDescription()) - .setChildren(Lists.newArrayList(current.getUuid())); + .setChildren(Collections.singletonList(current.getUuid())); getLifecycle().startTestContainer(container); return parentUuid; } From 8b0bbaef7a1f775b8724e6227dcaf33c9778e290 Mon Sep 17 00:00:00 2001 From: Artem Eroshenko Date: Sun, 28 Mar 2021 15:58:07 +0300 Subject: [PATCH 4/5] add before suite --- .../main/java/io/qameta/allure/testng/AllureTestNg.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java index 5c2caeb61..3612b8dd7 100644 --- a/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java +++ b/allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java @@ -500,8 +500,9 @@ public void onConfigurationFailure(final ITestResult itr) { startTestCase(itr, parentUuid, uuid); + addChildToContainer(getUniqueUuid(itr.getTestContext()), uuid); + addChildToContainer(getUniqueUuid(itr.getTestContext().getSuite()), uuid); addClassContainerChild(itr.getMethod().getTestClass(), uuid); - addTestContainerChild(itr.getTestContext(), uuid); // results created for configuration failure should not be considered as test cases. getLifecycle().updateTestCase( uuid, @@ -733,10 +734,6 @@ private Consumer setStatus(final Status status, final StatusDetails }; } - private void addTestContainerChild(final ITestContext context, final String childUuid) { - this.addChildToContainer(getUniqueUuid(context), childUuid); - } - private void addClassContainerChild(final ITestClass clazz, final String childUuid) { this.addChildToContainer(classContainerUuidStorage.get(clazz), childUuid); } From 9282b1543eb3b058e06efdb551c4135f8cb60090 Mon Sep 17 00:00:00 2001 From: Artem Eroshenko Date: Sun, 28 Mar 2021 22:26:22 +0300 Subject: [PATCH 5/5] add test --- .../allure/testng/AllureTestNgTest.java | 28 ++++++++++++++ .../testng/samples/FailedBeforeClass.java | 37 +++++++++++++++++++ .../testng/samples/FailedBeforeMethod.java | 3 ++ .../testng/samples/FailedBeforeSuite.java | 3 ++ .../testng/samples/FailedBeforeTest.java | 3 ++ .../suites/failed-before-class-fixture.xml | 10 +++++ 6 files changed, 84 insertions(+) create mode 100644 allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java create mode 100644 allure-testng/src/test/resources/suites/failed-before-class-fixture.xml diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java index 326189c89..0d6c930a3 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/AllureTestNgTest.java @@ -49,6 +49,7 @@ import java.util.Collection; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -1113,6 +1114,33 @@ public void shouldSupportFactoryOnConstructor() { ); } + @DataProvider(name = "failedFixtures") + public Object[][] failedFixtures() { + return new Object[][]{ + {"suites/failed-before-test-fixture.xml", "beforeTest"}, + {"suites/failed-before-class-fixture.xml", "beforeClass"}, + {"suites/failed-before-suite-fixture.xml", "beforeSuite"} + }; + } + + @Test(dataProvider = "failedFixtures") + @AllureFeatures.Fixtures + public void shouldAddBeforeFixtureToFakeTestResult(final String suite, final String fixture) { + System.out.println(suite); + System.out.println(fixture); + final AllureResults results = runTestNgSuites(suite); + final Optional result = results.getTestResults().stream() + .filter(r -> r.getName().contains(fixture)) + .findAny(); + assertThat(result).as("Before failed fake test result").isNotEmpty(); + final Optional befores = results.getTestResultContainers().stream() + .filter(c -> Objects.nonNull(c.getBefores()) && c.getBefores().size() > 0) + .findAny(); + assertThat(result).as("Before failed configuration container").isNotEmpty(); + assertThat(befores.get().getChildren()) + .contains(result.get().getUuid()); + } + @Step("Run testng suites {suites}") private AllureResults runTestNgSuites(final Consumer configurer, final String... suites) { diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java new file mode 100644 index 000000000..f28c7a7d8 --- /dev/null +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeClass.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019 Qameta Software OÜ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.qameta.allure.testng.samples; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import static io.qameta.allure.Allure.step; + +/** + * @author charlie (Dmitry Baev). + */ +public class FailedBeforeClass { + + @BeforeClass + public void beforeClass() throws Exception { + step("before class step"); + throw new RuntimeException(); + } + + @Test + public void skipped() throws Exception { + } +} diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java index b0b1eaa34..85b1326ae 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeMethod.java @@ -18,6 +18,8 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import static io.qameta.allure.Allure.step; + /** * @author charlie (Dmitry Baev). */ @@ -25,6 +27,7 @@ public class FailedBeforeMethod { @BeforeMethod public void beforeMethod() throws Exception { + step("before method step"); throw new RuntimeException(); } diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java index c025d019d..f0f10afef 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeSuite.java @@ -18,6 +18,8 @@ import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; +import static io.qameta.allure.Allure.step; + /** * @author charlie (Dmitry Baev). */ @@ -25,6 +27,7 @@ public class FailedBeforeSuite { @BeforeSuite public void beforeSuite() throws Exception { + step("before suite step"); throw new RuntimeException(); } diff --git a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java index e4964f946..0e57ae2d3 100644 --- a/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java +++ b/allure-testng/src/test/java/io/qameta/allure/testng/samples/FailedBeforeTest.java @@ -18,6 +18,8 @@ import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; +import static io.qameta.allure.Allure.step; + /** * @author charlie (Dmitry Baev). */ @@ -25,6 +27,7 @@ public class FailedBeforeTest { @BeforeTest public void beforeTest() throws Exception { + step("before test step"); throw new RuntimeException(); } diff --git a/allure-testng/src/test/resources/suites/failed-before-class-fixture.xml b/allure-testng/src/test/resources/suites/failed-before-class-fixture.xml new file mode 100644 index 000000000..74377bcad --- /dev/null +++ b/allure-testng/src/test/resources/suites/failed-before-class-fixture.xml @@ -0,0 +1,10 @@ + + + + + + + + + +