def __init__(self): #执行控制台的命令使用 self.dos = DosCmd() #获取设备devices的集合 self.device_list = self.get_devices() #yaml的操作类 self.write_file = WriteUserCommand()
def android_driver(self, i): # devices_name adb devices # port write_file = WriteUserCommand() device = write_file.get_value('user_info_' + str(i), 'deviceName') port = write_file.get_value('user_info_' + str(i), 'port') start_t = time.time() capabilities = { "platformName": "Android", # "automationName": "UiAutomator2", "deviceName": device, "app": "../data/JZB_7.0.8-website-release.apk", "noReset": "true", "unicodeKeyboard": "true", "resetKeyboard": "true" } try: driver = webdriver.Remote('http://localhost:' + port + '/wd/hub', capabilities) logger.info( "{0} Start Android device <{1}>, Spend {2} seconds".format( success, device, round(time.time() - start_t, 2))) time.sleep(10) return driver except Exception: logger.info( "{0} Unable to Start Android device <{1}>, Spend {2} seconds". format(fail, device, round(time.time() - start_t, 2))) raise
class BaseDriver(object): def __init__(self): self.write_file = WriteUserCommand() def android_driver(self, i): print "this is android_driver:", i platformVersion = self.write_file.get_value("user_info_" + str(i), 'platformVersion') deviceName = self.write_file.get_value("user_info_" + str(i), 'deviceName') port = self.write_file.get_value("user_info_" + str(i), 'port') desired_caps = {} desired_caps['platformName'] = "android" #设备类型 #desired_caps['automationName'] = "UiAutomator2"#toast提示 desired_caps['platformVersion'] = platformVersion #系统版本号 desired_caps['deviceName'] = deviceName #设备号 desired_caps['App'] = "F:/heshidaiapppakage/heshidai.apk" #APP路径 desired_caps['appPackage'] = "com.heshidai.app" #应用包名 desired_caps[ 'appActivity'] = "com.heshidai.app.activity.finance.WelcomeActivity" #应用的activity desired_caps['unicodeKeyboard'] = "True" #Unicode类型 desired_caps['resetKeyboard'] = "True" #不显示键盘 #desired_caps['noReset'] = "true"#不会重复安装APP self.driver = webdriver.Remote('http://localhost:' + port + '/wd/hub', desired_caps) time.sleep(20) return self.driver def ios_driver(self): pass def get_driver(self): pass
def get_count(): """ 获取设备数量 """ write_user_file = WriteUserCommand() count = write_user_file.get_file_lines() return count
def android_driver(self,i): #print "this is android_driver:",i #devices_name adb devices #port write_file = WriteUserCommand() devices = write_file.get_value('user_info_'+str(i),'deviceName') port = write_file.get_value('user_info_'+str(i),'port') capabilities = { "platformName": "Android", #"automationName":"UiAutomator2", "deviceName": devices, # "deviceName": '85U8PBFE99999999', "app": "E:\\Chrome_320208401.apk", "noReset":"true", "platforVersion":"5.1", "appPackage":"cn.com.open.mooc" #"newCommandTimeout":'180' } driver = webdriver.Remote("http://127.0.0.1:"+port+"/wd/hub",capabilities) # driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", capabilities) time.sleep(10) return driver
def android_driver(self, i, type): print("this is android_driver:", i) # devices_name adb devices write_file = WriteUserCommand() ini_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) read_ini = ReadIni(ini_dir + "//config/ApplyConfig.ini") devices = write_file.get_value('user_info_' + str(i), 'deviceName') port = write_file.get_value('user_info_' + str(i), 'port') apk_name = read_ini.get_value("apk", type) appPackage = read_ini.get_value("package_name", type) appWaitActivity = read_ini.get_value("activity", type) noReset = read_ini.get_value("noReset", type) capabilities = { "platformName": "Android", # "automationName":"UiAutomator2", "deviceName": devices, "app": apk_name, "appWaitActivity": appWaitActivity, "noReset": noReset, "platforVersion": "4.4.4", "appPackage": appPackage, # "chromedriverExecutableDir": ini_dir + "\config\chromedriver\webview", 'recreateChromeDriverSessions': True } driver = webdriver.Remote("http://127.0.0.1:" + port + "/wd/hub", capabilities) time.sleep(10) return driver
class Driver: def __init__(self): self.write_file = WriteUserCommand() def android_driver(self, i): devices = self.write_file.get_yaml_value('user_info_' + str(i), 'deviceName') port = self.write_file.get_yaml_value('user_info_' + str(i), 'port') capabilities = { "platformName": "Android", # "automationName": "UiAutomator2", "deviceName": devices, "app": r"E:\apk\QQ.apk", "appWaitActivity": "com.tencent.mobileqq.activity.LoginActivity", # "waitActivity": "", "noReset": "True" } driver = webdriver.Remote("http://127.0.0.1:" + port + "/wd/hub", capabilities) time.sleep(5) return driver def quit_driver(self, i): self.android_driver(i).quit() def ios_driver(self): pass # 如果设备是android 就getandroi_driver 如果是ios ... def get_driver(self): pass
class BaseDriver: def __init__(self): self.write_file = WriteUserCommand() def android_driver(self, i): deviceName = self.write_file.get_value('user_info_' + str(i), 'deviceName') port = self.write_file.get_value('user_info_' + str(i), 'port') desired_caps = { 'platformName': 'Android', # 'platformVersion': '7.1.2', 'deviceName': deviceName, # 自动确定确定应用权限 'autoGrantPermissions': 'true', 'unicodeKeyboard': 'true', 'resetKeyboard': 'true', 'automationName': 'Uiautomator2', # 'app': 'E:\\pythonProject\\appiumTest\\nurotron\APP\\app-debug.apk', 'app': PATH('../app/app-debug.apk'), # 不会覆盖安装 'noReset': 'true' } driver = webdriver.Remote('http://localhost:' + str(port) + '/wd/hub', desired_caps) time.sleep(10) return driver def ios_driver(self): pass def get_driver(self): pass
def android_driver(self, i): print("this is android_driver:", i) #devices_name adb devices #port write_file = WriteUserCommand() devices = write_file.get_value('user_info_' + str(i), 'deviceName') port = write_file.get_value('user_info_' + str(i), 'port') # capabilities = { # "platformName": "Android", # #"automationName":"UiAutomator2", # "deviceName": devices, # "app": "D:/mukeappium/app/MojiWeather.apk", # "appWaitActivity":"com.moji.mjweather.LauncherActivity", # "noReset":"true", # # "platforVersion":"4.4.4", # "appPackage":"com.moji.mjweather" # #"newCommandTimeout":'180' # } caps = {} caps["platformName"] = "Android" caps["deviceName"] = devices caps['app'] = "D:/mukeappium/app/MojiWeather.apk" caps["appPackage"] = "com.moji.mjweather" caps["appActivity"] = "com.moji.mjweather.LauncherActivity" # caps['app'] = "C:/Users/Administrator/Desktop/111111.apk" # caps["appPackage"] = "net.changjinglu.mall" # caps["appActivity"] = "net.changjinglu.mall.HomeActivity" caps["noReset"] = "true" # caps["noSign"]: "true" driver = webdriver.Remote("http://localhost:" + str(port) + '/wd/hub', caps) time.sleep(10) # driver = webdriver.Remote("http://127.0.0.1:"+port+"/wd/hub",capabilities) # time.sleep(10) return driver
def get_android_driver(): write_file=WriteUserCommand() i = 0 # 获取第一个device的deviceName i代表的是第n个手机 deviecs = write_file.get_yaml_value('user_info_'+str(i),'deviceName') # 获取第一个device的port port=write_file.get_yaml_value('user_info_' + str(i), 'port') desired_caps = { 'platformName': 'Android', 'platformVersion': '9.1.0', 'deviceName': deviecs, 'app': '/Users/lumi/Desktop/apk/commonfile_apk_5ac6e5d37cc13085a6b4b30f66a18113.apk', "automationName": "UiAutomator2", # 切换Activity 'appActivity': 'com.xiaomi.smarthome.SmartHomeMainActivity', # "appWaitActivity": "cn.com.open.mooc.user.register.MCPhoneRegisterAty", # 是否重置安装应用 执行的时候不会到指引页面 'noReset': 'true', # 最新版本的这两个参数不需要配置 # desired_caps['appActivity'] = '' # desired_caps['appPackage'] = '' 'unicodeKeyboard' : 'true', 'resetKeyboard':'true' } driver = webdriver.Remote('http://localhost:'+str(port)+'/wd/hub', desired_caps) print('启动driver',driver) print('首页的activity:',driver.current_activity) driver.wait_activity(driver.current_activity,25) return driver
def get_count(): """ 获取yaml文件行数 即字典大小 以启动线程数量 :return: """ write_user_file = WriteUserCommand() count = write_user_file.get_yaml_lines() return count
def __init__(self): self.dos_cmd = DosCmd() self.result = self.dos_cmd.execute_cmd_result('adb devices') #['List of devices attached ', '127.0.0.1:62001\tdevice', '127.0.0.1:62025\tdevice'] self.write_user_command = WriteUserCommand() self.port = Port() self.pport = self.port.create_port_list('4705', self.get_devices()) self.bpport = self.port.create_port_list('4900', self.get_devices())
def __init__(self): self.doscmd = Doscmd() write_file = WriteUserCommand() self.devices = write_file.get_value('user_info_' + str(0), 'deviceName') self.doscmd.execute_cmd( "/Users/kang/Library/Android/sdk/platform-tools/adb -s " + self.devices + " shell am startservice ca.zgrs.clipper/.ClipboardService")
def get_from_phone(self, i, time, nickname): write_file = WriteUserCommand() devices = write_file.get_value('user_info_' + str(i // 2), 'deviceName') self.doscmd.execute_cmd( "adb -s " + devices + " shell ls sdcard/tencent/micromsg/WeiXin/mmexport" + str(time) + "*.jpg | tr '\r' ' ' | xargs -n1 -I '{}' adb pull {} /Users/kang/Documents/github/Appuim_py/screenshots/" + str(time) + str(nickname) + ".jpg")
def android_driver(i): print "this is android_driver:", i write_file = WriteUserCommand() devices = write_file.get_value('user_info_' + str(i), 'deviceName') port = write_file.get_value('user_info_' + str(i), 'port') capabilities = { "platformName": "Android", "deviceName": devices, "app": PATH("../../apps/yhjs-debug-3.3.0-android_yingyong_market.apk"), "noReset": False, "appPackage": "com.kingkr.kuhtnwi", "appWaitActivity": ".ui.main.MainActivity", } driver = webdriver.Remote("http://127.0.0.1:" + port + "/wd/hub", capabilities) time.sleep(10) return driver
def android_driver(self, i, appPackage, appActivity): #device_name #port write_file = WriteUserCommand() devices = write_file.get_value('user_info_' + str(i // 2), 'deviceName') port = write_file.get_value('user_info_' + str(i // 2), 'port') capabilities = { "platformName": "Android", "deviceName": devices, "appPackage": appPackage, #activity 选哪一个 要研究透彻 appAwaitActivity "appActivity": appActivity, "unicodeKeyboard": "true" } driver = webdriver.Remote("http://127.0.0.1:" + str(port) + "/wd/hub", capabilities) return driver
class BaseDriver(): def __init__(self, i): self.write_user = WriteUserCommand() # self.deviceName = self.write_user.get_value(str(i),'deviceName') self.udid = self.write_user.get_value(str(i), 'udid') self.port = self.write_user.get_value(str(i), 'port') def Android_driver(self): capabilities = { "platformName": "Android", "automationName": "UiAutomator2", # 平台,默认Appium,为了抓取tost # "deviceName": "29aaf4ef", "deviceName": self.deviceName, "app": "D:\\python\\pythonlearning\\appium\\mukewang.apk", # "app":"D:\\python\\pythonlearning\\appium\\mukewang_7110.apk",#最新的app,没有登录 # "app": "D:\\python\\pythonlearning\\appium\\gsfw-Android_standard_dev-490.apk", # "appWaitActivity":"cn.com.open.mooc.index.splash.MCSplashActivity",#4723 "noReset": "true", # 配置TRUE不是安装后首次进入页面 } content = "http://127.0.0.1:" + str(self.port) + "/wd/hub" driver = webdriver.Remote(content, capabilities) time.sleep(15) return driver def Ios_driver(self): capabilities = { # 平台名称 'platformName': 'iOS', # 平台版本 'platformVersion': '13.3', #系统号 # 设备名称 'deviceName': 'iPhone X', #虚拟机设备型号 "udid": self.udid, #设备号 "automationName": "XCUITest", "bundleId": "net.csdn.CsdnPlus", 'app': '/Users/luqiuyan/luqy/CSDN 4.0.7.ipa', # 超时时间 'newCommandTimeout': 30, # 自动化测试平台 # 'automationName': 'Appium', # 是否不重新安装启动 # 'noReset': True # 自动处理系统权限弹框 # `autoAcceptAlerts`:True 低版本有效 } content = "http://127.0.0.1:" + str(self.port) + "/wd/hub" driver = webdriver.Remote(content, capabilities) time.sleep(15) return driver def get_driver(self): pass def quit_driver(self): self.Ios_driver.quit()
def android_driver(self,i): print ("this is android_driver:",i) #devices_name adb devices #port write_file = WriteUserCommand() devices = write_file.get_value('user_info_'+str(i),'deviceName') port = write_file.get_value('user_info_'+str(i),'port') capabilities = { "platformName": "Android", #"automationName":"UiAutomator2", "deviceName": devices, "app": "E:\\PythonAppium\\AutoTestAppium\\apps\\mukewang.apk", "appWaitActivity":"cn.com.open.mooc.user.login.MCLoginActivity", "noReset":"true", "platforVersion":"4.4.4", "appPackage":"cn.com.open.mooc" #"newCommandTimeout":'180' } driver = webdriver.Remote("http://127.0.0.1:"+port+"/wd/hub",capabilities) time.sleep(10) return driver
def create_command_list(self, i): """ 启动appium 拼接 appium -p -bp -U :argument :return: """ write_file = WriteUserCommand() command_list = [] appium_port_list = self.create_port_list(4700) # 传入start_port,生成p端口列表 bootstrap_port_list = self.create_port_list(4900) # 生成bp端口列表 devices_list = self.device_list # 获取设备信息列表 # for i in range(len(devices_list)): # 拼接命令 command = "appium -p " + str(appium_port_list[i]) + " -bp " + str( bootstrap_port_list[i]) + " -U " + str( devices_list[i]) + " --no-reset --session-override" # 把命令添加到command_list command_list.append(command) write_file.write_data(i, devices_list[i], str(bootstrap_port_list[i]), str(appium_port_list[i])) # 返回拼接好的命令,后续只需要循环这些命令 return command_list
class BaseDrvier: def __init__(self): self.write_file = WriteUserCommand() self.server = Server() def android_driver(self, i): # devices_name # port # # self.server.main_server() print('wait.... this is androd_driver:', i) time.sleep(10) self.device_name = self.write_file.get_value('user_info_' + str(i), 'deviceName') self.port = self.write_file.get_value('user_info_' + str(i), 'port') print(self.device_name, '-------devices_name') print(self.port, '-------port') desired_caps = { "platformName": "Android", "deviceName": self.device_name, "platformVersion": "5.1.1", "app": "D:\student_v3.5_sxreader.apk", "appActivity": "com.zjmy.sxreader.studet.presenter.activity.login.LoginActivity", "noReset": "true", "automationName": "uiautomator2" } driver = webdriver.Remote( 'http://127.0.0.1:' + str(self.port) + '/wd/hub', desired_caps) time.sleep(3) return driver def ios_drvier(self): pass def get_drvier(self): pass
def android_driver(self, i): tool = Tools() rootpath = tool.getRootPath() apkpath = os.path.join(rootpath, 'apks', 'cnode.apk') # devices_name adb devices # port write_file = WriteUserCommand() devices = write_file.get_value('user_info_' + str(i), 'deviceName') print("devices=======================================================", devices, "==============================================") port = write_file.get_value('user_info_' + str(i), 'port') capabilities = { "platformName": "Android", "deviceName": devices, # "automationName":"UiAutomator2", "appActivity": "org.cnodejs.android.md.ui.activity.LaunchActivity", # "appWaitActivity": "org.cnodejs.android.md.ui.activity.LaunchActivity", "noReset": "true", "unicodeKeyboard": "true", "resetKeyboard": "true", "appPackage": "org.cnodejs.android.md" } return webdriver.Remote("http://127.0.0.1:" + port + "/wd/hub", capabilities)
def android_driver(self, i): # devices_name adb devices # port write_file = WriteUserCommand() # devices = write_file.get_value('user_info_' + str(i), 'deviceName') devices = '127.0.0.1:21503' # port = write_file.get_value('user_info_' + str(i), 'port') port = '4723' capabilities = { "platformName": "Android", "deviceName": devices, "appActivity": "com.ofbank.lord.activity.MainActivity", "appPackage": "com.ofbank.lord", "noReset": "true" } driver = webdriver.Remote("http://127.0.0.1:" + port + "/wd/hub", capabilities) # time.sleep(10) return driver
def __init__(self): self.write_file = WriteUserCommand()
def __init__(self): self.write_file = WriteUserCommand() self.server = Server()
def __init__(self, i): self.write_user = WriteUserCommand() # self.deviceName = self.write_user.get_value(str(i),'deviceName') self.udid = self.write_user.get_value(str(i), 'udid') self.port = self.write_user.get_value(str(i), 'port')
class Server: def __init__(self): self.dos = DosCmd() self.device_list = self.get_devices() self.write_file = WriteUserCommand() def get_devices(self): ''' 获取设备信息 ''' devices_list = [] result_list = self.dos.excute_cmd_result('adb devices') if len(result_list) >= 1: for i in result_list: devices_list.append(i) print(devices_list) # if 'List' in i: # continue # devices_info = i.split('\t') # if devices_info[1] == 'device': # devices_list.append(devices_info[0]) return devices_list else: return None def create_port_list(self, start_port): ''' 创建可用端口 ''' port = Port() port_list = [] port_list = port.create_port_list(start_port, self.device_list) return port_list def create_command_list(self, i): ''' 生成命令 ''' #appium -p 4700 -bp 4701 -U 127.0.0.1:21503 command_list = [] appium_port_list = self.create_port_list(4700) bootstrap_port_list = self.create_port_list(4900) device_list = self.device_list # command = "appium -p "+str(appium_port_list[i])+" -bp "+str(bootstrap_port_list[i])+" -U "+device_list[i]+" --no-reset --session-override --log E:/Teacher/Imooc/AppiumPython/log/test02.log" command = 'appium -p ' + str(appium_port_list[i]) + ' -bp ' + str( bootstrap_port_list[i] ) + ' -U ' + device_list[i] + ' --no-reset --session-override' #appium -p 4723 -bp 4726 -U 127.0.0.1:62001 --no-reset --session-override --log E:/Teacher/Imooc/AppiumPython/log/test01.log command_list.append(command) self.write_file.write_data(i, device_list[i], str(bootstrap_port_list[i]), str(appium_port_list[i])) return command_list # # def start_server(self, i): ''' 启动服务 ''' self.start_list = self.create_command_list(i) print(self.start_list) self.dos.excute_cmd(self.start_list[0]) def kill_server(self): server_list = self.dos.excute_cmd_result('tasklist | find "node.exe"') if len(server_list) > 0: self.dos.excute_cmd('taskkill -F -PID node.exe') else: return '当前无 Node.exe 进程!' # def main(self): thread_list = [] self.kill_server() self.write_file.clear_data() for i in range(len(self.device_list)): appium_start = threading.Thread(target=self.start_server, args=(i, )) thread_list.append(appium_start) for j in thread_list: j.start() time.sleep(25)
def __init__(self): self.cmd = Command() self.port = Port() self.write_user_command = WriteUserCommand() self.device_list = self.get_devices()
class Server: def __init__(self): self.cmd = Command() self.port = Port() self.write_user_command = WriteUserCommand() self.device_list = self.get_devices() def get_devices(self): """ 获取设备信息 :return: """ result_list = self.cmd.excute_command_result("adb devices") device_list = [] if len(result_list) > 1: for d in result_list: if d == 'List of devices attached': continue elif '\tdevice' in d: device_list.append(d.replace('\tdevice', '')) return device_list else: return None def create_port_list(self, start_port): port_list = self.port.create_port_list(start_port, self.device_list) return port_list def create_command_list(self, i): command_list = [] appium_port_list = self.create_port_list(4700) bootstrap_list = self.create_port_list(4900) command = "appium -p " + str(appium_port_list[i]) + " -bp " + str(bootstrap_list[i]) + " -U " + self.device_list[i] + \ " --no-reset --session-override --log appium.log" command_list.append(command) self.write_user_command.write_data(i, self.device_list[i], bootstrap_list[i], appium_port_list[i]) # port device 配对关系写入配置文件,base文件读取 return command_list def start_server(self, i): """ 启动服务 :return: """ appium_command = self.create_command_list(i) self.cmd.excute_command(appium_command) def kill_server(self): """ 杀掉之前的进程 :return: """ server_list = self.cmd.excute_command_result("ps -ef | grep node") if server_list: self.cmd.excute_command("killall node") def main(self): """ 多线程启动appium :return: """ self.kill_server() self.write_user_command.clear_data() appium_list = [] for i in range(len(self.device_list)): appium_t = threading.Thread(target=self.start_server, args=(i, )) print("id: ", i) appium_list.append(appium_t) [i.start() for i in appium_list]
def __init__(self): self.dos = DosCmd() self.device_list = self.get_devices() self.write_file = WriteUserCommand()
# suite.addTest(CaseTest('test_01')) print('this is get suite 中的 i :', i) suite.addTest(CaseTest('test_fail', parame=i)) suite.addTest(CaseTest('test_suc', parame=i)) # unittest.TextTestRunner().run(suite) html_file = "../report/report%s.html" % i fp = open(html_file, 'wb') runner = HTMLTestRunner.HTMLTestRunner(stream=fp) runner.run(suite) fp.close() if __name__ == '__main__': # unittest.main() appium_init() write_file = WriteUserCommand() lines = write_file.get_data_lines() if lines != None: print('this is lines value: ', lines) threads = [] for i in range(lines): t = Process(target=get_suite, args=(i, )) threads.append(t) for j in threads: j.start() time.sleep(1) else: print('当前条件没有测试机!!!')