摘要:的框架是網(wǎng)易團隊自己開發(fā)的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言。基本操作方法除了跨平臺的還有平臺特定的,比如安卓平臺蘋果平臺平臺這里我們來詳細說說這些模塊。
Airtest是網(wǎng)易出品的一款基于圖像識別和poco控件識別的一款UI自動化測試工具。Airtest的框架是網(wǎng)易團隊自己開發(fā)的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言Sikuli。Sikuli這個框架的原理是這樣的,計算機用戶不需要一行行的去寫代碼,而是用屏幕截屏的方式,用截出來的圖形擺列組合成神器的程序,這是Airtest的一部分。
另外,Airtest也基于poco這個U控件搜索框架,這個框架也是網(wǎng)易自家的跨平臺U測試框架,原理類似于appium,通過控件的名稱,id之類的來定位目標控件,然后調(diào)用函數(shù)方法,例如click(),swip()之類的方法來對目標控件進行點擊或者是操作。
概念:自動化測試,就是把繁雜的人工測試用例利用自動化測試工具編寫成代碼,讓機器代替人工自動跑用例的過程。實際上就是把以人為驅動的測試行為轉化為機器執(zhí)行的一種過程。
意義:節(jié)省人力、物力、時間、硬件資源等,提升測試效率,特別對于繁瑣重復的測試用例,可以使測試人員更專注于新的測試模塊的建立和開發(fā),從而提高測試覆蓋率。
以上主流工具的優(yōu)點跟缺點:
相較于以上工具來說,Airtest有以下優(yōu)點和缺點:
所以其實基于圖像識別的Airtest更適合用于游戲測試多一點。
1、AirtestIDE的下載
AirtestIDE已經(jīng)幫你集成了所有的環(huán)境,自帶錄制腳本欄,自動生成腳本,自帶編輯器還自帶模擬器,有了一個AirtestIDE就可以輕松簡單的錄制腳本了。下載地址是Airtest的官網(wǎng):
http://airtest.netease.com/
AirtestIDE的使用教程跟文檔也在下面的連接中:
https://airtest.doc.io.netease.com/
使用AirtestIDE對Android應用進行自動化測試時,第一步就需要連接Android設備。
Android真機連接準備:
如果遇到連接問題,請查閱Android連接常見問題:https://airtest.doc.io.netease.com/IDEdocs/faq/1_common%20problems/
手機連上Airtest之后,會向手機中安裝2個app,如下:
pocoservice是支撐poco操作的app,yosemite是airtest的輸入法,安裝之后,手機的默認輸入法會變成這個輸入法,如果需要改回來原來的輸入法,需要手動到手機設置里面進行修改;
參考:使用adb無線連接手機
當手機與電腦處在同一個wifi下,即可嘗試無線連接手機了,但是這種方式受限于網(wǎng)絡連接的穩(wěn)定性,可能會出現(xiàn)連接不夠穩(wěn)定的情況。具體連接操作步驟如下:
點擊錄制按鈕,選擇事件進行錄制,可以用鼠標操作
介紹一下錄制時每一個參數(shù)的作用
可以按照需要的參數(shù)進行配置
在下載解壓 Airtest 腳本的專屬 IDE——AirtestIDE 后,點擊 “新建腳本” 按鈕,默認即可創(chuàng)建一個后綴名為.air
的腳本文件,.air
這是 Airtest 腳本的專屬后綴。
讓我們打開剛才新建腳本的文件夾,可以看到實際上.air
腳本文件是一個普通的文件夾,里面附帶了一個同名的.py
文件,AirtestIDE 在執(zhí)行腳本時,實際上執(zhí)行的是里面的.py
文件。也就是說,Airtest 腳本雖然自帶一個后綴名,然而本質上依然是 Python 腳本,遵循的是 Python 語法,我們可以根據(jù)實際需要自由地import其他 Python 第三方庫。
值得注意的是,.air
文件夾中必須要有同名的.py
文件,否則在命令行執(zhí)行airtest run test.air
這樣的運行指令時會導致失敗。
首先,就像一個普通的 Python 腳本一樣,我們需要在代碼文件的最開頭部分,寫上from airtest.core.api import *
,將 Airtest 的主要 API 都 import 進來,以便在后續(xù)腳本中使用這些 API。
auto_setup
?是一個用來初始化環(huán)境的接口,接口文檔在這里,它接受 4 個參數(shù),我們可以設置當前腳本所在的路徑、指定運行腳本的設備、設置默認的 log 路徑和設置腳本父路徑。
auto_setup
不傳入任何參數(shù)的話,Airtest 將會讀取運行時命令行中傳入的各項參數(shù),來對環(huán)境進行初始化。auto_setup(__file__)
,意思是將腳本文件作為腳本路徑傳入,其他參數(shù)內(nèi)容將默認讀取運行命令行傳入的參數(shù)。腳本運行命令行有兩種形式,命令行中的參數(shù)包含device
、log
等:
>airtest run untitled.air --device Android:///手機設備號 --log log/
。"D:/AirtestIDE-path/AirtestIDE" runner "D:/script-path/untitled.air" --device Android://127.0.0.1:5037/5PZTQWQOGES8RWUG --log "C:/Users/username/AppData/Local/Temp/AirtestIDE/scripts/aa8c71acdfa70c3068b862cb42ffb8dc"
--device Android:///
這樣的設備參數(shù),那么腳本在初始化時會自動連上對應的設備,不需要再另外寫代碼連接了。connect_device
接口來連接設備。set_current
接口可以在多個設備中進行切換,device()
接口可以獲取到當前使用中的設備。Airtest 作為自動化測試框架,模擬的是人的操作,常見接口主要有:
touch
?點擊某個位置,可以設定被點擊的位置、次數(shù)、按住時長等參數(shù)swipe
?從一個位置滑動到另外一個位置text
?調(diào)用輸入法輸入指定內(nèi)容keyevent
?輸入某個按鍵響應,例如回車鍵、刪除鍵wait
?等待某個指定的圖片元素出現(xiàn)snapshot
?對當前畫面截一張圖核心 API 請參見這個文檔,在這個文檔頁里出現(xiàn)的 API 都是跨平臺 API,由于我們在代碼的第一行里將airtest.core.api
里的接口全部import
進來了,因此這些 API 可以在代碼里直接進行調(diào)用,像這樣:
from airtest.core.api import *touch((x, y))
在很多接口中,支持傳入Template
圖片對象作為參數(shù),在運行時將會去點擊圖片在畫面中的所在位置,類似這樣:
# 等價于 touch((x, y)), (x, y)是圖片所在的中心點touch(Template(r"tpl1556019871196.png", record_pos=(0.204, -0.153), resolution=(1280, 720)))
其中,Template
對象是一個圖片類,Airtest 會先嘗試在當前畫面中尋找能夠匹配這張圖片的位置,如果找到了,將對這個坐標進行點擊操作,如果找不到,將拋出識別異常。我們將在后文對Template
圖片類進行更加詳細的介紹。
1)使用 pip 安裝Airtest框架 pip install airtest
2)若運行代碼時,在cv2模塊報 ImportError: DLL load failed: 找不到指定模塊 的錯,如果使用的python版本低于3.7,請直接運行:
pip uninstall opencv-contrib-python# 若以下安裝語句運行失敗,可以嘗試更新pip到最新版本后重試pip install opencv-contrib-python==3.2.0.7
3)Poco安裝
使用 pip 安裝poco框架 pip install pocoui
,請注意庫的名稱為 pocoui
,不要填錯。
除了跨平臺的API還有平臺特定的API,比如:
airtest.core.android #安卓平臺airtest.core.ios #蘋果平臺airtest.core.win #Windows平臺
這里我們來詳細說說這些模塊。
跨平臺API模塊
這里我們要介紹的第一個就是跨平臺模塊:
from airtest.core.api import * #導入所有方法
1).初始化設備
這里初始化設備我們也有兩種方案,下面請看:
根據(jù)設備的UUID來初始化
語法格式:
init_device(platform="Android",uuid="",cap_method=JAVACAP for Android)#平臺 – Android,IOS或Windows#uuid –目標設備的uuid,例如,用于Android的serialno,用于Windows的handle,用于iOS的uuid#kwargs –可選的平臺特定關鍵字args,例如cap_method = JAVACAP for Android
下面我們來列舉一下實例,如下:
init_device(platform="Android",uuid="127.0.0.1:62001",cap_method="JAVACAP")
根據(jù)設備的URL來初始化
語法格式如下:
android:/// 連接當前安卓設備android://adbhost:adbport/serial NO.?cap_method=javacap&touch_method=adbwindows:/// 連接本地桌面程序ios:/// 連接IOS設備
這里我們主要是傳入了ADB地址,端口和連接的夜神模擬器的序列號而連接上的。具體例子如下:
connect_device("android://127.0.0.1:5037/127.0.0.1:62001?cap_method=javacap&touch_method=adb")
2).返回當前活動設備
device()
3).設置當前活動設備
有時候如果我們連接了多個設備,我們需要切換的話,就是用這個函數(shù)來達到目的,可以使用設備的索引或者設備的序列號來進行切換哦。
set_current(0)set_current("127.0.0.1:62001")
4).運行環(huán)境配置
auto_setup(basedir = None,devices = None,logdir = None,project_root = None,compress = 0 )basedir 設置當前腳本的所在位置,__file__也可以。devices 指定運行腳本的設備以列表形式存在logdir 設置腳本運行時的日志保存路徑,默認為None,設為True可保存project_root 設置api的項目根目錄
5).開啟并執(zhí)行遠程Shell命令
shell(cmd) #ls / data / local / tmp
6).在設備上啟動程序
start_app("啟動的應用程序包名")
7).在設備上停止程序
stop_app("啟動的應用程序包名")
8).清除設備上的應用程序數(shù)據(jù)
clear_app("啟動的應用程序包名")
9).在設備上安裝應用程序
install(filepath="要在目標設備上安裝的文件的路徑")
10).在設備上卸載應用程序
uninstall("應用程序包名")
11).截圖并保存到文件中
snapshot(filename="1.jpg",msg="hello",quality=3)filename:圖片名msg:屏幕截圖的簡短描述quality:圖像質量,范圍為[1,99]的整數(shù)
12).喚醒并解鎖設備
wake("設備")
13).返回目標設備的主屏幕
home("設備")
14).設備屏幕上執(zhí)行點擊,滑動,捏,按鍵,輸入操作
click(v=Template(x,y),times=2) #單擊v:觸摸目標,可以是Template實例,也可以是絕對坐標(x,y)times:執(zhí)行多少次觸摸double_click() #雙擊swipe(v1,v2)#滑動起點和終點swipe(v1,vector=(x,y))#沿向量移動,向量可以是坐標也可以是屏幕百分比#返回值:原點位置和目標位置pinch()#捏操作,相當于縮放,參數(shù)如下:in_or_out:放大或縮小center:默認為None表示屏幕中心percent:捏動作的屏幕比例,默認值為0.5 keyevent(keyname="Home")#按鍵操作text("文本")#在設備上輸入文本
15).睡眠,等待
sleep(2)#睡眠兩秒,延遲兩秒wait(v,timeout,interval,intervalfunc)#等待與設備屏幕上的模板匹配v:等待的目標對象timeout:超時時間interval:嘗試找到匹配項的時間間隔(秒)intervalfunc:在每次未成功嘗試找到相應匹配項后調(diào)用返回值:匹配目標的坐標
16).檢查給定目標在設備屏幕上是否存在
exists(v)v:檢查對象如果找不到目標,則為False,否則返回目標的坐標
17).在設備屏幕上查找所有出現(xiàn)的目標并返回其坐標
find_all(v)v:尋找目標返回坐標列表
18).斷言操作
assert_exists(v,msg) #斷言目標存在于設備屏幕上assert_not_exists(v,msg) #斷言目標在設備屏幕上不存在v:要檢查的目標msg:斷言的簡短描述assert_equal(v1,v2,msg) #斷言兩個值相等assert_not_equal(v1,v2,msg) #斷言兩個值不相等v1:第一個值v2:第二個值msg:斷言的簡短描述
這里基本上我們就把使用方法說完了,下面我們來進行下實際操作,下一篇文章即將奉上。
from airtest.core.api import *# 通過ADB連接本地Android設備connect_device("Android:///")#安裝待測軟件apk,路徑信息。install("path/to/your/apk")#開始運行appstart_app("com.pingan.certicationApp")#點擊某個圖片,Airtest中基于圖像識別語法,圖片自己提供。touch(Template("image_of_a_button.png"))#滑動語音,開頭圖片跟結尾圖片swipe(Template("slide_start.png"), Template("slide_end.png"))#添加斷言的圖片assert_exists(Template("success.png"))#點擊Android上的返回鍵#keyevent("BACK")#點擊Android上的Home鍵返回#home()#uninstall("package_name_of_your_apk")
# -*- encoding=utf8 -*-__author__ = "enmonster"from airtest.core.api import *auto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPocopoco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)poco("com.miui.home:id/workspace").offspring("計算器").offspring("com.miui.home:id/icon_icon").click()poco("com.miui.calculator:id/btn_c_s").click()poco("com.miui.calculator:id/digit_7").click()poco("com.miui.calculator:id/op_add").click()poco("com.miui.calculator:id/digit_5").click()poco("com.miui.calculator:id/btn_equal_s").click()
poco輔助窗
poco是通過元素本身的屬性來定位元素,常用的API如下:
attr(‘type’):提取指定元素屬性為type的值
get_text(): 提取指定元素的文本內(nèi)容
attr(‘text’): 通過給定的屬性名檢索ui元素的屬性。如果屬性不存在,則返回none(屬性有visible、text、type、pos、size、name等)
exists():判斷指定元素是否在當前屏幕上存在,存在true、不存在false
click(): 點擊事件,可使用click(center)、click([0.5,0.5])、focus([0.5,0.5]).click()來點擊控件中心位置
rclick():右鍵點擊
double_click():雙擊操作
long_click():長按操作
swipe:滑動事件,如:swipe([0.2, -0.2], duration=1)以45度角滑動,持續(xù)1秒鐘
drag:拖拽事件,如:poco(text=‘需要拖動位置’).drag_to(poco(text=‘目標位置’))
focus (local positioning):局部定位,如:poco(‘控件地址’).focus(‘center’).click()點擊控件中間位置
wait:等待事件,如:poco(‘控件地址’).wait(2).click() 控件出現(xiàn)就點擊,最多等待2秒
如果case中涉及到兩個手機交互的,可以在.py文件中連接多個手機,需要在哪個手機上操作,就需要在腳本中使用set_cerrent()借口來切換到相應的手機上;
device1 = "c17a4cb4" #設備1device2 = "RKK0217C15003363" #設備2dev1 = connect_device("android://127.0.0.1:5037/"+device1)#連接設備1dev2 = connect_device("android://127.0.0.1:5037/"+device2)#連接設備2poco1 = AndroidUiautomationPoco(dev1) #初始化設備1poco2 = AndroidUiautomationPoco(dev2) #初始化設備2set_current(device1)#切換到手機1set_current(device2)切換到手機2
初始化設備之后就可以進行相關設備的poco操作了,舉個例子:
這個例子是打開微信,點擊聊天信息中的一個好友,然后清除好友聊天的例子;
from poco.drivers.android.uiautomation import AndroidUiautomationPocodevice1 = "c17a4cb4" #設備號dev1 = connect_device("android://127.0.0.1:5037/"+device1)#連接師傅手機poco1 = AndroidUiautomationPoco(dev1) #實例化手機auto_setup(__file__) def clear_wechat(poco):#清除微信的聊天記錄 start_app("com.tencent.mm")#啟動微信 sleep(12)#等待12秒 poco1(text="三星").click()#點擊好友“三星”的聊天 poco1("android.support.v7.widget.LinearLayoutCompat").click()#點擊更多 poco1(text="清空聊天記錄").click()#點擊清空聊天記錄 poco1(text="清空").click()#點擊清空 stop_app("com.tencent.mm")#關閉微信
如果有很多重復的操作,可以將這些重復的操作寫到一個公用的air文件里面,然后再在用例里面引用這個公用的air文件的方法就可以:
舉例,有一個名叫gongyou.air的文件,里面有一個clear_wechat的方法,這個clear_wechat方法就是一個清除微信聊天記錄的用例,如果需要在用例中用到這個clear_wechat,就需要在用例中引用這個文件,然后倒入這個引用文件中的clear_wechat方法,如下:
# -*- encoding=utf8 -*-__author__ = "xhong"from airtest.core.api import *from poco.drivers.android.uiautomation import AndroidUiautomationPocofrom poco.exceptions import PocoNoSuchNodeExceptionfrom poco.exceptions import PocoTargetTimeoutST.PROJECT_ROOT = "D:/code/AirtestCase"#引用公用air的路徑using("gongyou.air")from gongyou import clear_wechat
參考:https://www.jianshu.com/p/32d08455e86f
https://blog.csdn.net/sunxitao970324/article/details/105731046
http://testerhome.com/topics/20704
https://cloud.tencent.com/developer/article/1819833
https://zhuanlan.zhihu.com/p/165527546
https://blog.csdn.net/chqj_163/article/details/109242399
AirtestIDE連接安卓真機及常見問題:
https://www.cnblogs.com/songzhenhua/p/14716116.html
airtest連接設備黑屏或者運行報錯minicap超時問題:
https://blog.csdn.net/qq_32394351/article/details/112512540
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122497.html
摘要:首先要打開微信,進入到指定的群聊,識別微信紅包執(zhí)行搶紅包的動作。是一款基于控件識別的自動化測試框架,目前支持原生原生微信小程序,也可以在其他引擎中自行接入來使用。 showImg(https://segmentfault.com/img/remote/1460000019438856); 目錄:0 引言1 環(huán)境2 需求分析3 前置準備4 搶紅包流程回顧5 代碼梳理6 后記 0 引言 提...
摘要:代碼運行完成以后,微信被打開了。能不能像前面打開知乎一樣,使用這個屬性呢也行,也不行。滑動屏幕使用的命令為,滑動屏幕需要使用坐標信息。單獨使用控制手機在 想開發(fā)網(wǎng)頁爬蟲,發(fā)現(xiàn)被反爬了?想對 App 抓包,發(fā)現(xiàn)數(shù)據(jù)被加密了?不要擔心,使用 Airtest 開發(fā) App 爬蟲,只要人眼能看到,你就能抓到,最快只需要2分鐘,兼容 Unity3D、Cocos2dx-*、Android 原生 A...
摘要:三性能測試工具官網(wǎng)介紹騰訊開源的的隨身調(diào)測平臺,支持和。官網(wǎng)介紹騰訊游戲部門開發(fā)的移動全平臺性能測試分析工具平臺。百度的服務目前主要為收費服務。 隨著移動互聯(lián)網(wǎng)的高速發(fā)展,App 應用非常火,測試工程師也會接觸到各種 app 應用。除了人工測試之外,也可以通過一些測試工具來提高我們的測試效率...
摘要:為什么說軟件測試絕不是一件容易的事從以下幾個方面分析。要學習的軟件測試基礎理論多,必須要打好扎實的理論基礎。 為什么說軟件測試絕不是一件容易的事?從以下幾個方面分析...
閱讀 1341·2023-04-25 23:42
閱讀 2808·2021-11-19 09:40
閱讀 3520·2021-10-19 11:44
閱讀 3529·2021-10-14 09:42
閱讀 1860·2021-10-13 09:39
閱讀 3821·2021-09-22 15:43
閱讀 665·2019-08-30 15:54
閱讀 1448·2019-08-26 13:32