Skip to content

Commit 4d1d9cf

Browse files
authored
Merge pull request #2335 from jkeys089/fix-retry-with-setup
fix retry with setup
2 parents b515082 + b95bc4e commit 4d1d9cf

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

karate-core/src/main/java/com/intuit/karate/Suite.java

+6
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.intuit.karate.core.ScenarioCall;
3535
import com.intuit.karate.core.ScenarioResult;
3636
import com.intuit.karate.core.ScenarioRuntime;
37+
import com.intuit.karate.core.Step;
3738
import com.intuit.karate.core.SyncExecutorService;
3839
import com.intuit.karate.core.Tags;
3940
import com.intuit.karate.http.HttpClientFactory;
@@ -55,9 +56,12 @@
5556
import java.util.concurrent.TimeUnit;
5657
import java.util.concurrent.atomic.AtomicBoolean;
5758
import java.util.concurrent.locks.ReentrantLock;
59+
import java.util.stream.Collectors;
5860
import java.util.stream.Stream;
5961
import org.slf4j.LoggerFactory;
6062

63+
import static java.util.function.Predicate.not;
64+
6165
/**
6266
*
6367
* @author pthomas3
@@ -341,6 +345,8 @@ public Stream<ScenarioResult> getScenarioResults() {
341345
}
342346

343347
public ScenarioResult retryScenario(Scenario scenario) {
348+
// remove any "fake" steps that might have been added before retrying
349+
scenario.setSteps(scenario.getSteps().stream().filter(not(Step::isFake)).collect(Collectors.toList()));
344350
FeatureRuntime fr = FeatureRuntime.of(this, new FeatureCall(scenario.getFeature()));
345351
ScenarioRuntime runtime = new ScenarioRuntime(fr, scenario);
346352
runtime.run();

karate-core/src/main/java/com/intuit/karate/core/Step.java

+4
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,10 @@ public void setComments(List<String> comments) {
223223
this.comments = comments;
224224
}
225225

226+
public boolean isFake() {
227+
return getIndex() == -1;
228+
}
229+
226230
@Override
227231
public String toString() {
228232
String temp = prefix + " " + text;

karate-core/src/test/java/com/intuit/karate/core/retry/RetryTest.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,22 @@ void testParallel() {
3636
assertFalse(sr.isFailed());
3737
results = results.getSuite().updateResults(sr);
3838
assertEquals(0, results.getFailCount());
39-
}
39+
}
40+
41+
@Test
42+
void testSetup() {
43+
System.setProperty("CURRENT_VALUE", "a");
44+
Results results = Runner.path("classpath:com/intuit/karate/core/retry/retry-with-setup.feature").parallel(1);
45+
46+
System.setProperty("CURRENT_VALUE", "b");
47+
for (ScenarioResult scenarioResult : results.getScenarioResults().collect(Collectors.toList())) {
48+
if (scenarioResult.isFailed()) {
49+
ScenarioResult retryScenarioResult = results.getSuite().retryScenario(scenarioResult.getScenario());
50+
results = results.getSuite().updateResults(retryScenarioResult);
51+
}
52+
}
53+
54+
assertEquals(0, results.getFailCount(), results.getErrorMessages());
55+
}
4056

4157
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Feature: Retry with setup
2+
3+
@setup
4+
Scenario: Setup
5+
* def data = [{ value: 'b' }, { value: 'a' }]
6+
7+
Scenario Outline: Scenario
8+
* def currentValGetter = function () { return java.lang.System.getProperty('CURRENT_VALUE') }
9+
* assert currentValGetter() == value
10+
11+
Examples:
12+
| karate.setup().data |

0 commit comments

Comments
 (0)