diff --git a/.gitignore b/.gitignore index 1ef32d1e..767b12c6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,11 @@ local.log .gradle build/ .DS_Store +.classpath +.project +.settings +browserstack.err +gradle +gradlew +gradlew.bat +test-output diff --git a/README.md b/README.md index e9638de0..bf577889 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [TestNG](http://testng.org) Integration with BrowserStack. -Master branch contains **Selenium 3** samples, for **Selenium 4 - W3C protocol** please checkout [selenium-4](https://github.com/browserstack/testng-browserstack/tree/selenium-4) branch +Master branch contains **Selenium 4** samples, for **Selenium 3 - JSON Wire Protocol** please checkout [selenium-3](https://github.com/browserstack/testng-browserstack/tree/selenium-3) branch ![BrowserStack Logo](https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780) @@ -16,9 +16,8 @@ Master branch contains **Selenium 3** samples, for **Selenium 4 - W3C protocol** ### Running your tests -- To run a single test, run `mvn test -P single` +- To run tests, run `mvn test -P parallel` - To run local tests, run `mvn test -P local` -- To run parallel tests, run `mvn test -P parallel` - To run the test suite, run `mvn test -P suite` Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) @@ -34,9 +33,8 @@ Master branch contains **Selenium 3** samples, for **Selenium 4 - W3C protocol** ### Running your tests -- To run a single test, run `gradle singleTest` +- To run tests, run `gradle parallelTest` - To run local tests, run `gradle localTest` -- To run parallel tests, run `gradle parallelTest` - To run the test suite, run `gradle suiteTest` Understand how many parallel sessions you need by using our [Parallel Test Calculator](https://www.browserstack.com/automate/parallel-calculator?ref=github) diff --git a/build.gradle b/build.gradle index bf8cb469..d71c160d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,11 +5,11 @@ plugins { repositories { mavenCentral() } dependencies { - compile 'org.testng:testng:6.9.10' - compile 'commons-io:commons-io:1.3.2' - compile 'org.seleniumhq.selenium:selenium-java:3.12.0' - compile 'com.browserstack:browserstack-local-java:0.1.0' - compile 'com.googlecode.json-simple:json-simple:1.1.1' + implementation 'org.testng:testng:6.9.10' + implementation 'commons-io:commons-io:1.3.2' + implementation 'org.seleniumhq.selenium:selenium-java:3.12.0' + implementation 'com.browserstack:browserstack-local-java:1.0.6' + implementation 'com.googlecode.json-simple:json-simple:1.1.1' } group = 'com.browserstack' diff --git a/config/parallel.testng.xml b/config/parallel.testng.xml index 24c4721f..c887ae7b 100644 --- a/config/parallel.testng.xml +++ b/config/parallel.testng.xml @@ -1,8 +1,8 @@ + - @@ -10,7 +10,6 @@ - @@ -18,7 +17,6 @@ - diff --git a/pom.xml b/pom.xml index ac200e08..d20dbef8 100644 --- a/pom.xml +++ b/pom.xml @@ -54,6 +54,11 @@ org.apache.maven.plugins maven-surefire-plugin 2.18.1 + + + config/parallel.testng.xml + + diff --git a/src/test/java/com/browserstack/BrowserStackTestNGTest.java b/src/test/java/com/browserstack/BrowserStackTestNGTest.java index 81682b30..235597e0 100644 --- a/src/test/java/com/browserstack/BrowserStackTestNGTest.java +++ b/src/test/java/com/browserstack/BrowserStackTestNGTest.java @@ -13,23 +13,56 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; +import org.testng.annotations.*; public class BrowserStackTestNGTest { public WebDriver driver; private Local l; + private static JSONObject config; + private static Map commonCapabilities; + private static String username; + private static String accessKey; + + @BeforeSuite(alwaysRun=true) + @Parameters(value = { "config" }) + public void beforeSuite(String config_file) throws Exception { + JSONParser parser = new JSONParser(); + config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); + commonCapabilities = (Map) config.get("capabilities"); + + username = System.getenv("BROWSERSTACK_USERNAME"); + if (username == null) { + username = (String) config.get("user"); + } + + accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); + if (accessKey == null) { + accessKey = (String) config.get("key"); + } + try { + if ((commonCapabilities.get("browserstack.local") != null && + commonCapabilities.get("browserstack.local").toString().equalsIgnoreCase("true") && (l == null))) { + l = new Local(); + Map options = new HashMap(); + options.put("key", accessKey); + l.start(options); + } + } catch (Exception e) { + System.out.println("Error while start local - " + e); + } + } @BeforeMethod(alwaysRun = true) @org.testng.annotations.Parameters(value = { "config", "environment" }) @SuppressWarnings("unchecked") public void setUp(String config_file, String environment) throws Exception { JSONParser parser = new JSONParser(); - JSONObject config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); + config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + config_file)); JSONObject envs = (JSONObject) config.get("environments"); - DesiredCapabilities capabilities = new DesiredCapabilities(); + capabilities.setCapability("browserstack.source", "testng:sample-selenium-3:v1.1"); + Map envCapabilities = (Map) envs.get(environment); Iterator it = envCapabilities.entrySet().iterator(); while (it.hasNext()) { @@ -46,33 +79,17 @@ public void setUp(String config_file, String environment) throws Exception { } } - String username = System.getenv("BROWSERSTACK_USERNAME"); - if (username == null) { - username = (String) config.get("user"); - } - - String accessKey = System.getenv("BROWSERSTACK_ACCESS_KEY"); - if (accessKey == null) { - accessKey = (String) config.get("key"); - } - - if (capabilities.getCapability("browserstack.local") != null - && capabilities.getCapability("browserstack.local") == "true") { - l = new Local(); - Map options = new HashMap(); - options.put("key", accessKey); - l.start(options); - } - driver = new RemoteWebDriver( - new URL("http://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); + new URL("https://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"), capabilities); } @AfterMethod(alwaysRun = true) public void tearDown() throws Exception { driver.quit(); - if (l != null) { - l.stop(); - } + } + + @AfterSuite(alwaysRun = true) + public void afterSuite() throws Exception { + if (l != null) l.stop(); } } diff --git a/src/test/resources/conf/local.conf.json b/src/test/resources/conf/local.conf.json index 27416af1..df1c23e4 100644 --- a/src/test/resources/conf/local.conf.json +++ b/src/test/resources/conf/local.conf.json @@ -5,7 +5,7 @@ "capabilities": { "build": "browserstack-build-1", - "name": "local_test", + "name": "BStack local testng", "browserstack.debug": true, "browserstack.local": true }, diff --git a/src/test/resources/conf/parallel.conf.json b/src/test/resources/conf/parallel.conf.json index 48bc9c74..622d10e2 100644 --- a/src/test/resources/conf/parallel.conf.json +++ b/src/test/resources/conf/parallel.conf.json @@ -5,7 +5,7 @@ "capabilities": { "build": "browserstack-build-1", - "name": "parallel_test", + "name": "BStack parallel testng", "browserstack.debug": true }, diff --git a/src/test/resources/conf/single.conf.json b/src/test/resources/conf/single.conf.json index 3de3fd55..b4c57f80 100644 --- a/src/test/resources/conf/single.conf.json +++ b/src/test/resources/conf/single.conf.json @@ -5,7 +5,7 @@ "capabilities": { "build": "browserstack-build-1", - "name": "single_test", + "name": "BStack single testng", "browserstack.debug": true }, diff --git a/src/test/resources/conf/suite.conf.json b/src/test/resources/conf/suite.conf.json index 7f19ce11..da7200ef 100644 --- a/src/test/resources/conf/suite.conf.json +++ b/src/test/resources/conf/suite.conf.json @@ -5,7 +5,7 @@ "capabilities": { "build": "browserstack-build-1", - "name": "suite_test", + "name": "BStack suite testng", "browserstack.debug": true },