5757import static io .qameta .allure .util .ResultsUtils .createLabel ;
5858import static io .qameta .allure .util .ResultsUtils .createLink ;
5959import static io .qameta .allure .util .ResultsUtils .createParameter ;
60+ import static io .qameta .allure .util .ResultsUtils .md5 ;
6061
6162/**
6263 * @author charlie (Dmitry Baev).
@@ -89,19 +90,22 @@ public AllureKarate(final AllureLifecycle lifecycle) {
8990 public boolean beforeScenario (final ScenarioRuntime sr ) {
9091 final Feature feature = sr .featureRuntime .result .getFeature ();
9192 final String featureName = feature .getName ();
92- final String featureNameQualified = feature .getPackageQualifiedName ();
93+ final String featureNameQualified = feature .getResource (). getRelativePath ();
9394 final Scenario scenario = sr .scenario ;
94- final String scenarioName = scenario .getName ();
9595
9696 final String uuid = UUID .randomUUID ().toString ();
9797 sr .magicVariables .put (ALLURE_UUID , uuid );
9898
99+ final String nameOrLine = getName (scenario , String .valueOf (scenario .getLine ()));
100+ final String testCaseId = md5 (String .format ("%s:%s" , featureNameQualified , nameOrLine ));
101+ final String fullName = String .format ("%s:%d" , featureNameQualified , scenario .getLine ());
99102 final TestResult result = new TestResult ()
100103 .setUuid (uuid )
101- .setFullName (String . format ( "%s | %s" , featureNameQualified , scenarioName ) )
102- .setName (scenarioName )
104+ .setFullName (fullName )
105+ .setName (getName ( scenario , fullName ) )
103106 .setDescription (scenario .getDescription ())
104- .setTestCaseId (scenario .getUniqueId ())
107+ .setTestCaseId (testCaseId )
108+ .setHistoryId (md5 (scenario .getUniqueId ()))
105109 .setStage (Stage .RUNNING );
106110
107111 final List <String > labels = sr .tags .getTags ();
@@ -119,6 +123,15 @@ public boolean beforeScenario(final ScenarioRuntime sr) {
119123 return true ;
120124 }
121125
126+ private static String getName (final Scenario scenario , final String defaultValue ) {
127+ if (Objects .isNull (scenario .getName ())) {
128+ return defaultValue ;
129+ }
130+ final boolean blank = scenario .getName ().chars ()
131+ .allMatch (Character ::isWhitespace );
132+ return blank ? defaultValue : scenario .getName ().trim ();
133+ }
134+
122135 @ Override
123136 public void afterScenario (final ScenarioRuntime sr ) {
124137 final String uuid = (String ) sr .magicVariables .get (ALLURE_UUID );
@@ -131,9 +144,9 @@ public void afterScenario(final ScenarioRuntime sr) {
131144 final Status status = !sr .isFailed ()
132145 ? Status .PASSED
133146 : maybeResult
134- .map (ScenarioResult ::getError )
135- .flatMap (ResultsUtils ::getStatus )
136- .orElse (null );
147+ .map (ScenarioResult ::getError )
148+ .flatMap (ResultsUtils ::getStatus )
149+ .orElse (null );
137150
138151 final StatusDetails statusDetails = maybeResult
139152 .map (ScenarioResult ::getError )
@@ -193,9 +206,9 @@ public void afterStep(final StepResult result,
193206 final Status status = !stepResult .isFailed ()
194207 ? Status .PASSED
195208 : Optional .of (stepResult )
196- .map (Result ::getError )
197- .flatMap (ResultsUtils ::getStatus )
198- .orElse (null );
209+ .map (Result ::getError )
210+ .flatMap (ResultsUtils ::getStatus )
211+ .orElse (null );
199212
200213 final StatusDetails statusDetails = Optional .of (stepResult )
201214 .map (Result ::getError )
@@ -209,8 +222,8 @@ public void afterStep(final StepResult result,
209222 lifecycle .stopStep (uuid );
210223
211224 if (stepResult .isFailed ()
212- && sr .engine .getConfig ().getDriverOptions () != null
213- && (Boolean ) sr .engine .getConfig ().getDriverOptions ().get ("screenshotOnFailure" )
225+ && sr .engine .getConfig ().getDriverOptions () != null
226+ && (Boolean ) sr .engine .getConfig ().getDriverOptions ().get ("screenshotOnFailure" )
214227 ) {
215228 addToStepsAndTcUuids (uuid , lifecycle .getCurrentTestCase ().get ());
216229 addToStepAndUuids (uuid , step );
0 commit comments