Skip to content

Commit

Permalink
update appium to 1.15.1
Browse files Browse the repository at this point in the history
  • Loading branch information
yanchunhuo committed Dec 26, 2019
1 parent 57c40bf commit 8768f7c
Show file tree
Hide file tree
Showing 14 changed files with 298 additions and 128 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
*.idea*
*.pyc*
*.class*
*.idea*
*.metadata*
*output*
*.iml*
*nohup.out*
*uwsgi.pid*
*.pytest_cache*
*common/java/lib/java/libs/*
*config/app_ui_tmp/*
*.vscode*
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
# github https://github.com/yanchunhuo
from appium import webdriver
from base.read_app_ui_config import Read_APP_UI_Config
from base.app_ui.android.demoProject.app_ui_android_demoProject_read_config import APP_UI_Android_DemoProject_Read_Config
from common.appium.appOperator import AppOperator
from common.fileTool import FileTool
from init.app_ui.android.android_init import android_init
import os

class APP_UI_Android_demoProject_Client(object):

__instance=None
Expand All @@ -18,9 +21,16 @@ def __new__(cls, *args, **kwargs):

def __init__(self):
if self.__inited is None:
self._init()
self.config = Read_APP_UI_Config().app_ui_config
self.demoProjectConfig = APP_UI_Android_DemoProject_Read_Config().config
self.driver = webdriver.Remote(self.config.appium_hub,desired_capabilities=self.demoProjectConfig.get_desired_capabilities())
self.appOperator = AppOperator(self.driver)
self.device_info=FileTool.readJsonFromFile('config/app_ui_tmp/'+str(os.getpid()))
self._appium_hub='http://'+self.device_info['server_ip']+':%s/wd/hub'%self.device_info['server_port']
self.driver = webdriver.Remote(self._appium_hub,desired_capabilities=self.device_info['capabilities'])
self.appOperator = AppOperator(self.driver,self._appium_hub)

self.__inited=True

def _init(self):
print('初始化android基础数据......')
android_init()
print('初始化android基础数据完成......')
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,5 @@ def _readConfig(self, configFile):
config = ConfigParser.ConfigParser()
config.read(configFile,encoding='utf-8')
demoProjectConfig = DemoProjectConfig()
demoProjectConfig.platformName = config.get('desired_capabilities','platformName')
demoProjectConfig.automationName = config.get('desired_capabilities','automationName')
demoProjectConfig.platformVersion = config.get('desired_capabilities','platformVersion')
demoProjectConfig.deviceName = config.get('desired_capabilities','deviceName')
demoProjectConfig.appActivity = config.get('desired_capabilities','appActivity')
demoProjectConfig.appPackage = config.get('desired_capabilities','appPackage')
demoProjectConfig.app = config.get('desired_capabilities','app')
demoProjectConfig.init = config.get('isInit','init')
# 将安装包所在位置转为绝对路径
if demoProjectConfig.app:
demoProjectConfig.app = os.path.abspath(demoProjectConfig.app)
return demoProjectConfig
2 changes: 1 addition & 1 deletion base/read_app_ui_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ def _readConfig(self, configFile):
configParser = ConfigParser.ConfigParser()
configParser.read(configFile,encoding='utf-8')
app_ui_config = APP_UI_Config()
app_ui_config.appium_hub=configParser.get('appium_server','appium_hub')
app_ui_config.max_device_pool=configParser.get('test','max_device_pool')
return app_ui_config
46 changes: 46 additions & 0 deletions base/read_app_ui_devices_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# 作者 yanchunhuo
# 创建时间 2019/12/26 11:15
# github https://github.com/yanchunhuo
from pojo.app_ui_devices_info import APP_UI_Devices_Info
import configparser as ConfigParser
import os

class Read_APP_UI_Devices_Info(object):
__instance=None
__inited=None

def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance=object.__new__(cls)
return cls.__instance

def __init__(self,filepath):
if self.__inited is None:
self.devices_info=self._read_devices_info(filepath)
self.__inited=True

def _read_devices_info(self, filepath):
config = ConfigParser.ConfigParser()
config.read(filepath,encoding='utf-8')
devices_info = APP_UI_Devices_Info()
get_lambda=lambda info:list(filter(None,info.split('||'))) if info else []
devices_info.devices_desc=get_lambda(config.get('devices_info','devices_desc',fallback=''))
devices_info.server_ports=get_lambda(config.get('devices_info','server_ports',fallback=''))
devices_info.server_ips = get_lambda(config.get('devices_info', 'server_ips', fallback=''))
devices_info.udids=get_lambda(config.get('devices_info','udids',fallback=''))
devices_info.platformNames = get_lambda(config.get('devices_info', 'platformNames',fallback=''))
devices_info.automationNames = get_lambda(config.get('devices_info', 'automationNames', fallback=''))
devices_info.platformVersions = get_lambda(config.get('devices_info', 'platformVersions', fallback=''))
devices_info.deviceNames = get_lambda(config.get('devices_info', 'deviceNames', fallback=''))
devices_info.chromeDriverPorts = get_lambda(config.get('devices_info', 'chromeDriverPorts', fallback=''))
devices_info.chromeDriverPorts = get_lambda(config.get('devices_info', 'chromeDriverPorts', fallback=''))
devices_info.systemports=get_lambda(config.get('devices_info','systemports', fallback=''))
devices_info.wdaLocalPorts = get_lambda(config.get('devices_info', 'wdaLocalPorts', fallback=''))
devices_info.wdaLocalPorts = get_lambda(config.get('devices_info', 'wdaLocalPorts', fallback=''))
devices_info.appActivity = config.get('devices_info','appActivity')
devices_info.appPackage = config.get('devices_info','appPackage')
devices_info.app = config.get('devices_info','app')
# 将安装包所在位置转为绝对路径
if devices_info.app:
devices_info.app = os.path.abspath(devices_info.app)
return devices_info.get_devices_info()
5 changes: 2 additions & 3 deletions common/appium/appOperator.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ class AppOperator:
类中的element参数可以有appium.webdriver.webelement.WebElement和pojo.elementInfo.ElementInfo类型
"""

def __init__(self,driver):
self._config=Read_APP_UI_Config().app_ui_config
self._doRequest=DoRequest(self._config.appium_hub)
def __init__(self,driver,appium_hub):
self._doRequest=DoRequest(appium_hub)
self._doRequest.setHeaders({'Content-Type':'application/json'})
self._driver=driver
self._session_id=driver.session_id
Expand Down
6 changes: 3 additions & 3 deletions config/app_ui_config.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[appium_server]
appium_hub = http://172.16.52.203:4723/wd/hub

[test]
# 最大设备池,当实际测试设备数大于此配置,会等待池中有空闲设备才进行测试
max_device_pool = 4
43 changes: 43 additions & 0 deletions config/app_ui_devices_info_template.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
[devices_info]
### 本配置支持多设备并行,请使用||分割每一项

# 使用文件创建允许的字符,确保每个设备唯一
devices_desc = xiaomi ||

# 设备id
udids = 127.0.0.1:7555 ||

# 平台名称
platformNames = Android ||

# andorid4.2及以上使用的是UiAutomator和UiAutomator2
# android5.0及以上才能使用UiAutomator2
# 如果要使用UiAutomator2,则设置automationName=UIAutomator2,不使用则放空
automationNames = UiAutomator2 ||

# 系统版本
platformVersions = 6.0.1 ||

# Android此参数会被忽略
deviceNames = Android Emulator ||

# appium 的server ip
server_ips = 172.16.52.203 ||

# appium 的server port,并行设备都在同一个appium server上时确保每个设备唯一
server_ports = 4723 ||

# chromeDriver端口,端口建议从6200开始,并行设备都在同一个appium server上时确保每个设备唯一
chromeDriverPorts = 5200 ||

# systemport,如果使用UiAutomator2;端口范围为8200~8299,使用espresso,端口范围为8300~8399;并行设备都在同一个appium server上时确保每个设备唯一
systemports = 8200 ||

# ios并行测试使用,端口建议从5400开始,不用可注释,并行设备都在同一个appium server上时确保每个设备唯一
# wdaLocalPorts = 5400||

# appActivity、appPackage和app(安装包路径)两者选一,不选的放空,多设备仅需填写一个
# 查看当前应用的的appActivity、appPackage
appPackage = com.moji.mjweather
appActivity = com.moji.mjweather.MainActivity
app =
25 changes: 0 additions & 25 deletions config/demoProject/app_ui_android_demoProject.conf
Original file line number Diff line number Diff line change
@@ -1,28 +1,3 @@
[desired_capabilities]
### 本配置支持多设备并行,请使用||分割每一项
# 使用文件创建允许的字符,确保每个设备唯一
device_desc = xiaomi ||
udid = 127.0.0.1:7555 ||
platformName = Android ||
# andorid4.2及以上使用的是UiAutomator和UiAutomator2
# android5.0及以上才能使用UiAutomator2
# 如果要使用UiAutomator2,则设置automationName=UIAutomator2,不使用这放空
automationName = UiAutomator2 ||
platformVersion = 6.0.1 ||
# Android此参数会被忽略,暂不填写
# deviceName = Android Emulator ||
# appium 的server port,确保每个设备唯一
server_port = 4723 ||
# chromeDriver端口,端口建议从6200开始,确保每个设备唯一
chromeDriverPort = 6200
# systemport,如果使用UiAutomator2;端口范围为8200~8299,使用espresso,端口范围为8300~8399;确保每个设备唯一
systemport = 8200
# appActivity、appPackage和app(安装包路径)两者选一,不选的放空
# 查看当前应用的的appActivity、appPackage
appPackage = com.moji.mjweather ||
appActivity = com.moji.mjweather.MainActivity ||
app =

[isInit]
# 项目名=1 进行初始化
# 项目名=0 不进行初始化
Expand Down
43 changes: 43 additions & 0 deletions config/demoProject/app_ui_devices_info_demoProject.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
[devices_info]
### 本配置支持多设备并行,请使用||分割每一项

# 使用文件创建允许的字符,确保每个设备唯一
devices_desc = xiaomi ||

# 设备id
udids = 127.0.0.1:7555 ||

# 平台名称
platformNames = Android ||

# andorid4.2及以上使用的是UiAutomator和UiAutomator2
# android5.0及以上才能使用UiAutomator2
# 如果要使用UiAutomator2,则设置automationName=UIAutomator2,不使用则放空
automationNames = UiAutomator2 ||

# 系统版本
platformVersions = 6.0.1 ||

# Android此参数会被忽略
deviceNames = Android Emulator ||

# appium 的server ip
server_ips = 172.16.52.203 ||

# appium 的server port,并行设备都在同一个appium server上时确保每个设备唯一
server_ports = 4723 ||

# chromeDriver端口,端口建议从6200开始,并行设备都在同一个appium server上时确保每个设备唯一
chromeDriverPorts = 5200 ||

# systemport,如果使用UiAutomator2;端口范围为8200~8299,使用espresso,端口范围为8300~8399;并行设备都在同一个appium server上时确保每个设备唯一
systemports = 8200 ||

# ios并行测试使用,端口建议从5400开始,不用可注释,并行设备都在同一个appium server上时确保每个设备唯一
# wdaLocalPorts = 5400||

# appActivity、appPackage和app(安装包路径)两者选一,不选的放空,多设备仅需填写一个
# 查看当前应用的的appActivity、appPackage
appPackage = com.moji.mjweather
appActivity = com.moji.mjweather.MainActivity
app =
23 changes: 1 addition & 22 deletions pojo/app_ui/android/demoProject/demoProjectConfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,4 @@
# github https://github.com/yanchunhuo
class DemoProjectConfig:
def __init__(self):
self.platformName = None
self.automationName = None
self.platformVersion = None
self.deviceName = None
self.appActivity = None
self.appPackage = None
self.app = None
self.init = None

def get_desired_capabilities(self):
desired_capabilities={}
desired_capabilities.update({'platformName':self.platformName})
if self.automationName:
desired_capabilities.update({'automationName':self.automationName})
desired_capabilities.update({'platformVersion':self.platformVersion})
desired_capabilities.update({'deviceName':self.deviceName})
if self.appActivity and self.appPackage:
desired_capabilities.update({'appActivity':self.appActivity})
desired_capabilities.update({'appPackage':self.appPackage})
if self.app:
desired_capabilities.update({'app':self.app})
return desired_capabilities
self.init = None
2 changes: 1 addition & 1 deletion pojo/app_ui_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
# github https://github.com/yanchunhuo
class APP_UI_Config:
def __init__(self):
self.appium_hub=None
self.max_device_pool=None
50 changes: 50 additions & 0 deletions pojo/app_ui_devices_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# 作者 yanchunhuo
# 创建时间 2019/12/26 9:17
# github https://github.com/yanchunhuo

class APP_UI_Devices_Info:
def __init__(self):
self.devices_desc = []
self.server_ports = []
self.server_ips = []
self.udids = []
self.platformNames = []
self.automationNames = []
self.platformVersions = []
self.deviceNames = []
self.chromeDriverPorts = []
self.systemports = []
self.wdaLocalPorts = []
self.appPackage = None
self.appActivity = None
self.app = None

def get_devices_info(self):
devices_info = []
for i in range(len(self.devices_desc)):
device_info={}
device_info.update({'device_desc':self.devices_desc[i].strip()})
device_info.update({'server_port':self.server_ports[i].strip()})
device_info.update({'server_ip':self.server_ips[i].strip()})
# 构建desired_capabilities
desired_capabilities={}
desired_capabilities.update({'udid':self.udids[i].strip()})
desired_capabilities.update({'platformName': self.platformNames[i].strip()})
if len(self.automationNames):
desired_capabilities.update({'automationName': self.automationNames[i].strip()})
desired_capabilities.update({'platformVersion': self.platformVersions[i].strip()})
if len(self.deviceNames):
desired_capabilities.update({'deviceName': self.deviceNames[i].strip()})
desired_capabilities.update({'chromeDriverPort':self.chromeDriverPorts[i].strip()})
desired_capabilities.update({'systemport': self.systemports[i].strip()})
if len(self.wdaLocalPorts):
desired_capabilities.update({'wdaLocalPort': self.wdaLocalPorts[i].strip()})
if self.appActivity and self.appPackage:
desired_capabilities.update({'appActivity': self.appActivity.strip()})
desired_capabilities.update({'appPackage': self.appPackage.strip()})
if self.app:
desired_capabilities.update({'app': self.app.strip()})
device_info.update({'capabilities':desired_capabilities})
# 完成一台设备构建
devices_info.append(device_info)
return devices_info
Loading

0 comments on commit 8768f7c

Please sign in to comment.