国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[1054]Airtest的探索使用

AndroidTraveler / 3528人閱讀

摘要:的框架是網(wǎng)易團隊自己開發(fā)的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言。基本操作方法除了跨平臺的還有平臺特定的,比如安卓平臺蘋果平臺平臺這里我們來詳細說說這些模塊。

Airtest的簡介

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ā),從而提高測試覆蓋率。

市面上常見的UI自動化測試工具以及優(yōu)缺點

以上主流工具的優(yōu)點跟缺點:

相較于以上工具來說,Airtest有以下優(yōu)點和缺點:

所以其實基于圖像識別的Airtest更適合用于游戲測試多一點。

環(huán)境的搭建

1、AirtestIDE的下載
AirtestIDE已經(jīng)幫你集成了所有的環(huán)境,自帶錄制腳本欄,自動生成腳本,自帶編輯器還自帶模擬器,有了一個AirtestIDE就可以輕松簡單的錄制腳本了。下載地址是Airtest的官網(wǎng):

http://airtest.netease.com/

AirtestIDE的使用教程跟文檔也在下面的連接中:

https://airtest.doc.io.netease.com/

Android真機連接

使用AirtestIDE對Android應用進行自動化測試時,第一步就需要連接Android設備。

Android真機連接準備:

  • 請先安裝手機對應品牌的官方驅動,確保能使用電腦對手機進行USB調(diào)試
  • 確保已經(jīng)打開了手機中的”開發(fā)者選項”,并且打開”開發(fā)者選項”內(nèi)的”允許USB調(diào)試”
  • 部分手機需要打開”允許模擬位置”、”允許通過USB安裝應用”
  • 關閉電腦上已經(jīng)安裝的手機助手軟件,能避免絕大多數(shù)問題,請務必在任務管理器中手工結束手機助手進程

Android真機USB連接

  • 請使用USB線連接手機,手機上出現(xiàn)的 允許USB調(diào)試 彈窗點擊 確定,
  • 點擊連接面板中的 refresh ADB 按鈕,設備列表將會刷新,
  • 點擊列表內(nèi)對應設備的 Connect 完成連接,
  • 若設備未刷出,點擊 refresh ADB 按鈕。

如果遇到連接問題,請查閱Android連接常見問題:https://airtest.doc.io.netease.com/IDEdocs/faq/1_common%20problems/

手機連上Airtest之后,會向手機中安裝2個app,如下:

pocoservice是支撐poco操作的app,yosemite是airtest的輸入法,安裝之后,手機的默認輸入法會變成這個輸入法,如果需要改回來原來的輸入法,需要手動到手機設置里面進行修改;

遠程連接

  • 已知IP和端口的遠程設備 ip:port ,AirtestIDE可以直接連接,
  • 點開設備窗內(nèi)的 遠程設備連接 按鈕
  • 將 adb connect ip:port 字段填入填充框內(nèi),點擊 連接 按鈕,
  • 遠程設備將出現(xiàn)在設備列表中,點擊 connect 按鈕。

無線連接

參考:使用adb無線連接手機

當手機與電腦處在同一個wifi下,即可嘗試無線連接手機了,但是這種方式受限于網(wǎng)絡連接的穩(wěn)定性,可能會出現(xiàn)連接不夠穩(wěn)定的情況。具體連接操作步驟如下:

  • 確保手機開啟了USB調(diào)試選項,并先用USB線將手機和電腦連接起來
  • 在電腦端執(zhí)行命令 adb tcpip 5555 ,其中 5555 是端口號,可以根據(jù)自己的需求來指定,5555是默認值
  • 獲取手機的IP地址,可以在 手機設置-關于手機-狀態(tài)信息-IP地址 里找到,也可以執(zhí)行 adb ifconfig 來查看
  • 隨后可以拔掉USB線,在AirtestIDE的 遠程設備連接 處輸入 adb connect 手機ip:剛才填入的端口號5555 ,點擊連接,刷新ADB后就能在設備列表中看到連上的設備了
  • 如果因為網(wǎng)絡波動、重啟ADB等原因導致連接斷開,重新執(zhí)行一次 adb connect ip:port 即可。

錄制

點擊錄制按鈕,選擇事件進行錄制,可以用鼠標操作

介紹一下錄制時每一個參數(shù)的作用

  • touch(): 點擊操作,根據(jù)錄制腳本時所截取的圖像進行點擊
  • wait(): 可以等待畫面中某個圖片出現(xiàn),如果在指定的時間范圍內(nèi)匹配到了該圖片,就會返回圖片所處位置的焦點,否則拋出TargetNotFoundError異常
  • swipe():可以從一個位置滑動到另外一個位置
  • exists():判斷畫面中是否存在某個圖片,如果匹配到圖片,返回圖片所處位置的焦點,否則返回False
  • text():輸入文本
  • sleep():線程掛起
  • assert_exists():斷言圖片存在于當前畫面上
  • assert_not_exists():斷言圖片不存在
  • assert_equal():斷言數(shù)值相等
  • assert_not_equal():斷言數(shù)值不等
  • assert_exists()與assert_equal()的區(qū)別在于,assert_exists斷言的對象是圖片,assert_equal斷言的對象是數(shù)值

可以按照需要的參數(shù)進行配置

一個簡單的.air 腳本解析

什么是.air 腳本

在下載解壓 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 這樣的運行指令時會導致失敗。

初始化環(huán)境

首先,就像一個普通的 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)境進行初始化。
  • 在 AirtestIDE 創(chuàng)建腳本時,默認生成的代碼里是最簡單的初始化代碼auto_setup(__file__),意思是將腳本文件作為腳本路徑傳入,其他參數(shù)內(nèi)容將默認讀取運行命令行傳入的參數(shù)。

腳本運行命令行有兩種形式,命令行中的參數(shù)包含devicelog等:

  • 命令行運行 Airtest 腳本的示例:>airtest run untitled.air --device Android:///手機設備號 --log log/
    更多使用命令行運行腳本信息,請參考文檔
  • 在使用 AirtestIDE 運行腳本時,會在 “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接口來連接設備。
  • Airtest 支持在一個腳本里同時連接多個設備,使用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,不要填錯。

Airtest基本操作方法

除了跨平臺的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")
  • poco樣例
# -*- 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

case舉例

初始化設備之后就可以進行相關設備的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文件里面,然后再在用例里面引用這個公用的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

相關文章

  • Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

    摘要:首先要打開微信,進入到指定的群聊,識別微信紅包執(zhí)行搶紅包的動作。是一款基于控件識別的自動化測試框架,目前支持原生原生微信小程序,也可以在其他引擎中自行接入來使用。 showImg(https://segmentfault.com/img/remote/1460000019438856); 目錄:0 引言1 環(huán)境2 需求分析3 前置準備4 搶紅包流程回顧5 代碼梳理6 后記 0 引言 提...

    CoderBear 評論0 收藏0
  • 全面超越Appium,使用Airtest超快速開發(fā)App爬蟲

    摘要:代碼運行完成以后,微信被打開了。能不能像前面打開知乎一樣,使用這個屬性呢也行,也不行。滑動屏幕使用的命令為,滑動屏幕需要使用坐標信息。單獨使用控制手機在 想開發(fā)網(wǎng)頁爬蟲,發(fā)現(xiàn)被反爬了?想對 App 抓包,發(fā)現(xiàn)數(shù)據(jù)被加密了?不要擔心,使用 Airtest 開發(fā) App 爬蟲,只要人眼能看到,你就能抓到,最快只需要2分鐘,兼容 Unity3D、Cocos2dx-*、Android 原生 A...

    noONE 評論0 收藏0
  • 超全App 測試工具大全,收藏這篇就夠了【附帶官網(wǎng)|GitHub地址】

    摘要:三性能測試工具官網(wǎng)介紹騰訊開源的的隨身調(diào)測平臺,支持和。官網(wǎng)介紹騰訊游戲部門開發(fā)的移動全平臺性能測試分析工具平臺。百度的服務目前主要為收費服務。 隨著移動互聯(lián)網(wǎng)的高速發(fā)展,App 應用非常火,測試工程師也會接觸到各種 app 應用。除了人工測試之外,也可以通過一些測試工具來提高我們的測試效率...

    MRZYD 評論0 收藏0
  • 軟件測試就是簡單點點點嗎???

    摘要:為什么說軟件測試絕不是一件容易的事從以下幾個方面分析。要學習的軟件測試基礎理論多,必須要打好扎實的理論基礎。 為什么說軟件測試絕不是一件容易的事?從以下幾個方面分析...

    mumumu 評論0 收藏0

發(fā)表評論

0條評論

AndroidTraveler

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<