Skip to content

Commit 69f19db

Browse files
committed
Used TestNG DataProvider to do MxN parallelisation
1 parent f43d76e commit 69f19db

30 files changed

Lines changed: 643 additions & 1190 deletions

pom.xml

Lines changed: 153 additions & 386 deletions
Large diffs are not rendered by default.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package browserstack;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
import org.testng.annotations.AfterClass;
8+
import org.testng.annotations.BeforeClass;
9+
import org.testng.annotations.DataProvider;
10+
import org.testng.annotations.Test;
11+
12+
import browserstack.driverconfig.Platform;
13+
import browserstack.driverconfig.WebDriverFactory;
14+
import browserstack.providers.ManagedWebDriver;
15+
import browserstack.providers.WebDriverManager;
16+
import io.cucumber.testng.FeatureWrapper;
17+
import io.cucumber.testng.PickleWrapper;
18+
import io.cucumber.testng.TestNGCucumberRunner;
19+
20+
/**
21+
* Created with IntelliJ IDEA.
22+
*
23+
* @author Anirudha Khanna
24+
*/
25+
public class RunWebDriverCucumberTests {
26+
27+
private TestNGCucumberRunner testNGCucumberRunner;
28+
private WebDriverFactory webDriverFactory;
29+
private WebDriverManager webDriverManager;
30+
31+
@BeforeClass(alwaysRun = true)
32+
public void setUpClass() {
33+
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
34+
this.webDriverFactory = WebDriverFactory.getInstance();
35+
this.webDriverManager = WebDriverManager.getInstance();
36+
}
37+
38+
@Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios")
39+
public void feature(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper, ManagedWebDriver managedWebDriver) {
40+
managedWebDriver.setTestName(pickleWrapper.getPickle().getName());
41+
webDriverManager.setThreadLocalWebDriver(managedWebDriver);
42+
testNGCucumberRunner.runScenario(pickleWrapper.getPickle());
43+
}
44+
45+
@DataProvider(name = "scenarios", parallel = true)
46+
public Object[][] scenarios() {
47+
List<Object[]> browserScenarioParams = new ArrayList<>();
48+
49+
Object[][] scenarios = testNGCucumberRunner.provideScenarios();
50+
for (Object[] testParams : scenarios) {
51+
for (Platform platform : webDriverFactory.getPlatforms()) {
52+
Object[] newTestParams = Arrays.copyOf(testParams, testParams.length + 1);
53+
ManagedWebDriver managedWebDriver = new ManagedWebDriver(platform, webDriverFactory);
54+
newTestParams[testParams.length] = managedWebDriver;
55+
browserScenarioParams.add(newTestParams);
56+
}
57+
}
58+
return browserScenarioParams.toArray(new Object[0][0]);
59+
}
60+
61+
@AfterClass(alwaysRun = true)
62+
public void tearDownClass() {
63+
if (testNGCucumberRunner == null) {
64+
return;
65+
}
66+
testNGCucumberRunner.finish();
67+
}
68+
69+
}

src/test/java/browserstack/TestRunner.java

Lines changed: 0 additions & 81 deletions
This file was deleted.

src/test/java/browserstack/TestRunner2.java

Lines changed: 0 additions & 96 deletions
This file was deleted.

src/test/java/browserstack/driverconfig/WebDriverFactory.java

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package browserstack.driverconfig;
22

3-
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
3+
import java.io.IOException;
4+
import java.net.MalformedURLException;
5+
import java.net.URL;
6+
import java.nio.file.Paths;
7+
import java.util.Arrays;
8+
import java.util.LinkedHashMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
512
import org.apache.commons.lang3.StringUtils;
613
import org.openqa.selenium.WebDriver;
714
import org.openqa.selenium.chrome.ChromeDriver;
@@ -21,14 +28,8 @@
2128
import org.slf4j.Logger;
2229
import org.slf4j.LoggerFactory;
2330

24-
import java.io.IOException;
25-
import java.net.MalformedURLException;
26-
import java.net.URL;
27-
import java.nio.file.Paths;
28-
import java.util.Arrays;
29-
import java.util.LinkedHashMap;
30-
import java.util.List;
31-
import java.util.Map;
31+
import com.fasterxml.jackson.databind.ObjectMapper;
32+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
3233

3334
public class WebDriverFactory {
3435

@@ -95,25 +96,29 @@ private WebDriverConfiguration parseWebDriverConfig() {
9596
return webDriverConfiguration;
9697
}
9798

98-
public WebDriver createWebDriverForPlatform(Platform platform, String testName, String[] specificCapabilitiesKeys) throws MalformedURLException {
99+
public WebDriver createWebDriverForPlatform(Platform platform, String testName, String[] specificCapabilitiesKeys) {
99100
WebDriver webDriver = null;
100-
Map<String, Object> specificCapabilitiesMap = new LinkedHashMap<>();
101-
if (webDriverConfiguration.getSpecificCapabilities() != null && specificCapabilitiesKeys.length > 0) {
102-
Arrays.stream(specificCapabilitiesKeys)
103-
.forEach(specificCapabilityKey -> webDriverConfiguration
104-
.getSpecificCapabilities()
105-
.getSpecificCapabilities(specificCapabilityKey)
106-
.forEach(caps -> caps.getCapabilityMap().forEach(specificCapabilitiesMap::put)));
107-
}
108-
switch (this.webDriverConfiguration.getDriverType()) {
109-
case onPremDriver:
110-
webDriver = createOnPremWebDriver(platform, specificCapabilitiesMap);
111-
break;
112-
case onPremGridDriver:
113-
webDriver = createOnPremGridWebDriver(platform, specificCapabilitiesMap);
114-
break;
115-
case cloudDriver:
116-
webDriver = createRemoteWebDriver(platform, testName, specificCapabilitiesMap);
101+
try {
102+
Map<String, Object> specificCapabilitiesMap = new LinkedHashMap<>();
103+
if (webDriverConfiguration.getSpecificCapabilities() != null && specificCapabilitiesKeys.length > 0) {
104+
Arrays.stream(specificCapabilitiesKeys)
105+
.forEach(specificCapabilityKey -> webDriverConfiguration
106+
.getSpecificCapabilities()
107+
.getSpecificCapabilities(specificCapabilityKey)
108+
.forEach(caps -> caps.getCapabilityMap().forEach(specificCapabilitiesMap::put)));
109+
}
110+
switch (this.webDriverConfiguration.getDriverType()) {
111+
case onPremDriver:
112+
webDriver = createOnPremWebDriver(platform, specificCapabilitiesMap);
113+
break;
114+
case onPremGridDriver:
115+
webDriver = createOnPremGridWebDriver(platform, specificCapabilitiesMap);
116+
break;
117+
case cloudDriver:
118+
webDriver = createRemoteWebDriver(platform, testName, specificCapabilitiesMap);
119+
}
120+
} catch (Throwable throwable) {
121+
throw new Error(throwable);
117122
}
118123
return webDriver;
119124
}
@@ -126,6 +131,10 @@ public DriverType getDriverType() {
126131
return webDriverConfiguration.getDriverType();
127132
}
128133

134+
public boolean isCloudDriver() {
135+
return webDriverConfiguration.getDriverType() == DriverType.cloudDriver;
136+
}
137+
129138
public List<Platform> getPlatforms() {
130139
return this.webDriverConfiguration.getActivePlatforms();
131140
}
@@ -262,4 +271,4 @@ private String createBuildName(String buildPrefix) {
262271
return buildName + "-" + buildSuffix;
263272
}
264273

265-
}
274+
}

0 commit comments

Comments
 (0)