Skip to content

Commit ac8cd55

Browse files
committed
#187: Add support for Scenario outlines custom name strategies
1 parent 28ee36e commit ac8cd55

File tree

4 files changed

+49
-4
lines changed

4 files changed

+49
-4
lines changed

src/main/java/com/github/invictum/reportportal/ReportIntegrationConfig.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.invictum.reportportal;
22

3-
3+
import com.github.invictum.reportportal.recorder.DefaultBddOutlineTestNameTransformer;
4+
import com.github.invictum.reportportal.recorder.TestNameTransformer;
45
import net.serenitybdd.annotations.Narrative;
56

67
import java.util.Objects;
@@ -20,6 +21,7 @@ public class ReportIntegrationConfig {
2021

2122
private LogsPreset preset = LogsPreset.DEFAULT;
2223
private Function<Narrative, String> classNarrativeFormatter = n -> String.join("\n", n.text());
24+
private TestNameTransformer testNameTransformer = new DefaultBddOutlineTestNameTransformer();
2325
boolean harvestSeleniumLogs = false;
2426
boolean truncateNames = false;
2527

@@ -57,6 +59,18 @@ public ReportIntegrationConfig useClassNarrativeFormatter(Function<Narrative, St
5759
return this;
5860
}
5961

62+
/**
63+
* Overrides default test name, passed from Serenity, with custom logic.
64+
*/
65+
public ReportIntegrationConfig useTestNameTransformer(TestNameTransformer testNameTransformer) {
66+
this.testNameTransformer = testNameTransformer;
67+
return this;
68+
}
69+
70+
public TestNameTransformer getTestNameTransformer() {
71+
return testNameTransformer;
72+
}
73+
6074
/**
6175
* Option allows to enable or disable selenium based logs harvesting
6276
* Designed to be used in conjunction with {@link com.github.invictum.reportportal.log.unit.Selenium} log unit

src/main/java/com/github/invictum/reportportal/recorder/BddDataDriven.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import net.thucydides.model.domain.TestOutcome;
1010
import net.thucydides.model.domain.TestStep;
1111

12-
import java.util.Arrays;
12+
import java.util.List;
1313

1414
/**
1515
* Recorder aware of parameterized BDD style test specific handling
@@ -32,16 +32,17 @@ public void record(TestOutcome out) {
3232
.withDescription(out.getUserStory().getNarrative())
3333
.build();
3434
Maybe<String> id = suiteStorage.start(out.getUserStory().getId(), () -> launch.startTestItem(startStory));
35+
TestNameTransformer testNameTransformer = ReportIntegrationConfig.get().getTestNameTransformer();
3536
// Start test
3637
StartTestItemRQ startScenario = new StartEventBuilder(ItemType.STEP)
37-
.withName(out.getName())
38+
.withName(testNameTransformer.transformName(out, last))
3839
.withStartTime(currentTest.getStartTime())
3940
.withParameters(out.getDataTable().row(last))
4041
.withTags(out.getTags())
4142
.build();
4243
Maybe<String> testId = launch.startTestItem(id, startScenario);
4344
// Steps
44-
proceedSteps(testId, Arrays.asList(currentTest));
45+
proceedSteps(testId, List.of(currentTest));
4546
// Stop test
4647
FinishTestItemRQ finishScenario = new FinishEventBuilder()
4748
.withStatus(Status.mapTo(currentTest.getResult()))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.github.invictum.reportportal.recorder;
2+
3+
import net.thucydides.model.domain.TestOutcome;
4+
5+
/**
6+
* Default implementation of name as seen in Serenity.
7+
*/
8+
public class DefaultBddOutlineTestNameTransformer implements TestNameTransformer {
9+
10+
@Override
11+
public String transformName(TestOutcome testOutcome, int scenarioIndex) {
12+
return testOutcome.getName();
13+
}
14+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.invictum.reportportal.recorder;
2+
3+
import net.thucydides.model.domain.TestOutcome;
4+
5+
/**
6+
* Allows to transform particular test name in ReportPortal according to specific user requirements.
7+
*/
8+
public interface TestNameTransformer {
9+
10+
/**
11+
* @param testOutcome original test data
12+
* @param scenarioIndex index of scenario which is being reported
13+
* @return transformed test name
14+
*/
15+
String transformName(TestOutcome testOutcome, int scenarioIndex);
16+
}

0 commit comments

Comments
 (0)