自動化測試微信小程式
- 2019 年 10 月 7 日
- 筆記
小程式已經成為一個大的入口了,在測試中如何自動化測試小程式呢?
微信小程式是webview的,跟其它的hybrid的程式測試起來沒什麼區別。
Mac 環境下搭建 appium 1 安裝homebrew 首先命令行檢查是否安裝:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果mac沒有安裝homebrew的話,需要先安裝homebrew:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | tar xvz -C/usr/local --strip 1
查看homebrew版本:brew -v
2 安裝node(安裝nodejs後,npm會自動安裝好) 使用homebrew安裝node,命令行:brew install node
查看node版本: node -v
3 安裝 appium server
npm --registry [http://registry.npm.taobao.org](http://registry.npm.taobao.org/) install -g appium
4 查看版本號:
appium -v
如果長期沒有更新,可以用如下命令更新一下:
npm --registry http://registry.npm.taobao.org update -g appium
注意: 使用sudo安裝appium時能夠安裝,但是運行不起來,解決方案如下:
sudo npm uninstall appium -g //卸載appium sudo chmod -R 777 /usr/local //許可權就放開 npm install -g appium //重新安裝
5 安裝 appium client
命令行中輸入:npm install wd
因為被牆,wd下載不下來
嘗試使用:npm --registry [http://registry.npm.taobao.org](http://registry.npm.taobao.org/) install -g wd
Install python_client(如果用python,推薦)
pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org Appium-Python-Client
6 檢查appium:
npm --registry http://registry.npm.taobao.org install appium-doctor -g appium-doctor
注意,可能node鏡像下載很慢,可以換不同的鏡像源來嘗試
7 安裝android sdk(如果有Android環境,此步驟可省略)
去android的官方網站下載ADT工具
http://developer.android.com/sdk/index.html
下載程式後,解壓到Mac電腦的任意一個目錄即可。無需任何安裝操作。
進入到android-sdk-macoxs下的Tools文件夾,雙擊Android文件。即可啟動Android SDK Manager。
因為,Android SDK Manager需要有Java的支援,如果沒有安裝java,則第一次在雙擊Andriod文件的時候,會提示下載安裝java。
可以在Android SDK Manager中下載和更新 Android SDK Tools 和 Android SDK Platform-tools 。
adb調試工具一般位於Platform-tools下。
8 配置adb使用
在Mac系統中,很多時候第一次在Android SDK中使用adb的時候。無法使用。會提示-bash: abd: command not found。
造成此類現象的原因是:未配置Android的環境變數。因此,您需為Mac中的Android SDK配置環境變數。
啟動Mac自帶的終端Terminal,進入當前用戶的home目錄。
命令行中輸入:echo $HOME
創建.bash_profile文件:
命令行中輸入:touch .bash_profile
打開.bash_profile文件:
命令行中輸入:open -e .bash_profile 此命令行輸入完畢後,會自動彈出 .bash_profile 文件的編輯窗口
在.bash_profile文件中輸入 export PATH=/Users/您的用戶名/文件路徑/platform-tools/:$PATH
注意:如果需要添加多個路徑到PATH下時,需要用「:」(英文的冒號)隔開。 例如:
export PATH=${PATH}:/Users/csl/android-sdk-macosx/platform-tools:/Users/csl/android-sdk-macosx/tools
保存文件。直接關閉.bash_profile文件,即可自動保存您輸入的內容。
更新剛配置的環境變數
命令行中輸入:source .bash_profile
9 驗證配置是否成功
輸入adb,如果沒有出現-bash: adb: command not found;而出現adb的命令參數解釋。則表明環境變數配置成功
進行ANDROID_HOME參數的設置 啟動Mac自帶的終端Terminal,進入當前用戶的home目錄。 命令行中輸入:open -e .bash_profile 在.bash_profile文件中輸入 :
export ANDROID_HOME=/android sdk所在目錄/ export JAVA_HOME=/java_home的地址/
例如:
export ANDROID_HOME=/Users/csl/android-sdk-macosx/ export JAVA_HOME=/Library/Java/JavaVirtrtualMachines/jdk1.8.0_73.jdk/Contents/Home/
註: 定位mac中 地址,可以使用工具命令「/usr/libexec/java_home」來定位JAVA_HOME
更新剛配置的環境變數 命令行中輸入:source .bash_profile
再次執行環境監測命令,執行成功。
整體環境初步搭建完成,開始折騰小程式了。
由於騰訊系QQ、微信等都是基於騰訊自研X5內核,不是google原生webview(其實就是進行了二次訂製)。實質上也是混合應用的一種,現在很多app產品也開始流行採用X5內核作為其內嵌web瀏覽服務,所以掌握X5內核混合應用自動化也是app自動化測試工程師必備技能。
genymotion、夜神等模擬器是intel的X86架構,很多app安裝不了,比如微信、qq等(雖然說可以通過安裝arm解釋器來解決該問題,但是進行X5內核調試的話也會出現問題),建議最好是一台真實的手機來做。
X5內核應用自動化方式和普通混合應用有非常多的差異,接下來以微信小程式舉例介紹怎麼來開展X5內核的自動化。 打開微信,在任意好友窗口輸入,然後點擊它:debugx5.qq.com

然後:在打開的介面中選擇資訊->勾選是否打開TBS內核Inspector調試功能

手機通過usb連接到電腦,打開USB調試模式,通過adb devices命令檢測到設備 然後微信中打開一個要測的小程式 在電腦的在chrome瀏覽器裡面輸入chrome://inspect#devices 然而,檢測不到WebView,沒有Inspect鏈接,打開本地快取的頁面,也是空白的。 網上搜搜,很多這樣的問題, 對於中國的程式猿來說,由於無法訪問 https://chrome-devtools-frontend.appspot.com,只能出現空白頁面,某寶上竟然有人賣Android webview的調試工具解決方案。
好吧,直接去 /users/用戶/Library/Android/sdk/tools/ 下去找 uiautomatorviewer, 啟動起來結果報錯。
用appium desktop吧,結果發現官網都打不開,哎!
那就用macaca來定位元素吧。
npm i macaca-android -g --registry http://registry.npm.taobao.org npm install macaca-cli -g --registry http://registry.npm.taobao.org npm install app-inspector -g --registry http://registry.npm.taobao.org app-inspector -u YOUR-DEVICE-ID
裝完以後,發現有問題,沒有時間糾結這個問題。 微信有很多的進程,每一個小程式都運行在不同的進程中。 進入X東後,看下當前運行在哪個進程中。
adb shell dumpsys activity top | grep ACTIVITY adb shell ps XXX
最後就是蒙了一個,全用xpath寫個demo 測試:
import time from appium import webdriver desired_caps = { 'platformName': 'Android', 'fastReset': False, 'deviceName': 'COL-AL10', 'appPackage': 'com.tencent.mm', 'appActivity': '.ui.LauncherUI', 'fullReset': False, 'noReset': True, 'unicodeKeyboard': True, 'resetKeyboard': True, 'chromeOptions': { 'androidProcess': 'com.tencent.mm:appbrand0' } } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) time.sleep(10) driver.find_element_by_xpath("//*[@text='發現']").click() driver.find_element_by_xpath("//*[@text='小程式']").click() driver.find_element_by_xpath("//*[contains(@text, '京東購物')]").click() driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') time.sleep(5) print(driver.page_source)
結果還正常,沒有做gif.
我們知道,常規的webview與native的切換比較簡單:
webview介面: print(driver.contexts) driver.switch_to.context(輸入待測試webview名字)) native介面: driver.switch_to.content(輸入待測試native介面『NATIVE_APP』)
微信小程式就是加了一個選項而已,把小程式進程放入了chrome options裡面了。
個人覺得小程式的UI自動化測試,沒有必要大張旗鼓。當然,為了領導開心,你可以擴大規模。