1、移動端測試簡介
1. 1 移動端測試定義
- 移動端測試指的是對移動應用進行測試,即實體的特性知足需求(產品文檔、隱性需求等)的程度
1.2 移動端測試分類
1.2.1 app功能測試
1. 業務邏輯正確性測試
- 產品文檔
- 隱性需求
=編寫=>測試用例php
2. 兼容性測試
提示:html
- 移動設備大數據查詢 移動觀象臺
名稱 | 說明 |
---|---|
系統版本 | ➢ Android<br><br>官方、聯想、華爲等<br><br>➢ IOS<br><br>官方 |
分辨率 | ➢720p<br><br>720x1280 <br><br>➢ 1080p<br><br>1080x1920 <br><br>➢ 2k<br><br>2560x1440 |
網絡狀況 | ➢ 2G<br><br>➢ 3G<br><br>➢ 4G<br><br>➢ Wi-Fi |
3. 異常測試
- 熱啓動應用 應用置於後臺 =切換=> 前臺的過程
- 網絡切換&中斷恢復
- 電話或信息中斷恢復
4. 升級、安裝、卸載測試
(1) 升級 系統升級、渠道升級、臨近版本(1.0->1.1) 、跨版本(1.0->1.5) (2) 安裝 系統版本、首次安裝、覆蓋安裝、卸載後安裝 (3) 卸載 卸載->安裝->卸載node
5. 健壯性測試
- 手機資源消耗 CPU、內存
- 流量消耗 圖片、傳輸數據壓縮
- 崩潰恢復測試 閃退、報錯(中止運行)
- ...
1.2.2 app自動化測試
- 經過場景和數據的預設,把以人爲驅動的測試行爲轉化爲機器執行的一種過程
- 重複的工做交給機器去作
- 解放出一些人去作新功能測試和探索性測試
提醒:python
- 並非全部功能都能進行自動化
- 新功能(不穩定)或很難經過腳本模擬的業務
1.2.3 app安全測試
- 經過安全測試技術,保證app儘量的不存在安全漏洞
2、移動端測試環境搭建
參閱:android
2.1 安裝JAVA
2.2 安裝SDK
- 自動化測試獲取taost消息時須要對應系統版本的Android SDK Build-tools
2.3 安裝模擬器
參閱:git
3、ADB命令
3.1 ADB
Andorid Debug Bridgegithub
- 一個Debug工具
- 爲什麼稱之爲Bridge? 由於adb是一個標準的C/S結構的工具, 是要鏈接開發電腦和調試手機的 包含以下幾個部分:
- Client端 運行在開發機器中,即你的開發PC機;用來發送adb命令
- Daemon 守護進程, 運行在調試設備中, 即調試的手機或模擬器
- Server端, 做爲一個後臺進程運行在開發機器中, 即你的開發PC機. 用來管理PC中的Client端和手機的Daemon之間的通訊
- 三者之間的通訊 Client<—>Server<—>Daemon
3. 2 ADB基本命令
名稱 | 命令 |
---|---|
ADB | |
adb幫助 | adb --help |
啓動adb server | adb start-server |
關閉adb server | adb kill-server |
獲取設備號 | adb devices <br><br>![]() |
獲取系統版本 | adb shell getprop ro.build.version.release <br><br>只有一個設備就能夠省略**-s 設備號 **<br><br>![]() |
ADB與手機 | |
查看手機運行日誌 | adb logcat |
手機shell命令行 | adb shell <br><br>![]() top <br><br>![]() |
發送文件到手機 | 格式:adb push 電腦端文件路徑/須要發送的文件 手機端存儲的路徑 <br><br>eg:<br><br>將桌面的6809.bmp發送到手機/sdcard目錄下<br><br>adb push 6809.bmp /sdcard <br><br>![]() |
從手機拉取文件 | 格式: adb pull 手機端的路徑/拉取文件名 電腦端存儲文件路徑 <br><br>eg:<br><br>將手機/sdcard目錄中的xx.png文件發送到電腦桌面<br><br>adb pull /sdcard/001.jpg C:\Users\zifeng\Desktop <br><br>![]() |
獲取app啓動包名和啓動名 | 手機須要先打開對應app<br><br>1. Mac/Linux<br><br>adb shell dumpsys window windows | grep mFocusedApp <br><br>或<br><br>adb shell dumpsys window windows | grep mFocusedApp | cut -d " " -f 7 <br><br>![]() adb shell dumpsys window windows <br><br>![]() |
安裝app到手機 | adb install 路徑/xx.apk <br><br>![]() |
卸載手機app | adb uninstall 包名 <br><br>![]() |
獲取app啓動時間 | 格式:adb shell am start -W 包名/啓動名 <br><br>eg:<br><br>TotalTime:app自身啓動時間 <br><br>WaitTime:系統啓動應用時間<br><br>![]() |
4、主流的移動端自動化工具
- 自動化工具選擇的關注點 ➢ 1. 是否支持native,webview ➢ 2. 是否支持獲取toast ➢ 3. 是否支持跨應用
工具名 | 支持語言 | 支持系統 | 支持跨應用 |
---|---|---|---|
Robotium | Java | Android | 不支持 |
Macaca | Java、Python、Node.js | Android、iOS | 支持 |
Appium | Java、Python、Node.js<br><br>C#、php、perl、ruby | Android、iOS | 支持 |
4.1 Appium
Appium是由nodejs的express框架寫的Http Server,Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator框架web
- 支持語言:Java、C#、Python、php、perl、ruby、Node.js
- 支持Android和iOS系統
- 支持跨應用
4.1.1 Appium環境搭建
1. 安裝Appium
第一種方式:桌面客戶端
平臺 | 地址 |
---|---|
Appium客戶端 | https://github.com/appium/appium-desktop/releases<br><br>![]() |
配置chrome
提示:shell
- ANDROID_HOME爲SDK Manager的安裝路徑
運行Appium
第二種方式:命令行
參閱:
1. 安裝Node.js
提示:
- Windows http://nodejs.cn/download/
- Linux:
yum install
- Macos:
brew install
查看是否安裝成功 npm -v
或 node -v
2. 安裝cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
提示:
- npm國內通常被牆,因此選擇淘寶鏡像安裝,官網- http://npm.taobao.org
3. 安裝appium
cnpm install -g appium
提示:
- Windows安裝會提示os的模塊錯誤,這個須要mac系統支持,不影響Windows操做使用
參閱:
4. 配置appium
- 修改默認地址
C:\Users\XXX\AppData\Roaming\npm\node_modules\appium\build\lib\parser.js
- 配置環境變量 須要在"此電腦->屬性->高級系統設置->環境變量"中配置環境變量
ANDROID_HOME
=SDK Manager所在的安裝路徑
5. appium-doctor(可選)
檢查appium全部配置是否正確,正確表示安裝和配置成功 cnpm install -g appium-doctor
appium-doctor
6. 啓動appium服務
appium &
啓動參數 | 說明 | 另外一種寫法 |
---|---|---|
-a |
指定監聽的ip | --address |
-p |
指定監聽的端口,也能夠修改成你須要的端口 | --port |
--session-override |
指覆蓋以前的session | |
-bp |
是鏈接Android設備bootstrap的端口號,默認是4724 | --bootstrap-port |
--chromedriver-port |
chromedriver運行指定的端口號,默認是9515 | |
-U |
鏈接的設備的設備號,獲取方式:<br><br>adb devices |
--udid |
eg:
appium -a 127.0.0.1
或 appium -a 127.0.0.1 -p 4723 -bp 4728 --chromedriver-port 9519 -U xiaomi --session-override
參閱:
2. 安裝Appium-python庫
第一種方式:命令行
pip install Appium-Python-Client
或 pip3 install Appium-Python-Client
第二種方式:安裝包
前提:python已安裝setuptools包
-
安裝setuptools (1)解壓setuptools-38.2.4.zip (2)進入解壓後文件夾執行命令: python setup.py install (3)等待安裝完成,無錯誤信息便可
-
安裝Appium-Python-Client (1)解壓Appium-Python-Client-0.47.tar.gz (2)進入解壓後文件夾執行命令: python setup.py install (3)等待安裝完成,無錯誤信息便可
4.1.2 腳本測試
1. 腳本語法
- 手機驅動對象 驅動對象會幫助咱們完成手機和腳本之間交互
- 導入driver對象
from appium import webdriver
- 聲明手機驅動對象
提示:
- 只有聲明驅動對象咱們纔可讓手機完成腳本的操做
#聲明對象後會直接啓動參數中的應用 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
提示:
- wd即webdriver
- hub與分佈式相關,表明中心節點
- 手機啓動參數
desired_caps
負責啓動服務端時的參數設置,appium server 與手機端創建會話關係時,根據這些參數服務端能夠作出相應的處理
desired_caps經常使用參數 | 說明 |
---|---|
platformName |
平臺的名稱<br><br>iOS、Android、 FirefoxOS |
platformVersion |
設備系統版本號 |
deviceName |
設備號 <br><br>IOS instruments -s devices <br><br>Android adb devices |
app |
安裝文件路徑<br><br>/abs/path/to/my.apk 或http://myapp.com/app |
appActivity |
啓動的Activity |
appPackage |
啓動的包 |
unicodeKeyboard |
unicode設置(容許中文輸入) |
resetKeyboard |
鍵盤設置(容許中文輸入) |
#server啓動參數 desired_caps = {} #設備信息(系統、版本、設備號) desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '5.1' desired_caps['deviceName'] = '192.168.56.101:5555' #app信息(包名、啓動名) desired_caps['appPackage'] = 'com.android.settings' desired_caps['appActivity'] = '.Settings' desired_caps['unicodeKeyboard'] = True desired_caps['resetKeyboard'] = True
- 腳本內啓動其餘app
driver.start_activity(appPackage,appActivity)
- 關閉app
# 關閉當前操做的app,不會關閉驅動對象 driver.close_app()
- 關閉驅動對象
# 關閉驅動對象,同時關閉全部關聯的app driver.quit()
2. 示例腳本
功能:打開設置並點擊搜索按鈕
準備:
- 運行Appium軟件並開啓服務(appium服務器) 客戶端:直接運行並修改host爲
127.0.0.1
命令行:appium &
- 啓動模擬器中的系統(移動端)
- 運行Pycharm(自動化測試腳本)
from appium import webdriver import time # server 啓動參數 desired_caps = {} # 設備信息(系統、版本、設備號) desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9' desired_caps['deviceName'] = '192.168.72.103:5555' # app信息(包名、啓動名) desired_caps['appPackage'] = 'com.android.settings' desired_caps['appActivity'] = '.Settings' driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) time.sleep(5) driver.quit()
提示:
- desired_caps['platformVersion']值獲取
adb shell getprop ro.build.version.release
- desired_caps['deviceName'] 值獲取
adb devices
參閱: