From cab99fa8e49b396e5c1cabab29ef36191b40cb0a Mon Sep 17 00:00:00 2001 From: ShivamPokhriyal Date: Tue, 1 Jun 2021 11:59:14 +0530 Subject: [PATCH 1/5] Fix No Test Run error in BS --- scripts/browserstack.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/browserstack.py b/scripts/browserstack.py index dd69b6d294..000124a7c3 100644 --- a/scripts/browserstack.py +++ b/scripts/browserstack.py @@ -32,7 +32,13 @@ def buildTestCommand(appToken, testToken, classes=None): if classes: test["class"] = classes classSize = len(classes) - test["shards"] = { "numberOfShards": 5 if (classSize > 5) else classSize } + if classSize > 5: + test["shards"] = { "numberOfShards": 5 } + else: + mapping = [] + for index, name in enumerate(classes, start=1): + mapping.append({"name" : "Shard " + str(index), "strategy": "class", "values": [name]}) + test["shards"] = { "numberOfShards": classSize, "mapping": mapping } else: test["shards"] = { "numberOfShards": 5 } From d22673764105772a3427771e96badde57d91381c Mon Sep 17 00:00:00 2001 From: ShivamPokhriyal Date: Tue, 1 Jun 2021 13:04:48 +0530 Subject: [PATCH 2/5] Retry 2 times --- scripts/browserstack.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/scripts/browserstack.py b/scripts/browserstack.py index 000124a7c3..7bb7339e29 100644 --- a/scripts/browserstack.py +++ b/scripts/browserstack.py @@ -58,7 +58,7 @@ def isSuccessfulBuild(buildId): return status -def testResult(buildId): +def testResult(buildId, retryCount): status = isSuccessfulBuild(buildId) # if test succeeded then we can simply return from here. @@ -66,6 +66,7 @@ def testResult(buildId): return # Otherwise run the failing test one more time. + retryCount = retryCount + 1 # Get the sessionID from test result resultCommand = 'curl -u "{}:{}" -X GET "https://api-cloud.browserstack.com/app-automate/espresso/v2/builds/{}"'.format(userName, password, buildId) @@ -106,10 +107,14 @@ def testResult(buildId): status = isSuccessfulBuild(buildId) - if (status != "passed"): + if (status != "passed" && retryCount >= 3): print("Instrumentation Tests Failed. Visit browserstack dashboard for more details.") print("https://app-automate.browserstack.com/dashboard/v2/builds/{}".format(buildId)) sys.exit(-1) + elif status != "passed": + testResult(buildId, retryCount) + else: + print("Instrumentation Tests Passed.") def shouldSkipAndroidTest(): gitPRId = os.environ["ghprbPullId"] @@ -117,17 +122,17 @@ def shouldSkipAndroidTest(): gitPRCmdOutput = subprocess.Popen(shlex.split(gitPRCmd), stdout=PIPE, stderr=None, shell=False).communicate() gitPRLabels = json.loads(gitPRCmdOutput[0])["labels"] shouldSkip = False - for label in gitPRLabels: + for label in gitPRLabels: if label["name"] == "skip-integration-tests": shouldSkip = True break return shouldSkip -def runAndroidTest(): +def runAndroidTest(): # Exit if the PR is labelled with `skip-integration-tests` if shouldSkipAndroidTest(): - return + return if "BROWSERSTACK_USERNAME" in os.environ: userName = os.environ["BROWSERSTACK_USERNAME"] @@ -163,7 +168,7 @@ def runAndroidTest(): buildId = json.loads(output[0])["build_id"] # Get the result of the test build - testResult(buildId) + testResult(buildId, 1) if __name__ == "__main__": From 1a1afa8af9a2f319e1f3b894957fd3d69382a995 Mon Sep 17 00:00:00 2001 From: ShivamPokhriyal Date: Tue, 1 Jun 2021 13:45:16 +0530 Subject: [PATCH 3/5] Syntax error in using && --- scripts/browserstack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/browserstack.py b/scripts/browserstack.py index 7bb7339e29..ffff7de47a 100644 --- a/scripts/browserstack.py +++ b/scripts/browserstack.py @@ -107,7 +107,7 @@ def testResult(buildId, retryCount): status = isSuccessfulBuild(buildId) - if (status != "passed" && retryCount >= 3): + if (status != "passed" and retryCount >= 3): print("Instrumentation Tests Failed. Visit browserstack dashboard for more details.") print("https://app-automate.browserstack.com/dashboard/v2/builds/{}".format(buildId)) sys.exit(-1) From cc9c0650be658f89f7e81452a22c73283c707de0 Mon Sep 17 00:00:00 2001 From: ShivamPokhriyal Date: Thu, 3 Jun 2021 12:36:42 +0530 Subject: [PATCH 4/5] Fix username not defined error --- scripts/browserstack.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/browserstack.py b/scripts/browserstack.py index ffff7de47a..8184acfb82 100644 --- a/scripts/browserstack.py +++ b/scripts/browserstack.py @@ -134,15 +134,6 @@ def runAndroidTest(): if shouldSkipAndroidTest(): return - if "BROWSERSTACK_USERNAME" in os.environ: - userName = os.environ["BROWSERSTACK_USERNAME"] - - if "BROWSERSTACK_PASSWORD" in os.environ: - password = os.environ["BROWSERSTACK_PASSWORD"] - - releaseApp = os.environ["RELEASE_APP_LOCATION"] - testApk = os.environ["TEST_APP_LOCATION"] - releaseUrl = "https://api-cloud.browserstack.com/app-automate/upload" testUrl = "https://api-cloud.browserstack.com/app-automate/espresso/test-suite" @@ -172,4 +163,9 @@ def runAndroidTest(): if __name__ == "__main__": + userName = os.environ["BROWSERSTACK_USERNAME"] + password = os.environ["BROWSERSTACK_PASSWORD"] + releaseApp = os.environ["RELEASE_APP_LOCATION"] + testApk = os.environ["TEST_APP_LOCATION"] + runAndroidTest() From 44b4a8241a5cf34f0c8429e948b20c894b1be048 Mon Sep 17 00:00:00 2001 From: ShivamPokhriyal Date: Thu, 3 Jun 2021 13:10:21 +0530 Subject: [PATCH 5/5] Fix yet another variable not found error in browserstack script --- scripts/browserstack.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/browserstack.py b/scripts/browserstack.py index 8184acfb82..6708d34828 100644 --- a/scripts/browserstack.py +++ b/scripts/browserstack.py @@ -58,7 +58,7 @@ def isSuccessfulBuild(buildId): return status -def testResult(buildId, retryCount): +def testResult(appToken, testToken, buildId, retryCount): status = isSuccessfulBuild(buildId) # if test succeeded then we can simply return from here. @@ -112,7 +112,7 @@ def testResult(buildId, retryCount): print("https://app-automate.browserstack.com/dashboard/v2/builds/{}".format(buildId)) sys.exit(-1) elif status != "passed": - testResult(buildId, retryCount) + testResult(appToken, testToken, buildId, retryCount) else: print("Instrumentation Tests Passed.") @@ -134,9 +134,6 @@ def runAndroidTest(): if shouldSkipAndroidTest(): return - releaseUrl = "https://api-cloud.browserstack.com/app-automate/upload" - testUrl = "https://api-cloud.browserstack.com/app-automate/espresso/test-suite" - command = 'curl -u "{}:{}" -X POST "{}" -F' releaseUploadCmd = appendData(command.format(userName, password, releaseUrl), releaseApp) @@ -149,7 +146,6 @@ def runAndroidTest(): # Running the tests - espressoUrl = "https://api-cloud.browserstack.com/app-automate/espresso/build" runConfig = buildTestCommand(appToken, testToken) runCmd = 'curl -X POST "{}" -d \ {} -H "Content-Type: application/json" -u "{}:{}"'.format(espressoUrl, runConfig, userName, password) @@ -159,7 +155,7 @@ def runAndroidTest(): buildId = json.loads(output[0])["build_id"] # Get the result of the test build - testResult(buildId, 1) + testResult(appToken, testToken, buildId, 1) if __name__ == "__main__": @@ -168,4 +164,8 @@ def runAndroidTest(): releaseApp = os.environ["RELEASE_APP_LOCATION"] testApk = os.environ["TEST_APP_LOCATION"] + releaseUrl = "https://api-cloud.browserstack.com/app-automate/upload" + testUrl = "https://api-cloud.browserstack.com/app-automate/espresso/test-suite" + espressoUrl = "https://api-cloud.browserstack.com/app-automate/espresso/build" + runAndroidTest()