一、Selenium
一個web的自動化測試工具,相比QTP而言支持多種語言,QTP只支持VBS,支持多平臺,支持分布式測試用例的執(zhí)行。selenium主要使用的工具是WebDriver。
WebDriver有三個角色:工程師寫的自動化測試代碼;瀏覽器的驅(qū)動;瀏覽器。
從技術(shù)層面解釋:
- WebDriver API(基于Java、Python、C#)等語言,對于python來說就是from selenium import webdriver;
- 瀏覽器的驅(qū)動(browser driver):每個瀏覽器都有自己的驅(qū)動,均已exe文件形式存在,比如谷歌的chromedriver.exe、火狐的geckodriver.exe;
- 瀏覽器本身:即軟件本身。
一條selenium腳本執(zhí)行時后端發(fā)生的事情:
- 對于每一條selenium腳本,一個http請求會被創(chuàng)建并且發(fā)送給瀏覽器的驅(qū)動;
- 瀏覽器驅(qū)動中包含了一個HTTP Server,用來接受這些http請求;
- HTTP Server接收到請求后根據(jù)請求來具體操控對應的瀏覽器;
- 瀏覽器執(zhí)行具體的測試步驟;
- 瀏覽器將步驟執(zhí)行結(jié)果返回給HTTP Server;
- HTTP Server又將結(jié)果返回給Selenium的腳本,如果是錯誤的http代碼我們就會在控制臺看到對應的報錯信息。
為什么使用HTTP協(xié)議:因為HTTP協(xié)議是一個瀏覽器和Web服務器之間通信的標準協(xié)議,幾乎每一種變成語言都提供了豐富的http libraries,這樣就可以方便的處理客戶端Client和服務器Server之間的請求request及響應response,WebDriver的結(jié)構(gòu)中就是典型的C/S結(jié)構(gòu),WebDriver API相當于是客戶端,而小小的瀏覽器驅(qū)動才是服務器端。
WebDriver基于的協(xié)議:JSON Wire Protocol,這個協(xié)議在http協(xié)議基礎上,對http請求及響應的body部分的數(shù)據(jù)進一步規(guī)范。http中的body都是以JSON的形式存在并進行傳送的,這樣的話在Client和Server之間,只要是基于JSON Wire Protocol來傳遞數(shù)據(jù),就與具體的腳本語言無關(guān)了,同一個瀏覽器的驅(qū)動既可以處理Java語言的腳本,也可以處理Python語言的腳本。
每個瀏覽器都有自己自動化測試接口,如打開網(wǎng)頁、點擊等;每個瀏覽器自己的webdriver實現(xiàn),如chromedriver都封裝了這些自動化測試接口,然后把這些操作以一個標準web restfull api暴露出來。
二、Appium
Appium:一個開源的,適用于原生或混合移動應用(hybrid mobile apps)的自動化測試工具,Appium應用WebDriver:JSON wire protocol驅(qū)動安卓和IOS移動應用。
支持多平臺(Android、IOS等)。
支持多語言(python、java、ruby、js、c#等),appium選擇了Client/Server的設計模式,只要client能夠發(fā)送http請求給server,那么client用什么語言來實現(xiàn)都是可以的,這就是支持多語言的原因。
跨平臺的,可以在OSX、windows和linux上運行。
appium擴展了WebDriver的協(xié)議。
Appium啟動時會創(chuàng)建一個http請求,針對4723端口,腳本會告訴服務器我要做什么,服務端再去跟設備打交道,服務端和腳本可以不在一起,只要能訪問到127.0.0.1:4723這個地址就可以。服務端和設備默認使用4724端口進行通訊,底層調(diào)用uiautomator工具,在測試的時候服務端會給設備扔一個jar包就是appiumbootstrap.jar,會啟動這個包,啟動之后會在手機上創(chuàng)建一個socket服務,暴露的就是4724的端口,相對于socket服務來說,appium服務端又是一個客戶端。服務端的4724端口可以修改,設備上的不可以,服務端收到腳本傳遞過來的命令之后,通過電腦上的2724端口,向設備上的4724端口發(fā)送指令,appiumbootstrap.jar收到指令后回去完成點擊、滑動等操作,完成之后再通過服務給服務端一個回應,服務端收到之后再返回給響應腳本。
Bootstrap.jar,監(jiān)聽appium發(fā)送過來的相關(guān)請求,并將請求轉(zhuǎn)換成UiAutomator可以識別的命令發(fā)給UiAutomator進行處理。
Bootstrap是Appium在初始化時推送到Android手機上的一個UiAutomator測試腳本,該腳本的唯一一個測試方式是在手機端開啟一個SocketServer(通信模塊),監(jiān)聽appium從PC端發(fā)過來的命令,并發(fā)送給UiAutomator進行處理。
appium工作流程:腳本請求==》4723端口appium server==》解析參數(shù)給PC端4724端口==》發(fā)送給設備4724端口==》通過設備4724端口發(fā)給bootstrap.jar==》Bootstrap.jar把命令發(fā)給uiautomator。
三、uiautomator
uiautomator是谷歌在Android4.1版本發(fā)布時推出的一款用java編寫的ui測試框架,基于accessibility服務,最大的特點是可以跨進程操作,可以使用uiautomator框架提供的一些方便的api來對安卓應用進行一系列的自動化測試操作,如點擊、滑動、鍵盤輸入、長按以及常用的斷言方法等。
uiautomator是在手機上運行了一個http rpc服務,將uiautomator中的功能開放出來,然后再將這些http接口封裝成python庫,python腳本執(zhí)行每個操作都會轉(zhuǎn)換成一個對http rpc服務的請求,http rpc服務接受這些請求,并調(diào)用原生uiautomator的api實現(xiàn)在手機上的操作。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-539064.html
android SDK4.3中提供了如下工具來支持UI自動化測試,uiautomatorviewer:一個圖形界面工具來掃描和分析應用的ui控件。uiautomator:一個測試的java庫,包含了創(chuàng)建UI測試的各種APi和執(zhí)行自動化測試的引擎。
uiautomator1有兩個缺點:測試腳本只能使用Java語言;測試腳本必須每次被上傳到設備上運行。
uiautomator2誕生的背景:希望測試能夠用更腳本化的語言,如python,每次所見即所得地修改測試、運行測試或者說能夠在電腦上運行就能控制手機。
uiautomator2初期是在手機上運行一個http rpc服務,將uiautomator中的功能開放出來,然后再將這些http接口封裝成python庫。
uiautomator2后期加強版:設備和開發(fā)機可以脫離數(shù)據(jù)線,通過wifi互聯(lián),代碼重構(gòu)和精簡,擴充了toast,繼承了openstf/minicap達到實時屏幕投屏,以及實時截圖;集成了openstf/minitouch達到精確實時控制設備。
python-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python接口,允許測試人員直接在PC上編寫python的測試代碼。
python-uiautomator2分為兩個部分,python客戶端,移動設備。
python端:運行腳本,并向移動設備發(fā)送HTTP請求。
移動設備:移動設備上運行了封裝了uiautomator2的http服務,解析收到的請求,并轉(zhuǎn)化成uiautomator2的代碼。
?整個過程:
- 在移動設備上安裝atx-agent(守護進程),隨后atx-agent啟動UIautomator服務(默認7912端口)進行監(jiān)聽;
- 在PC上編寫測試腳本并執(zhí)行(相當于發(fā)送http請求到移動設備的server端);
- 移動設備通過WIFI或USB接收到PC上發(fā)來的HTTP請求,執(zhí)行指定的操作。? ? ? ? ? ? ? ? ? ? ? ?
?以下是我整理的一些學習資料,需要的朋友可以進群討論!
文章來源:http://www.zghlxwxcb.cn/news/detail-539064.html
?
到了這里,關(guān)于#軟件測試###淺談幾個UI自動化測試工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!