# -*- encoding=utf8 -*-
__author__ = "Lee.li"
"""
命名规则:
1.模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
2.类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
3.函数名一律小写,如有多个单词,用下划线隔开,私有函数在函数前加一个下划线_
4.变量名首字母尽量小写, 如有多个单词,用下划线隔开,后续字母大写
5.常量采用全大写,如有多个单词,使用下划线隔开
"""
import inspect
import queue
import threading
from Views.multi_processframe.ProjectTools import common
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from airtest.core.android.adb import ADB
from airtest.utils.apkparser import APK
from Views.paaS import tools
from Views.multi_processframe.ProjectTools.path import CONFIGPATH
index_print = print
adb = ADB().adb_path # 获取内置adb路径
queue = queue.Queue() # queue线程通讯
def print(*args, **kwargs):
index_print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), *args, **kwargs)
class AndroidTools:
def __init__(self, momentDevices=""):
self._rootPath = CONFIGPATH # 获取当前目录根目录
self._configPath = self._rootPath # 获取config.ini的路径
self._discerncode = common.get_value(self._configPath, 'discerncode')[0] # 获取下载识别码
self._testCase = common.get_value(self._configPath, 'testCase') # 获取测试列表
self._email = common.get_value(self._configPath, 'email')[0] # 获取邮箱
self._packageName = common.get_value(self._configPath, 'packageName')[0] # 获取安装包名称
self._packagePath = common.get_value(self._configPath, 'packagePath')[0] # 获取安装包路径
self._devicesList = common.get_value(self._configPath, 'devicesList') # 获取配置设备列表
self._installApk = common.get_value(self._configPath, 'installApk')[0] # 获取安装测试包开关 1 为打开 0 为关闭
self._testType = common.get_value(self._configPath, 'testType')[0] # 获取测试类型开关 1 兼容 0 为分布
self._performanceType = common.get_value(self._configPath, 'performanceType')[0] # 获取性能测试开关 1 为打开 0 为关闭
self._storage_by_exce = common.get_value(self._configPath, "storage_by_exce")[0] # 获取性能报告方式 1 为excle 0 为json
self._username = common.get_value(self._configPath, 'username') # 获取账号
self._password = common.get_value(self._configPath, 'password')[0] # 获取密码
self._uwatype = common.get_value(self._configPath, "uwatype")[0] # 获取uwa测试判断
self._testuwacase = common.get_value(self._configPath, "testuwacase") # 获取uwa测试用例
self._number = common.get_value(self._configPath, "number")[0] # 获取uwa测试用例
self._server = common.get_value(self._configPath, 'server')[0] # 获取server
if self._server == "1server":
self._server = "日补丁qq android一服"
elif self._server == "2server":
self._server = "日补丁qq android二服"
self._momentDevices = momentDevices # 获取连接的设备
if ':' in self._momentDevices:
self._devicesName = self._momentDevices.split(':')[1]
else:
self._devicesName = self._momentDevices
self._activityName = common.get_value(self._configPath, 'activityName')[0] # 获取测试包的界面活动名
if self._activityName == '':
self._activityName = APK(self.get_apkpath()).activities[0] # 如果活动包名没有填,就通过APK的activities方法,用包的路径获取活动名
def get_discerncode(self):
"""
获取下载状态识别码
:return:
"""
return self._discerncode
def get_uwatype(self):
"""
获取config中的uwatype
:return:
"""
return self._uwatype
def get_number(self):
"""
获取config中的uwatype
:return:
"""
return self._number
def get_testuwacase(self):
"""
获取uwa测试脚本
:return:
"""
return self._testuwacase
def get_server(self):
"""
获取config中的账号名称
:return:
"""
return self._server
def get_password(self):
"""
获取config中的账号名称
:return:
"""
return self._password
def get_username(self):
"""
获取config中的账号名称
:return:
"""
return self._username
def get_rootpath(self):
"""
获取当前路径的根目录绝对路径
:return:
"""
return self._rootPath
def get_configpath(self):
"""
获取config路径
:return:
"""
return self._configPath
def get_testcase(self):
"""
获取需要测试的测试用例
:return:
"""
return self._testCase
def get_email(self):
"""
获取需要测试的测试用例
:return:
"""
return self._email
def get_packagename(self):
"""
获得config配置中的包名
:return:
"""
return self._packageName
def get_apkpath(self):
"""
获取apk的本地路径
:return:
"""
return self._packagePath
def get_deviceslist(self):
"""
获得config配置中的设备列表
:return:
"""
return self._devicesList
def get_installapk(self):
"""
获取是否需要安装开关
:return:
"""
return self._installApk
def get_testtype(self):
"""
获取测试类型开关 1 兼容 0 为分布
:return:
"""
return self._testType
def get_performancetype(self):
"""
获取性能测试开关 1 为打开 0 为关闭
:return:
"""
return self._performanceType
def get_momentdevices(self):
"""
获取当前设备
:return:
"""
return self._momentDevices
def get_devicesname(self):
"""
获取当前设备的ID
:return:
"""
return self._devicesName
def get_activityname(self):
"""
获得config配置中的Activity类名
:return:
"""
return self._activityName
def get_storage_by_excel(self):
"""
获得config配置中的excel配置 1 使用exlce 0 使用json
:return:
"""
return self._storage_by_exce
def get_workdevices(self):
"""
实时读取连接的设备
:return:
"""
deviceslist = []
for devices in os.popen(adb + " devices"):
if "\t" in devices:
if devices.find("emulator") < 0:
if devices.split("\t")[1] == "deviceconnect\n":
deviceslist.append(devices.split("\t")[0])
return deviceslist
def thread_installapk(self):
"""
采用多线程进行安装包操作
:return:
"""
installapk = self.get_installapk()
if installapk == 'False':
return 'Skip'
device = self.get_momentdevices()
try:
installthread = threading.Thread(target=self.install, args=(self,))
installthread.start()
installresult = queue.get()
authorization = threading.Thread(target=self.authorization, args=(self,))
authorization.start()
installthread.join()
authorization.join()
if installresult == "Install Success":
return "Success"
else:
return "Fail"
except Exception as e:
print(e)
pass
def install(self):
"""
实现测试包安装
:return:
"""
devices