來自APP Android端自動化測試初學(xué)者的筆記救恨,寫的不對的地方大家多多指教哦
測試環(huán)境
并發(fā)啟動2個appium服務(wù)岩睁,再并發(fā)啟動2臺設(shè)備測試微博APP(V10.12.0)
2個appium服務(wù)吁恍,端口配置如下:
- Appium服務(wù)器端口:4723,bp端口為4724
- Appium服務(wù)器端口:4725,bp端口為4726
2臺設(shè)備:
- U4AIUKFAL7W4MJLR
- U4AIUKFAL7W4MHUHUDS
測試app:微博APP(V10.12.0)Andriod版
這部分的代碼需要跟前面三篇文章:多設(shè)備啟動蓝纲;python啟動appium服務(wù)抄邀;檢測端口占用和釋放端口整合在一起耘眨,先檢測端口是否占用,再啟動appium服務(wù)境肾,最后分配設(shè)備啟動app剔难。
# Appium并發(fā)測試(多進(jìn)程并發(fā)啟動appium服務(wù),多進(jìn)程并發(fā)啟動設(shè)備奥喻,檢測和釋放端口)
import multiprocessing
import time
from appium import webdriver
from appium_sync.check_port_use import CheckPortUse
from appium_sync.check_port_release import CheckPortRelease
from appium_sync.multi_appium import MultiAppium
from appium_sync.multi_devices import MultiDevices
class AppiumDevices:
driver: webdriver = None
devices_list = ['U4AIUKFAL7W4MJLR', 'U4AIUKFAL7W4MHUHUDS']
"""初始化類"""
def __init__(self):
self.check_port_use = CheckPortUse()
self.check_port_release = CheckPortRelease()
self.multi_appium = MultiAppium()
self.multi_devices = MultiDevices()
'''檢測端口是否被占用偶宫,如果沒有被占用則啟動appium服務(wù),被占用則釋放端口'''
def start_appium_action(self, host, port):
if self.check_port_use.use_port(host, port):
time.sleep(0.5)
self.multi_appium.appium_start(host, port)
return True
else:
self.check_port_release.release_port(port)
self.start_appium_action(host, port)
'''先檢測appium服務(wù)端口是否被占用环鲤,占用則啟動APP纯趋,沒有占用則啟動appium服務(wù)'''
def start_devices_action(self, udid, port):
host = '127.0.0.1'
if self.check_port_use.use_port(host, port) is not True:
self.multi_devices.appium_desire(udid, port)
else:
self.multi_appium.appium_start(host, port)
'''并發(fā)啟動appium服務(wù)'''
def appium_start_sync(self):
print('====appium_start_sync=====')
# 構(gòu)建appium進(jìn)程組
appium_process = []
# 加載appium進(jìn)程
for i in range(len(AppiumDevices.devices_list)):
host = '127.0.0.1'
port = 4723 + 2 * i
appium = multiprocessing.Process(target=self.start_appium_action, args=(host, port))
appium_process.append(appium)
# 啟動appium服務(wù)
for appium in appium_process:
appium.start()
for appium in appium_process:
appium.join()
time.sleep(5)
'''并發(fā)啟動設(shè)備'''
def devices_start_sync(self):
print('===devices_start_sync===')
# 定義desired進(jìn)程組
desired_process = []
# 加載desired進(jìn)程
for i in range(len(AppiumDevices.devices_list)):
port = 4723 + 2 * i
desired = multiprocessing.Process(target=self.start_devices_action,
args=(AppiumDevices.devices_list[i], port))
desired_process.append(desired)
# 并發(fā)啟動App
for desired in desired_process:
desired.start()
for desired in desired_process:
desired.join()
if __name__ == '__main__':
appium_devices = AppiumDevices()
appium_devices.appium_start_sync()
appium_devices.devices_start_sync()
appium_devices.check_port_release.release_port('4723')
appium_devices.check_port_release.release_port('4725')