Skip to content

Commit 0c22d7b

Browse files
authored
add host and thread labels for junit platform tests (via #260)
1 parent 276a842 commit 0c22d7b

6 files changed

Lines changed: 123 additions & 34 deletions

File tree

allure-junit-platform/src/main/java/io/qameta/allure/junitplatform/AllureJunitPlatform.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import static io.qameta.allure.model.Status.FAILED;
2828
import static io.qameta.allure.model.Status.PASSED;
2929
import static io.qameta.allure.model.Status.SKIPPED;
30+
import static io.qameta.allure.util.ResultsUtils.getHostName;
31+
import static io.qameta.allure.util.ResultsUtils.getThreadName;
3032
import static java.nio.charset.StandardCharsets.UTF_8;
3133

3234
/**
@@ -39,7 +41,10 @@ public class AllureJunitPlatform implements TestExecutionListener {
3941
private static final String TAG = "tag";
4042
private static final String SUITE = "suite";
4143
private static final String PACKAGE = "package";
42-
44+
private static final String THREAD = "thread";
45+
private static final String HOST = "host";
46+
private static final String CLASS_NAME = "className";
47+
private static final String METHOD_NAME = "methodName";
4348

4449
private final ThreadLocal<String> tests
4550
= InheritableThreadLocal.withInitial(() -> UUID.randomUUID().toString());
@@ -72,11 +77,10 @@ public void executionStarted(final TestIdentifier testIdentifier) {
7277
.setHistoryId(getHistoryId(testIdentifier))
7378
.setStage(Stage.RUNNING);
7479

75-
methodSource.ifPresent(source -> {
76-
result.setDescription(getDescription(source));
77-
result.getLabels().add(new Label().setName(SUITE).setValue(getSuite(source)));
78-
result.getLabels().add(new Label().setName(PACKAGE).setValue(source.getClassName()));
79-
});
80+
result.getLabels().add(new Label().setName(THREAD).setValue(getThreadName()));
81+
result.getLabels().add(new Label().setName(HOST).setValue(getHostName()));
82+
83+
methodSource.ifPresent(source -> updateResultFromSource(result, source));
8084

8185
getLifecycle().scheduleTestCase(result);
8286
getLifecycle().startTestCase(uuid);
@@ -94,15 +98,14 @@ public void executionSkipped(final TestIdentifier testIdentifier, final String r
9498
.setHistoryId(getHistoryId(testIdentifier))
9599
.setStage(Stage.RUNNING);
96100

101+
result.getLabels().add(new Label().setName(THREAD).setValue(getThreadName()));
102+
result.getLabels().add(new Label().setName(HOST).setValue(getHostName()));
103+
97104
testIdentifier
98105
.getSource()
99106
.filter(MethodSource.class::isInstance)
100107
.map(MethodSource.class::cast)
101-
.ifPresent(source -> {
102-
result.setDescription(getDescription(source));
103-
result.getLabels().add(new Label().setName(SUITE).setValue(getSuite(source)));
104-
result.getLabels().add(new Label().setName(PACKAGE).setValue(source.getClassName()));
105-
});
108+
.ifPresent(source -> updateResultFromSource(result, source));
106109

107110
getLifecycle().scheduleTestCase(result);
108111
getLifecycle().startTestCase(uuid);
@@ -151,6 +154,19 @@ protected Status getStatus(final Throwable throwable) {
151154
return ResultsUtils.getStatus(throwable).orElse(FAILED);
152155
}
153156

157+
protected void updateResultFromSource(final TestResult result, final MethodSource source) {
158+
result.setFullName(String.format(
159+
"%s.%s",
160+
source.getClassName(),
161+
source.getMethodName()
162+
));
163+
result.setDescription(getDescription(source));
164+
result.getLabels().add(new Label().setName(CLASS_NAME).setValue(source.getClassName()));
165+
result.getLabels().add(new Label().setName(METHOD_NAME).setValue(source.getMethodName()));
166+
result.getLabels().add(new Label().setName(SUITE).setValue(getSuite(source)));
167+
result.getLabels().add(new Label().setName(PACKAGE).setValue(source.getClassName()));
168+
}
169+
154170
private List<Label> getTags(final TestIdentifier testIdentifier) {
155171
return testIdentifier.getTags().stream()
156172
.map(tag -> new Label().setName(TAG).setValue(tag.getName()))

allure-junit-platform/src/test/java/io/qameta/allure/junitplatform/AllureJunitPlatformTest.java

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package io.qameta.allure.junitplatform;
22

3+
import io.qameta.allure.Allure;
34
import io.qameta.allure.AllureLifecycle;
5+
import io.qameta.allure.Epic;
46
import io.qameta.allure.aspects.AttachmentsAspects;
57
import io.qameta.allure.aspects.StepsAspects;
68
import io.qameta.allure.junitplatform.features.BrokenTests;
79
import io.qameta.allure.junitplatform.features.DisabledTests;
810
import io.qameta.allure.junitplatform.features.DynamicTests;
911
import io.qameta.allure.junitplatform.features.FailedTests;
12+
import io.qameta.allure.junitplatform.features.OneTest;
1013
import io.qameta.allure.junitplatform.features.ParameterisedTests;
1114
import io.qameta.allure.junitplatform.features.PassedTests;
1215
import io.qameta.allure.junitplatform.features.SkippedTests;
@@ -29,6 +32,7 @@
2932
import org.junit.platform.engine.discovery.DiscoverySelectors;
3033
import org.junit.platform.launcher.Launcher;
3134
import org.junit.platform.launcher.LauncherDiscoveryRequest;
35+
import org.junit.platform.launcher.core.LauncherConfig;
3236
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
3337
import org.junit.platform.launcher.core.LauncherFactory;
3438

@@ -38,10 +42,13 @@
3842
import static io.qameta.allure.junitplatform.features.TaggedTests.CLASS_TAG;
3943
import static io.qameta.allure.junitplatform.features.TaggedTests.METHOD_TAG;
4044
import static org.assertj.core.api.Assertions.assertThat;
45+
import static org.assertj.core.api.Assertions.tuple;
4146

4247
/**
4348
* @author charlie (Dmitry Baev).
4449
*/
50+
@SuppressWarnings("unchecked")
51+
@Epic("Allure Junit Platform Integration")
4552
public class AllureJunitPlatformTest {
4653

4754
private AllureResultsWriterStub results;
@@ -52,8 +59,42 @@ public class AllureJunitPlatformTest {
5259
void setUp() {
5360
this.results = new AllureResultsWriterStub();
5461
this.lifecycle = new AllureLifecycle(results);
55-
StepsAspects.setLifecycle(lifecycle);
56-
AttachmentsAspects.setLifecycle(lifecycle);
62+
}
63+
64+
@Test
65+
void shouldSetFullName() {
66+
runClasses(PassedTests.class);
67+
final List<TestResult> testResults = results.getTestResults();
68+
assertThat(testResults)
69+
.extracting(TestResult::getFullName)
70+
.containsExactlyInAnyOrder(
71+
"io.qameta.allure.junitplatform.features.PassedTests.second",
72+
"io.qameta.allure.junitplatform.features.PassedTests.first",
73+
"io.qameta.allure.junitplatform.features.PassedTests.third"
74+
);
75+
}
76+
77+
@Test
78+
void shouldSetExecutionLabels() {
79+
runClasses(OneTest.class);
80+
final List<TestResult> testResults = results.getTestResults();
81+
assertThat(testResults)
82+
.flatExtracting(TestResult::getLabels)
83+
.extracting(Label::getName)
84+
.contains("host", "thread");
85+
}
86+
87+
@Test
88+
void shouldSetSourceLabels() {
89+
runClasses(OneTest.class);
90+
final List<TestResult> testResults = results.getTestResults();
91+
assertThat(testResults)
92+
.flatExtracting(TestResult::getLabels)
93+
.extracting(Label::getName, Label::getValue)
94+
.contains(
95+
tuple("methodName", "single"),
96+
tuple("className", "io.qameta.allure.junitplatform.features.OneTest")
97+
);
5798
}
5899

59100
@Test
@@ -288,7 +329,22 @@ private void runClasses(Class<?>... classes) {
288329
.selectors(classSelectors)
289330
.build();
290331

291-
final Launcher launcher = LauncherFactory.create();
292-
launcher.execute(request, new AllureJunitPlatform(lifecycle));
332+
final LauncherConfig config = LauncherConfig.builder()
333+
.enableTestExecutionListenerAutoRegistration(false)
334+
.addTestExecutionListeners(new AllureJunitPlatform(lifecycle))
335+
.build();
336+
final Launcher launcher = LauncherFactory.create(config);
337+
338+
final AllureLifecycle defaultLifecycle = Allure.getLifecycle();
339+
try {
340+
Allure.setLifecycle(lifecycle);
341+
StepsAspects.setLifecycle(lifecycle);
342+
AttachmentsAspects.setLifecycle(lifecycle);
343+
launcher.execute(request);
344+
} finally {
345+
Allure.setLifecycle(defaultLifecycle);
346+
StepsAspects.setLifecycle(defaultLifecycle);
347+
AttachmentsAspects.setLifecycle(defaultLifecycle);
348+
}
293349
}
294350
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.qameta.allure.junitplatform.features;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
/**
6+
* @author jkttt on 05.07.17.
7+
*/
8+
public class OneTest {
9+
10+
@Test
11+
void single() {
12+
}
13+
}
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
11
package io.qameta.allure.junitplatform.features;
22

3-
import io.qameta.allure.Step;
3+
import io.qameta.allure.Allure;
4+
import io.qameta.allure.model.Status;
5+
import io.qameta.allure.model.StepResult;
46
import org.junit.jupiter.api.Test;
57

8+
import java.util.UUID;
9+
610
/**
711
* @author charlie (Dmitry Baev).
812
*/
913
public class TestsWithSteps {
1014

1115
@Test
1216
void testWithSteps() {
13-
first();
14-
second();
15-
third();
16-
}
17-
18-
@Step
19-
void first() {
20-
}
21-
22-
@Step
23-
void second() {
17+
step("first");
18+
step("second");
19+
step("third");
2420
}
2521

26-
@Step
27-
void third() {
22+
protected final void step(final String stepName) {
23+
final String uuid = UUID.randomUUID().toString();
24+
try {
25+
Allure.getLifecycle().startStep(uuid, new StepResult()
26+
.setName(stepName)
27+
.setStatus(Status.PASSED)
28+
);
29+
} finally {
30+
Allure.getLifecycle().stopStep(uuid);
31+
}
2832
}
2933
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.qameta.allure.junitplatform.AllureJunitPlatform

build.gradle.kts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,12 @@ configure(subprojects) {
7474
apply(from = "$gradleScriptDir/maven-publish.gradle")
7575

7676
configure<DependencyManagementExtension> {
77+
imports {
78+
mavenBom("com.fasterxml.jackson:jackson-bom:2.9.7")
79+
mavenBom("org.junit:junit-bom:5.3.1")
80+
}
7781
dependencies {
7882
dependency("com.codeborne:selenide:4.12.2")
79-
dependency("com.fasterxml.jackson.core:jackson-databind:2.9.7")
8083
dependency("com.github.tomakehurst:wiremock:2.18.0")
8184
dependency("com.google.inject:guice:4.2.0")
8285
dependency("com.google.testing.compile:compile-testing:0.15")
@@ -103,10 +106,6 @@ configure(subprojects) {
103106
dependency("org.jboss.resteasy:resteasy-client:3.6.1.Final")
104107
dependency("org.jooq:joor-java-8:0.9.9")
105108
dependency("org.junit-pioneer:junit-pioneer:0.2.2")
106-
dependency("org.junit.jupiter:junit-jupiter-api:5.2.0")
107-
dependency("org.junit.jupiter:junit-jupiter-engine:5.2.0")
108-
dependency("org.junit.jupiter:junit-jupiter-params:5.2.0")
109-
dependency("org.junit.platform:junit-platform-launcher:1.2.0")
110109
dependency("org.mock-server:mockserver-netty:5.4.1")
111110
dependency("org.mockito:mockito-core:2.19.0")
112111
dependency("org.slf4j:slf4j-api:1.7.25")

0 commit comments

Comments
 (0)