From 83195679645baad3714fbec1f1dd84564d3891d7 Mon Sep 17 00:00:00 2001 From: sushant Date: Tue, 28 Sep 2021 17:50:22 +0530 Subject: [PATCH] - standalone reboot script - template for standalone scripts Signed-off-by: Sushant Bawiskar --- tools/interop_tools.py | 159 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 tools/interop_tools.py diff --git a/tools/interop_tools.py b/tools/interop_tools.py new file mode 100644 index 000000000..23e3e34d2 --- /dev/null +++ b/tools/interop_tools.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3.9 +""" + + interop_tools : Tools for Interop + reboot + ./interop_tools --device "{\"Galaxy S9\":\"Android\"}" --project_name "" --job_name "" --job_number 1 --test_tag "" --test_case_name "" + ./interop_tools --device "{\"Galaxy S9\":\"Android\"}" --job_number 1 +""" + +import sys + +if "libs" not in sys.path: + sys.path.append("../libs/perfecto_libs/") + +import argparse +import paramiko + + +import datetime +import sys +import os +import time +import warnings +from _pytest.outcomes import xfail +import urllib3 +from perfecto.model.model import Job, Project +from perfecto import (PerfectoExecutionContext, PerfectoReportiumClient,TestContext, TestResultFactory) +import pytest +import logging +import re +from selenium.common.exceptions import NoSuchElementException, TimeoutException +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from appium.webdriver.common.mobileby import MobileBy +from selenium.webdriver.support import expected_conditions as EC +from appium import webdriver + +from android_lib import * +from iOS_lib import * +import json + +# device = iPhone-12, iPhone-11, iPhone-7 ,platform_name=iOS +# device = Galaxy S20, Galaxy S10.*, Galaxy S9, Pixel 4, platform_name = Android + +class perfecto_tools: + + def __init__(self, project_name="TIP-test-Execution", job_name="reboot-devices", job_number=1, + test_tag="TIP-PyTest-Execution", test_case_name="reboot", device="iPhone-12", + platform_name="iOS", browser_name="mobileOS"): + warnings.simplefilter("ignore", ResourceWarning) + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + + self.driver = None + self.reporting_client = None + self.projectname = project_name + self.projectversion = 1.0 + self.jobname = job_name + self.jobnumber = job_number + self.tags = test_tag + self.device = device # iPhone-11 + self.testCaseName = test_case_name + self.platform_name = platform_name # iOS + self.browser_name = browser_name + self.capabilities = { + 'platformName': self.platform_name, + 'model': self.device, + 'browserName': self.browser_name, + 'securityToken': 'eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MjE4NjgyOTksImp0aSI6IjIzNGFiOTM1LWIxYjQtNGZiOC1hZmJiLTM0OTQwNzU5MjIwMyIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiN2I1MzBhZTAtODgxOC00N2I5LTgzZjMtN2ZhMGZiMGRkYjRlIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI1MzI2NDQxNS0xYTQwLTQ1ZTctOGVkMi1hOTNiYWZmZWNjYjIiLCJzZXNzaW9uX3N0YXRlIjoiY2YzY2JlOGMtY2Y5OC00NzRlLWJmODctYTIxNzU0NzVhM2EzIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.4a4v6AKxmY95Zb-l84K_Od49WPikwOHP7ryctfmnn-w', + 'useAppiumForWeb': 'false', + 'useAppiumForHybrid': 'false', + } + self.app_data = { + "webURL": "https://www.google.com", + "lblSearch": "//*[@class='gLFyf']", + "elelSearch": "(//*[@class='sbic sb43'])[1]", + "BtnRunSpeedTest": "//*[text()='RUN SPEED TEST']", + "bundleId-iOS-Settings": 'com.apple.Preferences', + "bundleId-iOS-Safari": 'com.apple.mobilesafari', + "downloadMbps": "//*[@id='knowledge-verticals-internetspeedtest__download']/P[@class='spiqle']", + "UploadMbps": "//*[@id='knowledge-verticals-internetspeedtest__upload']/P[@class='spiqle']", + # Android + "platformName-android": 'Android', + "appPackage-android": 'com.android.settings' + } + + self.driver = webdriver.Remote( + "https://tip.perfectomobile.com/nexperience/perfectomobile/wd/hub", + self.capabilities + ) + self.device_model_name = self.driver.execute_script('mobile:handset:info', {'property': 'model'}) + self.perfecto_execution_context = PerfectoExecutionContext(self.driver, self.tags, Job(self.jobname, self.jobnumber), + Project(self.projectname, self.projectversion)) + self.reporting_client = PerfectoReportiumClient(self.perfecto_execution_context) + self.reporting_client.test_start(test_case_name, TestContext([], "Perforce")) + + def driver_wait(self, time): + self.driver.implicitly_wait(time) + + def reboot(self): + params = {} + print("rebooting..",self.device_model_name) + self.driver.execute_script('mobile:handset:reboot', params) + print("rebooting complete !!") + + +def main(): + parser = argparse.ArgumentParser(prog="interop_tools", + formatter_class=argparse.RawTextHelpFormatter, + allow_abbrev=True, + epilog="About interop_tools.py", + description="Tools for Interop") + + parser.add_argument('--device', type=str, help=' --device : device you want to reboot', + default="{\"Galaxy S20\": 'Android', \"Galaxy S10.*\": 'Android', \"Galaxy S9\": 'Android', \"Pixel 4\": 'Android',\"iPhone-12\": 'iOS', \"iPhone-11\": 'iOS', \"iPhone-7\" : 'iOS'}") + + parser.add_argument('--project_name', type=str, help='', default="TIP-test-Execution") + parser.add_argument('--job_name', type=str, help='', default="reboot-devices") + parser.add_argument('--job_number', type=int, help='', default=1) + parser.add_argument('--test_tag', type=str, help='', default="TIP-PyTest-Execution") + parser.add_argument('--test_case_name', type=str, help='', default="reboot") + + args = parser.parse_args() + print(args.device) + device = json.loads(args.device) + job_name = args.job_name + job_number = args.job_number + test_tag = args.test_tag + test_case_name = args.test_case_name + + + for device_name,platform in device.items(): + try: + perfecto_tool = perfecto_tools(device=device_name, + platform_name=platform, + job_name=job_name, + job_number=job_number, + test_tag=test_tag, + test_case_name=str(test_case_name+"-"+device_name)) + try: + perfecto_tool.reboot() + perfecto_tool.reporting_client.test_stop(TestResultFactory.create_success()) + except: + print("Reboot Failed !") + perfecto_tool.reporting_client.test_stop(TestResultFactory.create_failure("Failed!")) + finally: + try: + perfecto_tool.driver.close() + except: + print("not able to close the driver") + try: + perfecto_tool.driver.quit() + except: + print("not able to quit the driver") + except: + print("Failed to get Driver") + + +if __name__ == '__main__': + main()