移動端測試基礎 (1)

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結構的工具, 是要鏈接開發電腦和調試手機的 包含以下幾個部分:
  1. Client端 運行在開發機器中,即你的開發PC機;用來發送adb命令
  2. Daemon 守護進程, 運行在調試設備中, 即調試的手機或模擬器
  3. 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><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><br><br>2. Windows<br><br>提示:看mFocusedApp這一行的內容<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

提示:

  • Linux: yum install
  • Macos: brew install

查看是否安裝成功 npm -vnode -v

2. 安裝cnpm

npm install -g cnpm --registry=https://registry.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.1appium -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.apkhttp://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

參閱:

相關文章
相關標籤/搜索