自動化測試應該如何實現多執行緒?
// 程式 //
程式就是一個程式在一個資料集上的一次動態執行過程,我們編寫的程式用來描述程式要完成哪些功能以及如何完成。
// 執行緒 //
執行緒頁尾輕量級程式,他是一個基本的 CPU執行單元,是程式中的實現,執行緒的出現是為了降低上下文切換的小號,提高系統的併發性。
// 執行緒與程式 //
一個執行緒只能屬於一個程式,而一個程式可以有多個執行緒。
但是少有一個執行緒資源分配給程式,同一程式的所有執行緒共享該程式的所有資源 。
CPU分給執行緒,即真正在CPU上執行的執行緒。
// 多執行緒原理應用 //
1 並行與併發
並行:每個執行緒分配給獨立的核心,執行緒同時執行。
併發:多個執行緒在單個核心執行,統一時間一個執行緒執行,系統不停切換執行緒,看起來像是同時執行,實際上是執行緒不停切換。
2 Python的多執行緒
GIL 全域性計時器鎖:摸個執行緒想要執行必須先拿到GIL。
Python的多執行緒:其實同一時間只能執行一個執行緒,但是能實現併發。
3 Python多執行緒應用
不同程式碼執行效率不一樣,我們可以透過多執行緒,形成併發,實現提高效率。
案例: Web自動化,其實 CPU執行完一次命令,大部分時間是在等待,那麼這段時間,CPU會限制或者做其他程式的任務,因此我們可以使用多執行緒,實現多瀏覽器自動化同時執行,從而實現高效率。
from
appium
import
webdriver
from
appium.webdriver.extensions.android.nativekey
import
AndroidKey
from
appium.webdriver.common.touch_action
import
TouchAction
from
selenium.webdriver.support.wait
import
WebDriverWait
import
time
from
ddt
import
ddt,data,unpack
import
threading
data_sum = [ {
'sum_a'
:
2
,
'sum_b'
:
3
}, {
'sum_a'
:
2
,
'sum_b'
:
3
}, {
'sum_a'
:
5
,
'sum_b'
:
10
}]
def
run_first
(): desired_caps = {
'platformName'
:
'Android'
,
# 被測手機是安卓
'platformVersion'
:
'7.1.2'
,
# 手機安卓版本
'deviceName'
:
'xiaomi_mix'
,
# 裝置名,安卓手機可以隨意填寫
'appPackage'
:
'com.chinatower.fghd.customer'
,
# 啟動APP Package名稱
'appActivity'
:
'com.ckd.fgbattery.activity.User_Login_Activity'
,
# 啟動Activity名稱
'unicodeKeyboard'
:
True
,
# 使用自帶輸入法,輸入中文時填True
'resetKeyboard'
:
True
,
# 執行完程式恢復原來輸入法
'noReset'
:
True
,
# 不要重置App
'newCommandTimeout'
:
5000
,
'UDID'
:
'127.0.0.1:62001'
,
'automationName'
:
'uiAutomator2'
# 'app': r'd:\apk\bili.apk',
} driver = webdriver.Remote(
'
, desired_caps)
#login_pwd(1,1)
pwd = driver.find_element_by_xpath(
'//*[@text = "密碼登入"]'
) print(pwd.get_attribute(
'text'
)) TouchAction(driver).tap(pwd).perform() pwd.click() driver.find_element_by_id(
"user_phone_et"
).send_keys(
'1'
) driver.find_element_by_id(
"sms_code_et"
).send_keys(
'1'
) driver.find_element_by_id(
"btn_res"
).click()
# 登入錯誤時,無法跳轉進入頁面
try
: WebDriverWait(driver,
3
,
1
).until(
lambda
x: x.find_element_by_xpath(
"//*[@text='掃碼換電']"
)) scan = driver.find_elements_by_xpath(
"//*[@text='掃碼換電']"
)
if
scan: print(
"登入成功"
)
return
True
except
: print(
"登入失敗"
)
return
False
def
run_two
(): desired_caps_and5 = {
'platformName'
:
'Android'
,
# 被測手機是安卓
'platformVersion'
:
'5.1.1'
,
# 手機安卓版本
'deviceName'
:
'HuaWei P30'
,
# 裝置名,安卓手機可以隨意填寫
'appPackage'
:
'com.chinatower.fghd.customer'
,
# 啟動APP Package名稱
'appActivity'
:
'com.ckd.fgbattery.activity.User_Login_Activity'
,
# 啟動Activity名稱
'unicodeKeyboard'
:
True
,
# 使用自帶輸入法,輸入中文時填True
'resetKeyboard'
:
True
,
# 執行完程式恢復原來輸入法
'noReset'
:
True
,
# 不要重置App
'newCommandTimeout'
:
5000
,
'UDID'
:
'127.0.0.1:62026'
,
'automationName'
:
'uiAutomator2'
# 'app': r'd:\apk\bili.apk',
} driver2 = webdriver.Remote(
'
, desired_caps_and5)
#login_pwd(2,2)
time.sleep(
10
) print(
"第二個"
) pwd = driver2.find_element_by_xpath(
'//*[@text = "密碼登入"]'
) print(pwd.get_attribute(
'text'
)) TouchAction(driver2).tap(pwd).perform() pwd.click() driver2.find_element_by_id(
"user_phone_et"
).send_keys(
'1'
) driver2.find_element_by_id(
"sms_code_et"
).send_keys(
'2'
) driver2.find_element_by_id(
"btn_res"
).click()
# 登入錯誤時,無法跳轉進入頁面
try
: WebDriverWait(driver2,
3
,
1
).until(
lambda
x: x.find_element_by_xpath(
"//*[@text='掃碼換電']"
)) scan = driver2.find_elements_by_xpath(
"//*[@text='掃碼換電']"
)
if
scan: print(
"登入成功"
)
return
True
except
: print(
"登入失敗"
)
return
False
# @data(*data_sum)
# @unpack# def login_pwd(sum_a,sum_b):# pwd = driver.find_element_by_xpath('//*[@text = "密碼登入"]')# print(pwd.get_attribute('text'))# TouchAction(self.driver).tap(pwd).perform()# pwd.click()# driver.find_element_by_id("user_phone_et").send_keys(sum_a)# driver.find_element_by_id("sms_code_et").send_keys(sum_b)# driver.find_element_by_id("btn_res").click()# # 登入錯誤時,無法跳轉進入頁面# try:# WebDriverWait(driver, 3, 1).until(lambda x: x.find_element_by_xpath("//*[@text='掃碼換電']"))# scan = driver.find_elements_by_xpath("//*[@text='掃碼換電']")# if scan:# print("登入成功")# return True# except:# print("登入失敗")# return False
## # 連線Appium Server,初始化自動化環境# driver = webdriver.Remote(', desired_caps)# driver_p = webdriver.Remote(', desired_caps_and5)## login_pwd(driver,1,1)# login_pwd(driver_p,2,2)
if
__name__ ==
'__main__'
: t1 = threading.Thread(target=run_first,name =
'thread1'
) t2 = threading.Thread(target=run_two,name=
'thread2'
) start_time = time.time() t1.start() t1.join() t2.start() print(
"當前活躍的執行緒有:{}"
.format(threading.current_thread()))
print(
"正在執行的所有執行緒:{}"
.format(threading.enumerate()))
print(
"正在執行的執行緒數量:{}"
.format(threading.active_count()))
t2.join() end_time = time.time() print(
"程式執行耗時:{}"
.format(end_time - start_time))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2895149/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- app 自動化測試 - 多裝置併發 -appium+pytest+ 多執行緒APP執行緒
- 如何實現多執行緒執行緒
- TestNg之XMl形式實現多執行緒測試XML執行緒
- JavaScript如何實現多執行緒?JavaScript執行緒
- 如何實現高度自動化測試?
- 面試-實現多執行緒的方式面試執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- php實現自動化執行環境檢測PHP
- 自動化測試如何實現全面覆蓋
- Ios+appium自動化多裝置執行實現iOSAPP
- 【QT】子類化QThread實現多執行緒QTthread執行緒
- 請問自動化測試應該測試非法資料嗎
- 你應該會的一道多執行緒筆試題執行緒筆試
- 多執行緒實現多工二執行緒
- 多執行緒實現多工一執行緒
- 如何從測試自動化中實現價值
- Flutter應用進行自動化測試Flutter
- Java多執行緒的實現Java執行緒
- Java多執行緒實現方式Java執行緒
- 【unity】 Loom實現多執行緒UnityOOM執行緒
- Runnable介面實現多執行緒執行緒
- 多執行緒具體實現執行緒
- Postman實現UI自動化測試PostmanUI
- 多執行緒,到底該設定多少個執行緒?執行緒
- 單執行緒的JS如何實現多個互動同時進行執行緒JS
- API自動化測試平臺,高效實現對API的自動化測試API
- 【QT】子類化QObject+moveToThread實現多執行緒QTObjectthread執行緒
- Jenkins Pipelines+Docker執行RobotFramework自動化測試JenkinsDockerFramework
- 用python實現selenium 自動化測試Python
- postman實現介面的自動化測試Postman
- 使用 Postman 實現 API 自動化測試PostmanAPI
- 多執行緒應用執行緒
- 多執行緒爬蟲實現(上)執行緒爬蟲
- 用Pthread實現多執行緒操作thread執行緒
- 【連載 02】多執行緒實現執行緒
- 做自動化測試時開啟多執行緒,怎麼解決日誌混亂的問題??執行緒
- 多執行緒伺服器壓力測試執行緒伺服器
- 開源多執行緒效能測試工具-sysbench執行緒