需求:模擬用戶打開APP的操作,記錄啓動用時
# -*- coding: utf-8 -*-
# @Author : sunyue
'''
本腳本測試app的單個冷啓動時間
整體思路:啓動前記錄當前時間,啓動後識別到目標控件記錄當前時間,兩次時間相減即爲啓動時間
'''
from appium import webdriver
from datetime import datetime
import time
from selenium.webdriver.support.ui import WebDriverWait
class bv_start:
def platform(self, Version, Package, Activity):
desired_caps={}
desired_caps['platformName'] = 'Android' #平臺名稱
desired_caps['deviceName'] = 'aaa' #設備名稱
desired_caps['platformVersion'] = Version #平臺版本
desired_caps['appPackage'] = Package #包名
desired_caps['appActivity'] = Activity #包入口
desired_caps['noReset'] = True #不重置狀態
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #啓動服務/通過4723端口來建立一個會話
self.driver = driver
time.sleep(3) #等待3s
def execute(self, t, name, check):
'''
:param t: 表示需要測試的次數,
:param name:測試應用安裝在手機上後在手機上顯示的應用名稱
:param check:識別的控件,設置需要識別的控件,識別到就記錄當前時間
'''
self.driver.keyevent(3)
Total_time = []
for i in range(t):
WebDriverWait(self.driver, 60).until(lambda x: x.find_element_by_android_uiautomator('new UiSelector().text("%s")'%(name)))
self.driver.find_element_by_android_uiautomator('new UiSelector().text("%s")'%(name)).click() #點擊啓動APP
start_time = datetime.now() #獲取啓動前用時
while True: #循環的查找界面上的控件直到找到需要的停止並記錄時間
Str = self.driver.page_source
keyword = check
if keyword in Str:
last_time = datetime.now() #獲取啓動後用時
break
t = last_time - start_time #得到總用時
rt = str(t).split(":") # 通過split函數對總用時進行切割,用來提取秒和毫秒,產生一個列表rt
a = int(rt[1]) * 60 # 提取分鐘
r = float(rt[2]) # 提取到秒和毫秒
run_time = a + r
Total_time.append(run_time)
self.driver.keyevent(3)
print(Total_time)
if __name__ == "__main__":
wb = bv_start()
wb.platform('9', 'com.google.android.apps.messaging', 'com.google.android.apps.messaging.ui.ConversationListActivity')
wb.execute(5, '微博', '首頁') #測試5次求平均值