摘要:正是因為這樣的協議存在一些自動化測試框架可以使用多種語言編寫測試腳本。支持了所有的主流瀏覽器,同時還支持了和的移動應用測試。接下來就帶著大家一步一步使用進行進行自動化測試全局安裝的如果覺得比較慢,就換淘寶的鏡像吧。
Macaca
macaca是阿里開源的基于Node.js開發的自動化測試工具,支持native,hybird,moblie web,關于macaca具體的內容參見官網macaca.
macaca是如何驅動自動化測試的呢?事實上macaca和appium在架構和一些應用層面有很多相似的地方。
作為client的我們可以使用不同語言去編寫測試腳本,其中測試腳本遵循webdriver協議,client向測試框架啟動的server發送http請求。正因為client和server是基于http進行通訊的,因此client可以支持不同的編程語言。server通過解析HTTP的request,然后調用IOS提供的UIAutomation庫來進行模擬點擊等的操作,操作完成后移動設備會將操作結果返回給server,然后server將這個操作結果返回給client。
?有提到過webdriver協議:
其實它就是一層基礎的協議規范。正是因為這樣的協議存在一些自動化測試框架可以使用多種語言編寫測試腳本。它提供了web頁面操作的相關規范,比如元素的定位,瀏覽器原生事件的操作,還有獲取DOM元素屬性等一系列的方法。不管你用什么語言編寫測試腳本的話,都應該按照這個協議規范來。WebDriver 通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器。WebDriver 針對各個瀏覽器而開發,取代了嵌入到被測 Web 應用中的 JavaScript。與瀏覽器的緊密集成支持創建更高級的測試,避免了JavaScript 安全模型導致的限制。除了來自瀏覽器廠商的支持,WebDriver 還利用操作系統級的調用模擬用戶輸入。webDriver 支持了所有的主流瀏覽器,同時還支持了Iphone和Android的移動應用測試。
接下來就帶著大家一步一步使用macaca進行進行自動化測試:
step 1全局安裝macaca的cli,如果覺得比較慢,就換淘寶的cnpm鏡像吧。
npm install macaca -g
安裝完成后可以輸入
//查看cli的提供其他的功能 macaca -h //用以查看當前的環境配置 macaca doctor //用以多帶帶啟動一個webdriver server macaca server //啟動測試 macaca run
現在輸入macaca doctor:
在Android checklist里面出現了2條紅色的提示文案,說明這2個選項沒有配置完成。我現在是以IOS為例,暫且不管這2個和Andriod相關的配置。不清楚的可以google。其中在IOS checklist當中:出現了Xcode和ios_webkit_debug_proxy.
首先你需要通過app store安裝Xcode。全局安裝ios_webkit_debug_proxy這個包,這個包用于測試ios的webview:
brew install ios-webkit-debug-proxy
此外,還需要全局安裝ios-driver:
npm i macaca-ios -g
這樣準備好了基礎的測試套件。接下來你可以克隆macaca提供的官方示例,其中包括IOS的app和相關的測試腳本,對照著官文文檔感受下大致的流程:
git clone https://github.com/macacajs/macaca-test-sample.git --depth=1
接下來進行自己的測試工作:
因為我是前端開發人員,要測試native里面的webview。首先讓IOS的同學幫忙打包一個.app格式的應用,并壓成zip格式的文件。PS:打包的時候選用debug模式。
準備好了原材料,先讓我們停一停。做UI測試的話,要模擬用戶各種操作,那么必須得知道native應用上不同界面的元素,就像獲取html里面的DOM節點一樣。因為macaca提供了通過Xpath去獲取native頁面上不同的元素節點的API。因此可以通過這種方式。
macaca提供了app-inspector這樣一個使用樹狀態結構查看UI布局,自動生成XPath的工具。
npm install app-inspector -g
安裝完成后,通過macaca-cli啟動你的IOS模擬器,運行你的應用。
然后通過app-inspector啟動UI檢測工具,
app-inspector -u YOUR-DEVICE-ID
獲取uuid的方式:
命令行輸入:
xcrun simctl list
這行命令會列出你的所以模擬器信息,里面有類似 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 的代碼,就是模擬器UDID,選擇當前模擬器狀態是Booted的那個。
通過app-inspector啟動這個工具后,打開在Chrome里面打開命令行里面提示的瀏覽器地址,這樣在瀏覽器上就能看到在native里面打開的ios頁面。
因為我要測試webview的頁面,因此native的頁面的所有元素節點通過app-inspector這個工具去獲取Xpath,然后編寫測試腳本模擬用戶的操作,一步一步的進入到webview頁面。
在我測試的應用當中,從app打開到進入要測試的webview頁面的測試腳本就變成了:
.waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeButton[1]") .click() //用戶名輸入 .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeTextField[1]") .sendKeys(username) //密碼輸入 .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[3]/XCUIElementTypeSecureTextField[1]") .sendKeys(password) .sendKeys(" ") //登錄按鈕 .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[2]") .click() //更多按鈕 .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeImage[1]/XCUIElementTypeButton[2]") .click() .sleep(1000) .swipe(200, 400, 200, 100, 500) .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeCollectionView[1]/XCUIElementTypeCell[10]") .click() .sleep(1000) .waitForElementByXPath("http://XCUIElementTypeApplication[1]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeScrollView[1]/XCUIElementTypeOther[2]") .click() .sleep(1000)
這樣完成了native進入到webview頁面的所有操作。
接下來就是webview的模擬操作啦。放到下一節來講吧。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80563.html
摘要:提供了命令單獨啟動然后我們在作為,向端發送模擬操作命令。下一篇將如果編寫的測試用例 macaca提供了命令單獨啟動webdriver server.然后我們在REPL作為client,向server端發送模擬操作命令。 首先啟動server: macaca server --verbose showImg(https://segmentfault.com/img/bVDI2V?...
摘要:測試框架通常提供測試驅動開發或行為驅動開發的測試語法來編寫測試用例。利用上面的工具基本上就可以開始進行測試腳本的測試工作了。下面一篇文章就會介紹如何使用來對應用進行測試。 部分基本概念及內容: 單元測試: 以模塊為單元,測試你代碼的本身,確保你編寫的模塊還有邏輯正確。只要輸入的值不變,輸出的值也應該不發生改變 前端自動化測試: 界面回歸測試 測試界面是否正常,包括文案,圖片等。 功能...
摘要:現階段不會寫單元測試的開發工程師會被淘汰。懂代碼到懂質量單元測試自動化測試是保障軟件質量的手段,軟件質量保障不僅僅限于代碼層面,流程控制也占據十分重要的地位。 一、UI自動化測試 使用macaca+uirecorde簡化大量的UI自動化工作。uirecorder官方文檔中是這樣描述的uirecorder: UI Recorder 是一款零成本UI自動化錄制工具,類似于Selenium ...
摘要:不覺間,已悄然離去恍然后,正慢慢襲來。已完成一期內容,只包含買家點餐功能,二期準備做賣家及支付功能。經過考慮和評估,我決定對這兩個選擇進行一個折中。項目部署,及代理轉發等配置。發現最近,已經對非技術類書籍少了很多興趣。 不覺間,2016已悄然離去;恍然后,2017正慢慢襲來。 又到了總結過去,展望未來的時候了,那就先總結16年的收獲和經驗教訓,再展望17年對自己及行業的一些期望吧。 1...
閱讀 2263·2021-09-28 09:36
閱讀 1996·2021-09-22 15:14
閱讀 3623·2019-08-30 12:47
閱讀 3034·2019-08-30 12:44
閱讀 1226·2019-08-29 17:06
閱讀 536·2019-08-29 14:12
閱讀 973·2019-08-29 14:01
閱讀 2581·2019-08-29 12:17