Skip to content

Commit f9ec36c

Browse files
authored
Merge pull request AppiumTestDistribution#37 from AnilPatidar/patch-2
Patch 2
2 parents 5b1f5c4 + 4c15e2f commit f9ec36c

12 files changed

Lines changed: 85 additions & 82 deletions

File tree

.github/workflows/maven.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,37 @@ jobs:
4040
xcrun simctl list
4141
- name: Execute tests
4242
run: mvn clean compile
43+
44+
browserstack:
45+
name: Browser Stack test for Android
46+
runs-on: ubuntu-latest
47+
steps:
48+
49+
- name: 'BrowserStack Env Setup' # Invokes the setup-env action
50+
uses: browserstack/github-actions/setup-env@master
51+
with:
52+
username: ${{ secrets.BROWSERSTACK_USERNAME }}
53+
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
54+
55+
- name: 'BrowserStack Local Tunnel Setup' # Invokes the setup-local action
56+
uses: browserstack/github-actions/setup-local@master
57+
with:
58+
local-testing: start
59+
local-identifier: random
60+
61+
# The next 3 steps are for building the web application to be tested and starting the web server on the runner environment
62+
63+
- name: 'Checkout the repository'
64+
uses: actions/checkout@v2
65+
66+
- name: 'Run Test on Android'
67+
run: Platform='android' CLOUD_USER=${{secrets.BROWSERSTACK_USERNAME}} CLOUD_KEY=${{secrets.BROWSERSTACK_ACCESS_KEY}} CONFIG_FILE='./configs/bs_config.properties' mvn clean -Dtest=Runner test -Dcheckstyle.skip
68+
69+
saucelabs:
70+
name: SauceLabs test for Android
71+
runs-on: ubuntu-latest
72+
steps:
73+
- name: Checkout
74+
uses: actions/checkout@v2
75+
- name: 'Run Tests on Android'
76+
run: Platform='android' CLOUD_USER=${{secrets.SAUCELABS_USERNAME}} CLOUD_KEY=${{secrets.SAUCELABS_ACCESS_KEY}} CONFIG_FILE='./configs/sauce_config.properties' mvn clean -Dtest=Runner test -Dcheckstyle.skip

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/saikrishna321/AppiumTestDistribution)
1111
[![Join the chat at https://gitter.im/saikrishna321/AppiumTestDistribution](https://badges.gitter.im/saikrishna321/AppiumTestDistribution.svg)](https://gitter.im/saikrishna321/AppiumTestDistribution?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
1212
[![Build Status](https://dev.azure.com/saikrishna321/ATD/_apis/build/status/AppiumTestDistribution.AppiumTestDistribution)](https://dev.azure.com/saikrishna321/ATD/_build/latest?definitionId=2)
13-
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/96c555bd567240999e89dba531fe9802)](https://www.codacy.com/app/saikrishna321/AppiumTestDistribution?utm_source=github.com&utm_medium=referral&utm_content=saikrishna321/AppiumTestDistribution&utm_campaign=Badge_Grade)
13+
[![GitActionsBuild](https://github.com/AppiumTestDistribution/AppiumTestDistribution/actions/workflows/maven.yml/badge.svg)](https://github.com/AppiumTestDistribution/AppiumTestDistribution/actions/workflows/maven.yml)
1414
[![GitHub stars](https://img.shields.io/github/stars/saikrishna321/AppiumTestDistribution.svg?style=flat)](https://github.com/saikrishna321/AppiumTestDistribution/stargazers)
1515
[ ![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen.svg?style=flat )](https://github.com/saikrishna321/AppiumTestDistribution/pulls)
1616
[![GitHub forks](https://img.shields.io/github/forks/saikrishna321/AppiumTestDistribution.svg?style=social&label=Fork)](https://github.com/kirankalyan5/AppiumTestDistribution/network)

azure-pipelines.yml

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,6 @@ jobs:
118118
119119
displayName: "Run Test on Sauce on iOS and Android"
120120
121-
- job: SauceLabs_Android
122-
pool:
123-
vmImage: "macos-10.15"
124-
125-
steps:
126-
- task: NodeTool@0
127-
inputs:
128-
versionSpec: "8.12.0"
129-
130-
- script: |
131-
Platform='android' CLOUD_USER=$(user_sauce) CLOUD_KEY=$(pass_sauce) CONFIG_FILE='./configs/sauce_config.properties' mvn clean -Dtest=Runner test -Dcheckstyle.skip
132-
133-
displayName: "Run Test on Sauce on iOS and Android"
134-
135121
- job: SauceLabs_iOS
136122
pool:
137123
vmImage: "macos-10.15"
@@ -188,19 +174,6 @@ jobs:
188174
mvn clean -Dtest=WindowsRunCukes test -Dcheckstyle.skip
189175
displayName: "Run windows app - Cucumber"
190176

191-
- job: BrowserStack_Android
192-
pool:
193-
vmImage: "macos-10.15"
194-
195-
steps:
196-
- task: NodeTool@0
197-
inputs:
198-
versionSpec: "12.18.1"
199-
200-
- script: |
201-
Platform='android' CLOUD_USER=$(user_bs) CLOUD_KEY=$(pass_bs) CONFIG_FILE='./configs/bs_config.properties' mvn clean -Dtest=Runner test -Dcheckstyle.skip
202-
203-
displayName: "Run Test on Sauce on iOS and Android"
204177
# - job: Genymotion
205178
# pool:
206179
# vmImage: 'macos-10.15'

caps/browserstack.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"project": "ATD",
55
"app": {
66
"local": "https://github.com/shridharkalagi/AppiumSample/raw/master/VodQA.apk",
7-
"cloud": "bs://f5efbaba7b416b731a01f5e7aa2385c40f38e703"
7+
"cloud": "bs://9fc49eb030bbf201001e71bc7b283ce2ba1db4a7"
88
},
99
"noSign": true
1010
},

caps/sauce.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"cloud": {
2424
"android": [
2525
{
26-
"deviceName": "GalaxyS7FHDGoogleAPI",
26+
"deviceName": "Samsung Galaxy S9 Plus FHD GoogleAPI Emulator",
2727
"osVersion": "8.1"
2828
}
2929
],

src/main/java/com/appium/capabilities/DesiredCapabilityBuilder.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,20 @@ public static DesiredCapabilities getDesiredCapability() {
5050
return desiredCapabilitiesThreadLocal.get();
5151
}
5252

53-
public void buildDesiredCapability(String jsonPath) throws Exception {
53+
public void buildDesiredCapability(String testMethodName, String jsonPath) throws Exception {
5454
int port = AppiumDeviceManager.getAppiumDevice().getPort();
5555
String platform = AppiumDeviceManager.getAppiumDevice().getDevice().getOs();
5656
boolean isCloud = AppiumDeviceManager.getAppiumDevice().getDevice().isCloud();
5757
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
5858
if (isCloud) {
59-
desiredCapabilityForCloud(platform, jsonPath, desiredCapabilities);
59+
desiredCapabilityForCloud(testMethodName, platform, jsonPath, desiredCapabilities);
6060
} else {
6161
desiredCapabilityForLocalAndRemoteATD(platform, jsonPath, port, desiredCapabilities);
6262

6363
}
6464
}
6565

66-
private void desiredCapabilityForCloud(String platform, String jsonPath,
66+
private void desiredCapabilityForCloud(String testMethodName, String platform, String jsonPath,
6767
DesiredCapabilities desiredCapabilities) {
6868
JSONObject platFormCapabilities = new JsonParser(jsonPath).getObjectFromJSON()
6969
.getJSONObject(platform);
@@ -82,17 +82,27 @@ private void desiredCapabilityForCloud(String platform, String jsonPath,
8282
desiredCapabilities.setCapability(MobileCapabilityType.UDID, udid);
8383
}
8484

85+
if (!desiredCapabilities.getCapabilityNames().contains("name")) {
86+
desiredCapabilities.setCapability("name", testMethodName);
87+
}
88+
8589
Object pCloudyApiKey = desiredCapabilities.getCapability("pCloudy_ApiKey");
8690
if (null == pCloudyApiKey) {
87-
desiredCapabilities.setCapability(CapabilityType.BROWSER_NAME, "");
88-
91+
if (desiredCapabilities.getCapability(CapabilityType.BROWSER_NAME) == null ) {
92+
desiredCapabilities.setCapability(CapabilityType.BROWSER_NAME, "");
93+
} else {
94+
desiredCapabilities.setCapability(CapabilityType.BROWSER_NAME,
95+
desiredCapabilities.getCapability(CapabilityType.BROWSER_NAME));
96+
}
8997
String osVersion = deviceProperty.getDevice().getOsVersion();
9098
if (osVersion != null) {
9199
desiredCapabilities.setCapability(CapabilityType.VERSION, osVersion);
92100
desiredCapabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, osVersion);
93101
}
94102
}
95-
LOGGER.info("desiredCapabilityForCloud: " + desiredCapabilities);
103+
LOGGER.info("desiredCapabilityForCloud: ");
104+
desiredCapabilities.getCapabilityNames().forEach(
105+
key -> LOGGER.info("\t" + key + ":: " + desiredCapabilities.getCapability(key)));
96106
desiredCapabilitiesThreadLocal.set(desiredCapabilities);
97107
}
98108

@@ -104,11 +114,11 @@ private void capabilityObject(DesiredCapabilities desiredCapabilities,
104114
List<HostArtifact> hostArtifacts = ArtifactsUploader.getInstance()
105115
.getHostArtifacts();
106116
String hostAppPath = hostAppPath(values, hostArtifacts);
107-
Path path = FileSystems.getDefault().getPath(hostAppPath);
108117
if (AppiumDeviceManager.getAppiumDevice().getDevice().isCloud()
109118
|| new UrlValidator().isValid(hostAppPath)) {
110119
desiredCapabilities.setCapability(appCapability, hostAppPath);
111120
} else {
121+
Path path = FileSystems.getDefault().getPath(hostAppPath);
112122
desiredCapabilities.setCapability(appCapability,
113123
path.normalize().toAbsolutePath().toString());
114124
}

src/main/java/com/appium/manager/AppiumDriverManager.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,17 @@ public static AppiumDriver getDriver() {
4040
protected static void setDriver(AppiumDriver driver) {
4141
LOGGER.info("AppiumDriverManager: Created AppiumDriver with capabilities: ");
4242
Capabilities capabilities = driver.getCapabilities();
43-
capabilities.getCapabilityNames().forEach(key -> {
44-
LOGGER.info("\t" + key + ":: " + capabilities.getCapability(key));
45-
});
43+
capabilities.getCapabilityNames().forEach(
44+
key -> LOGGER.info("\t" + key + ":: " + capabilities.getCapability(key)));
4645
appiumDriver.set(driver);
4746
}
4847

4948

5049
private AppiumDriver<MobileElement> initialiseDriver(DesiredCapabilities desiredCapabilities)
5150
throws Exception {
52-
LOGGER.info("Initialise Driver with Capabilities: " + desiredCapabilities.toString());
51+
LOGGER.info("Initialise Driver with Capabilities: ");
52+
desiredCapabilities.getCapabilityNames().forEach(
53+
key -> LOGGER.info("\t" + key + ":: " + desiredCapabilities.getCapability(key)));
5354
String remoteWDHubIP = getRemoteWDHubIP();
5455
return createAppiumDriver(desiredCapabilities, remoteWDHubIP);
5556
}
@@ -79,9 +80,8 @@ private AppiumDriver createAppiumDriver(DesiredCapabilities desiredCapabilities,
7980
}
8081
LOGGER.info("Session Created for "
8182
+ AppiumDeviceManager.getMobilePlatform().name()
82-
+ " ---- "
83-
+ currentDriverSession.getSessionId() + "---"
84-
+ currentDriverSession.getSessionDetail("udid"));
83+
+ "\n\tSession Id: " + currentDriverSession.getSessionId()
84+
+ "\n\tUDID: " + currentDriverSession.getSessionDetail("udid"));
8585
return currentDriverSession;
8686
}
8787

@@ -95,7 +95,8 @@ private String getRemoteWDHubIP() throws Exception {
9595
private AppiumDriver<MobileElement> startAppiumDriverInstance(
9696
Optional<DesiredCapabilities> desiredCapabilities)
9797
throws Exception {
98-
System.out.println("inside ATD:beforeInvocation");
98+
LOGGER.info("startAppiumDriverInstance");
99+
System.out.println("inside ATD:beforeInvocation");
99100
LOGGER.info("startAppiumDriverInstance: capabilities: " + desiredCapabilities);
100101
AppiumDriver<MobileElement> currentDriverSession =
101102
initialiseDriver(desiredCapabilities.get());
@@ -104,13 +105,16 @@ private AppiumDriver<MobileElement> startAppiumDriverInstance(
104105
}
105106

106107
// Should be used by Cucumber as well
107-
public AppiumDriver<MobileElement> startAppiumDriverInstance() throws Exception {
108+
public AppiumDriver<MobileElement> startAppiumDriverInstance(String testMethodName)
109+
throws Exception {
108110
LOGGER.info("startAppiumDriverInstance");
109-
System.out.println("inside startAppiumDriverInstance");
110-
return startAppiumDriverInstance(Optional.ofNullable(buildDesiredCapabilities(CAPS.get())));
111+
System.out.println("inside startAppiumDriverInstance");
112+
return startAppiumDriverInstance(
113+
Optional.ofNullable(buildDesiredCapabilities(testMethodName, CAPS.get())));
111114
}
112115

113-
private DesiredCapabilities buildDesiredCapabilities(String capabilityFilePath)
116+
private DesiredCapabilities buildDesiredCapabilities(String testMethodName,
117+
String capabilityFilePath)
114118
throws Exception {
115119
String absolutePathToCapabilities = capabilityFilePath;
116120
if (new File(capabilityFilePath).exists()) {
@@ -120,7 +124,7 @@ private DesiredCapabilities buildDesiredCapabilities(String capabilityFilePath)
120124
.toAbsolutePath().toString();
121125
}
122126
desiredCapabilityBuilder
123-
.buildDesiredCapability(absolutePathToCapabilities);
127+
.buildDesiredCapability(testMethodName, absolutePathToCapabilities);
124128
return DesiredCapabilityBuilder.getDesiredCapability();
125129
} else {
126130
throw new RuntimeException("Capability file not found");

src/main/java/com/appium/manager/AppiumParallelMethodTestListener.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ private void startReportLogging(ITestResult iTestResult) throws IOException,
9393
*/
9494
@Override
9595
public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
96-
System.out.println("inside ATD:beforeInvocation");
97-
allocateDeviceAndStartDriver(iTestResult);
96+
System.out.println("inside ATD:beforeInvocation");
97+
String testMethodName = iInvokedMethod.getTestMethod().getMethodName();
98+
allocateDeviceAndStartDriver(testMethodName, iTestResult);
9899
if (!isCloudExecution()) {
99100
currentMethods.set(iInvokedMethod.getTestMethod());
100101
SkipIf annotation = iInvokedMethod.getTestMethod().getConstructorOrMethod().getMethod()
@@ -111,22 +112,22 @@ public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestRes
111112
}
112113
}
113114
TestExecutionContext testExecutionContext =
114-
new TestExecutionContext(iInvokedMethod.getTestMethod().getMethodName());
115+
new TestExecutionContext(testMethodName);
115116
testExecutionContext.addTestState("appiumDriver",AppiumDriverManager.getDriver());
116117
testExecutionContext.addTestState("deviceId",
117118
AppiumDeviceManager.getAppiumDevice().getDevice().getUdid());
118119

119120
queueBeforeInvocationListeners(iInvokedMethod, iTestResult, listeners);
120121
}
121122

122-
private void allocateDeviceAndStartDriver(ITestResult iTestResult) {
123+
private void allocateDeviceAndStartDriver(String testMethodName, ITestResult iTestResult) {
123124
try {
124125
System.out.println("inside start of ATD:allocateDeviceAndStartDriver");
125126
AppiumDriver driver = AppiumDriverManager.getDriver();
126127
if (driver == null || driver.getSessionId() == null) {
127128
deviceAllocationManager.allocateDevice(deviceAllocationManager
128129
.getNextAvailableDevice());
129-
appiumDriverManager.startAppiumDriverInstance();
130+
appiumDriverManager.startAppiumDriverInstance(testMethodName);
130131
if (!isCloudExecution()) {
131132
startReportLogging(iTestResult);
132133
}

src/main/java/com/appium/manager/AppiumParallelTestListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public void onAfterClass(ITestClass iTestClass) {
164164
@Override
165165
public void onTestStart(ITestResult iTestResult) {
166166
try {
167-
appiumDriverManager.startAppiumDriverInstance();
167+
appiumDriverManager.startAppiumDriverInstance(iTestResult.getTestName());
168168
testLogger.startLogging(iTestResult);
169169
} catch (Exception e) {
170170
e.printStackTrace();

src/main/java/com/cucumber/listener/CucumberScenarioListener.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ public CucumberScenarioListener() {
5656
.getMongoDbHostAndPort().get("atdPort"));
5757
}
5858

59-
private AppiumDevice allocateDeviceAndStartDriver() {
59+
private AppiumDevice allocateDeviceAndStartDriver(String testMethodName) {
6060
try {
6161
AppiumDriver driver = AppiumDriverManager.getDriver();
6262
AppiumDevice availableDevice = deviceAllocationManager.getNextAvailableDevice();
6363
deviceAllocationManager.allocateDevice(availableDevice);
6464
if (driver == null || driver.getSessionId() == null) {
65-
appiumDriverManager.startAppiumDriverInstance();
65+
appiumDriverManager.startAppiumDriverInstance(testMethodName);
6666
}
6767
return updateAvailableDeviceInformation(availableDevice);
6868
} catch (Exception e) {
@@ -74,8 +74,9 @@ private AppiumDevice allocateDeviceAndStartDriver() {
7474
private AppiumDevice updateAvailableDeviceInformation(AppiumDevice availableDevice) {
7575
org.openqa.selenium.Capabilities capabilities = AppiumDriverManager.getDriver()
7676
.getCapabilities();
77-
LOGGER.info("allocateDeviceAndStartDriver: "
78-
+ capabilities);
77+
LOGGER.info("updateAvailableDeviceInformation");
78+
capabilities.getCapabilityNames().forEach(
79+
key -> LOGGER.info("\t" + key + ":: " + capabilities.getCapability(key)));
7980

8081
String udid = capabilities.is("udid")
8182
? getCapabilityFor(capabilities, "udid")
@@ -87,7 +88,7 @@ private AppiumDevice updateAvailableDeviceInformation(AppiumDevice availableDevi
8788
device.setDeviceModel(
8889
getCapabilityFor(capabilities, "deviceModel"));
8990
device.setName(
90-
getCapabilityFor(capabilities, "deviceName"));
91+
getCapabilityFor(capabilities, "device"));
9192
device.setApiLevel(
9293
getCapabilityFor(capabilities, "deviceApiLevel"));
9394
device.setDeviceType(
@@ -133,7 +134,7 @@ private void caseStartedHandler(TestCaseStarted event) {
133134
LOGGER.info(
134135
String.format("ThreadID: %d: beforeScenario: for scenario: %s\n",
135136
Thread.currentThread().getId(), scenarioName));
136-
AppiumDevice allocatedDevice = allocateDeviceAndStartDriver();
137+
AppiumDevice allocatedDevice = allocateDeviceAndStartDriver(scenarioName);
137138
String deviceLogFileName = null;
138139

139140
try {

0 commit comments

Comments
 (0)