自動化測試微信小程式

  • 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自動化測試,沒有必要大張旗鼓。當然,為了領導開心,你可以擴大規模。