Skip to content

Commit eb342f5

Browse files
ehborisovbaev
authored andcommitted
fix parallel methods test, fix stub writer, fix labels extracting (via allure-framework#7)
1 parent 865db22 commit eb342f5

4 files changed

Lines changed: 50 additions & 24 deletions

File tree

‎allure-testng/src/main/java/io/qameta/allure/testng/AllureTestNg.java‎

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.testng.ITestListener;
2222
import org.testng.ITestNGMethod;
2323
import org.testng.ITestResult;
24+
import org.testng.xml.XmlSuite;
25+
import org.testng.xml.XmlTest;
2426

2527
import java.lang.management.ManagementFactory;
2628
import java.math.BigInteger;
@@ -33,6 +35,7 @@
3335
import java.util.List;
3436
import java.util.Map;
3537
import java.util.Objects;
38+
import java.util.Optional;
3639
import java.util.UUID;
3740
import java.util.function.Consumer;
3841
import java.util.stream.Collectors;
@@ -130,6 +133,9 @@ public void onFinish(ITestContext context) {
130133
public void onTestStart(ITestResult testResult) {
131134
LOGGER.info("onTestStart of " + testResult.getName());
132135
Current current = currentTestResult.get();
136+
if (current.isStarted()) {
137+
current = refreshContext();
138+
}
133139
current.test();
134140
String parentUuid = getUniqueUuid(testResult.getTestContext());
135141
ITestNGMethod method = testResult.getMethod();
@@ -138,8 +144,8 @@ public void onTestStart(ITestResult testResult) {
138144
label("package", testClass.getName()),
139145
label("testClass", testClass.getName()),
140146
label("testMethod", method.getMethodName()),
141-
label("parentSuite", testClass.getXmlTest().getSuite().getName()),
142-
label("suite", testClass.getXmlTest().getName()),
147+
label("parentSuite", safeExtractSuiteName(testClass)),
148+
label("suite", safeExtractTestTag(testClass)),
143149
label("host", HOST),
144150
label("thread", getThreadName())
145151
);
@@ -171,15 +177,14 @@ public void onTestFailure(ITestResult result) {
171177
Current current = currentTestResult.get();
172178

173179
if (current.isAfter()) {
174-
currentTestResult.remove();
175-
current = currentTestResult.get();
180+
current = refreshContext();
176181
}
177182

178183
//if test has failed without any setup
179184
if (!current.isStarted()) {
180-
onTestStart(result);
181-
currentTestResult.remove();
185+
createTestResutForUnexecutedTest(result);
182186
}
187+
183188
current.after();
184189
Throwable throwable = result.getThrowable();
185190
Status status = getStatus(throwable).orElse(Status.BROKEN);
@@ -196,14 +201,12 @@ public void onTestSkipped(ITestResult result) {
196201

197202
//test is being skipped as dependent on failed test, closing context for previous test here
198203
if (current.isAfter()) {
199-
currentTestResult.remove();
200-
current = currentTestResult.get();
204+
current = refreshContext();
201205
}
202206

203207
//if test was skipped without any setup
204208
if (!current.isStarted()) {
205-
onTestStart(result);
206-
currentTestResult.remove();
209+
createTestResutForUnexecutedTest(result);
207210
}
208211
current.after();
209212
StatusDetails details = getStatusDetails(result.getThrowable()).orElse(null);
@@ -212,6 +215,11 @@ public void onTestSkipped(ITestResult result) {
212215
getLifecycle().writeTestCase(current.getUuid());
213216
}
214217

218+
private void createTestResutForUnexecutedTest(ITestResult result) {
219+
onTestStart(result);
220+
currentTestResult.remove();
221+
}
222+
215223
@Override
216224
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
217225
//do nothing
@@ -368,6 +376,16 @@ private MessageDigest getMessageDigest() {
368376
}
369377
}
370378

379+
private static String safeExtractSuiteName(ITestClass testClass) {
380+
Optional<XmlTest> xmlTest = Optional.ofNullable(testClass.getXmlTest());
381+
return xmlTest.map(XmlTest::getSuite).map(XmlSuite::getName).orElse("Undefined suite");
382+
}
383+
384+
private static String safeExtractTestTag(ITestClass testClass) {
385+
Optional<XmlTest> xmlTest = Optional.ofNullable(testClass.getXmlTest());
386+
return xmlTest.map(XmlTest::getName).orElse("Undefined test tag");
387+
}
388+
371389
private Label label(String name, String value) {
372390
return new Label().withName(name).withValue(value);
373391
}
@@ -411,6 +429,11 @@ private Consumer<TestResult> setStatus(Status status, StatusDetails details) {
411429
.withStatusDetails(details);
412430
}
413431

432+
private Current refreshContext() {
433+
currentTestResult.remove();
434+
return currentTestResult.get();
435+
}
436+
414437
private static class Current {
415438
private final String uuid;
416439
private CurrentStage currentStage;

‎allure-testng/src/test/java/io/qameta/allure/samples/ParallelMethods.java‎

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.testng.annotations.Test;
1414

1515
import java.io.IOException;
16+
import java.util.stream.IntStream;
1617

1718
/**
1819
* @author ehborisov
@@ -31,7 +32,8 @@ public void beforeTest() {
3132
}
3233

3334
@BeforeTest
34-
public void beforeTest2() {}
35+
public void beforeTest2() {
36+
}
3537

3638
@BeforeSuite
3739
public void beforeSuite2() throws IOException {
@@ -53,16 +55,15 @@ public void test1() throws IOException {
5355
}
5456

5557
@DataProvider(name = "dataProvider")
56-
public Object[][] getTestData() {
57-
return new Object[][]{
58-
{"param11", "param12"},
59-
{"param21", "param22"}
60-
};
58+
public Object[][] provide() {
59+
return IntStream.range(0, 2000)
60+
.mapToObj(i -> new String[]{String.valueOf(i)})
61+
.toArray(Object[][]::new);
6162
}
6263

6364
@Test(dataProvider = "dataProvider")
6465
@DisplayName("Test 2")
65-
public void test2(@Parameter("param1") String param1, @Parameter("param2") String param2) throws IOException {
66+
public void test2(@Parameter("param") String param) throws IOException {
6667
stepSix();
6768
}
6869

‎allure-testng/src/test/java/io/qameta/allure/test/AllureResultsWriterStub.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
import io.qameta.allure.model.TestResultContainer;
66

77
import java.io.InputStream;
8-
import java.util.ArrayList;
98
import java.util.List;
9+
import java.util.concurrent.CopyOnWriteArrayList;
1010

1111
/**
1212
* @author Egor Borisov ehborisov@gmail.com
1313
*/
1414
public class AllureResultsWriterStub implements AllureResultsWriter {
1515

16-
private List<TestResult> testResults = new ArrayList<>();
17-
private List<TestResultContainer> testContainers = new ArrayList<>();
16+
private CopyOnWriteArrayList<TestResult> testResults = new CopyOnWriteArrayList<>();
17+
private CopyOnWriteArrayList<TestResultContainer> testContainers = new CopyOnWriteArrayList<>();
1818

1919
public void write(TestResult testResult) {
2020
testResults.add(testResult);

‎allure-testng/src/test/java/io/qameta/allure/test/FeatureCombinationsTest.java‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
import static java.lang.String.format;
2525
import static org.assertj.core.api.Assertions.assertThat;
26+
import static org.testng.Assert.assertEquals;
27+
import static org.testng.Assert.assertTrue;
2628

2729
/**
2830
* @author Egor Borisov ehborisov@gmail.com
@@ -54,7 +56,7 @@ private void runTestNGSuites(String... suites) {
5456
testNG.run();
5557
}
5658

57-
@Test(enabled = false)
59+
@Test
5860
public void parallelDataProvider() {
5961
runTestNGSuites("suites/parallel-data-provider.xml");
6062
List<TestResult> testResult = results.getTestResults();
@@ -260,9 +262,9 @@ public void parallelMethods() {
260262
List<String> uids = testResults.stream().map(TestResult::getUuid).collect(Collectors.toList());
261263
List<TestResultContainer> testContainers = results.getTestContainers();
262264
assertThat(testResults).as("Unexpected quantity of test case results has been written")
263-
.hasSize(3);
265+
.hasSize(2001);
264266
assertThat(testContainers).as("Unexpected quantity of test containers has been written")
265-
.hasSize(11);
267+
.hasSize(6005);
266268

267269
assertContainersPerMethod(before1, testContainers, uids);
268270
assertContainersPerMethod(before2, testContainers, uids);
@@ -281,7 +283,7 @@ private static void assertContainersPerMethod(String name, List<TestResultContai
281283
.is(singlyMapped)
282284
.flatExtracting(TestResultContainer::getChildren)
283285
.as("Unexpected children for per-method fixtures " + name)
284-
.containsAll(uids);
286+
.containsOnlyElementsOf(uids);
285287
}
286288

287289
@Test

0 commit comments

Comments
 (0)