Appium基礎教程

[TOC]python

Appium教程

Appium簡介

Appium是一款開源的Appium自動化工具, 基於Webdriver協議, 主要有如下3個特色:web

  1. 全能: 支持iOS/Andorid/H5/混合App/WinApp
  2. 通用: 支持Win/Linux/Mac, 支持Java/Python/Ruby/Js/PHP等各類語言
  3. 開源: 免費

App自動化測試工具對比

iOSshell

官方:bootstrap

  • Uiautomation/XCUITest: 白盒, UI測試, JS 其餘:
  • FastMonkey: 性能(仿Monkey), 張釗

Andoridbash

官方:微信

  • Uiautomator/Uiautomtor2: UI測試, Java
  • Monkey: app性能/穩定性測試, 隨機操做
  • MonkeyRunner: UI測試, Jpython, 只能經過座標定位
  • Robotium: 白盒, UI測試, Java, 支持Webview/Toast/menu/Dialog等, 沒法跨進程
  • Espresso: 官方推薦擴展測試包, 白盒,ui, 通常開發自測使用
  • CTS: 兼容性測試, Java

其餘:websocket

  • Python-Uiautomotor2: UI測試, 使用簡單, 支持無線鏈接設備及使用weditor查看元素定位
  • Adb-For-Test/adb-For-Robotium: 我的, 基於adb命令的封裝

多平臺支持架構

  • Calabash: iOS/Andriod/混合app, Ruby, BDD模式, Api豐富
  • Appium: iOS/Andriod/混合app/H5, Java/Python/Ruby/JS..
  • Macaco: 阿里基於Appium進行的精簡封裝的一套框架, 支持Electron應用, 包含app-inspector和ui-recorder, 統一了iOS/Android操做的Api, 目前坑比較多, 環境搭建較麻煩
  • Airtest(ATS): 網易推出的一款基於截圖對比的App自動化測試工具, 可用於App遊戲UI測試, 支持iOS/Android

雲平臺app

  • Sauce Labs: Appium官方推薦, 應用最廣的雲測平臺, 收費
  • Testin/騰訊雲測等: 國內雲平臺, 收費
  • OpenSTF: 開源手機集羣管理平臺, 免費

Appium實現原理

Andorid(uiautomator) image框架

  1. 調用Android adb完成基本的系統操做
  2. 向Android上部署bootstrap.jar
  3. bootstrap.jar Forward Android的端口到PC機器上
  4. PC上監聽端口接收請求,使用webdriver協議
  5. 分析命令並經過forward 端口發給bootstrap.jar
  6. bootstrap.jar接收請求並把命令發給uiautomator
  7. ui automator執行命令

Andorid-uiautomator2-driver: bootstrap.jar改成使用uiautomato2 server apk, 使用netty server代替原來的websocket與PC端通訊

iOS

  1. client端 依然是 test script是咱們的webdriver測試腳本。
  2. 中間是起的Appium的服務,Appium在服務端起了一個Server(4723端口),跟selenium Webdriver測試框架相似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裏提供它提供了一套REST的接口,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操做。
  3. appium server調用instruments.js 啓動⼀一個socket server,同時分出一個⼦子進程運⾏instruments.app,將bootstrap.js(一個UIAutomation腳本)注⼊入到device⽤於和外界進行交互
  4. 最後Bootstrap.js將執行的結果返回給appium server
  5. appium server再將結果返回給 appium client。

環境搭建

  • 安裝JDK, 配置環境變量
  • 安裝Android SDK, 配置環境變量
  • 安裝Appium-Windows-Desktop
  • 安裝Appium-Python-Client
  • 安裝模擬器

Mac Android/iOS環境搭建

Andorid介紹

基本架構

常見佈局/視圖

  • 線性佈局: LinerLayout
  • 相對佈局: RelativeLayout
  • 幀佈局: FrameLayout, 疊放
  • 普通視圖: View
  • 切換視圖: ListView, 注意, 其中的元素會動態變化

HierarchyViewer, uiautomatorviewer

基本控件

  • TextView: 文本
  • Button: 按鈕
  • EditText: 輸入框
  • ImageView: 圖片
  • 其餘: Alert(警告框)/Toast(提示消息)/SeekBar(滑塊)/Webview(嵌入網頁)

控件常見屬性

  • index: 索引, 用於排序

  • text: 控件名稱(顯示文本)

  • resource-id: 資源id

  • class: 控件類型(文本/按鈕/輸入框等)

  • content-desc: 控件描述

  • package: 所屬包(一個包就是一個apk)

  • enabled: 是否可用

  • clickable: 是否可點擊

  • focused: 是否聚焦狀態

  • bounds: 座標

Adb命令基礎

Andorid sdk介紹

  • add-ons: 附加庫
  • build-tools: 編譯工具
  • platform: 各版本sdk
  • platforms-tools: 平臺通用工具, 如adb
  • tools: 經常使用工具

Adb介紹

Adb(Android Debug Bridge): Andoid設備調試橋樑, 能夠再PC端經過命令調試Android設備, 如獲取設備狀態, 安裝/卸載app, 上傳/下載文件等操做

Adb經常使用命令

開啓/關閉服務

  • adb start-server: 開啓服務
  • adb kill-server: 關閉服務

鏈接設備/獲取鏈接狀態(自動開啓服務)

  • adb connect/disconnect 設備名或uuid: 鏈接/斷開鏈接設備
  • adb devices: 查看鏈接的設備

安裝/卸載app

  • adb install 安裝包路徑.apk
  • adb uninstall apk包名

經過uiautomatorviewer能夠獲取獲取apk包名

上傳/下載文件

  • 上傳: adb push 本地文件 設備目錄
  • 下載: adb pull 設備文件 本地目錄
adb push 1.txt /sdcard/
adb pull sdcard/1.txt .

adb shell: 可用於查看設備中的文件, exit退出

強大的adb shell

  • pm: 應用及權限管理 adb shell pm list packages
  • am: Activity操做 adb shell am start -n 包名/包名.主Activity名
  • input: 模擬按鍵/輸入
    • 點擊(觸控)指定座標: adb shell input tap 50 250
    • 輸入文字: adb shell input text hello
    • 按鍵: adb shell input keyevent 3
    • 滑動: adb shell input swipe 300 1000 300 500
  • logcat: 日誌查看及過濾(問題定位)
  • monkey: 性能/穩定性測試
  • dumpsys: 性能分析
  • screencap: 截圖 adb shell screencap -p /sdcard/01.png
  • screenrecord: 錄屏 adb shell screenrecord --time-limit 10 /sdcard/demo.mp4

使用aapt獲取包名, 主Activity(aapt位於Androidsdk/build-tools下)

aapt dump badging app-debug.apk
package: name='com.lqr.wechat'
...
launchable-activity: name='com.lqr.wechat.ui.activity.SplashActivity'
...

name中包含 包名.主Acitivty名

示例:

配合uiautomatorviewer查看元素座標, 使用bounds中x,y的平均值, 屏幕分辨率1280*760, 滑動時可取平均值

  • 安裝高仿微信app
  • 啓動app
  • 點擊登陸按鈕
  • 輸入18010181267
  • 按TAB鍵
  • 輸入123456
adb install app-debug.apk
adb am start -n com.lqr.wechat/com.lqr.wechat.com.lqr.wechat.ui.activity.SplashActivity
adb shell input tap 170 1197
adb shell input text 18010181267
adb shell input keyevent KEYCODE_TAB
adb adb shell input tap 360 498
adb shell input swipe 700 540 10 540  # 滑動時離開必定邊界
adb shell screencap -p /sdcard/01.png
adb shell input keyevent 3 # 按HOME鍵
adb pull /sdcard/01.png .  # 下載圖片

支持的KEYCODE

  • 0 --> "KEYCODE_UNKNOWN"
  • 1 --> "KEYCODE_MENU"
  • 2 --> "KEYCODE_SOFT_RIGHT"
  • 3 --> "KEYCODE_HOME"
  • 4 --> "KEYCODE_BACK"
  • 5 --> "KEYCODE_CALL"
  • 6 --> "KEYCODE_ENDCALL"
  • 7 --> "KEYCODE_0"
  • 8 --> "KEYCODE_1"
  • 9 --> "KEYCODE_2"
  • 10 --> "KEYCODE_3"
  • 11 --> "KEYCODE_4"
  • 12 --> "KEYCODE_5"
  • 13 --> "KEYCODE_6"
  • 14 --> "KEYCODE_7"
  • 15 --> "KEYCODE_8"
  • 16 --> "KEYCODE_9"
  • 17 --> "KEYCODE_STAR"
  • 18 --> "KEYCODE_POUND"
  • 19 --> "KEYCODE_DPAD_UP"
  • 20 --> "KEYCODE_DPAD_DOWN"
  • 21 --> "KEYCODE_DPAD_LEFT"
  • 22 --> "KEYCODE_DPAD_RIGHT"
  • 23 --> "KEYCODE_DPAD_CENTER"
  • 24 --> "KEYCODE_VOLUME_UP"
  • 25 --> "KEYCODE_VOLUME_DOWN"
  • 26 --> "KEYCODE_POWER"
  • 27 --> "KEYCODE_CAMERA"
  • 28 --> "KEYCODE_CLEAR"
  • 29 --> "KEYCODE_A"
  • 30 --> "KEYCODE_B"
  • 31 --> "KEYCODE_C"
  • 32 --> "KEYCODE_D"
  • 33 --> "KEYCODE_E"
  • 34 --> "KEYCODE_F"
  • 35 --> "KEYCODE_G"
  • 36 --> "KEYCODE_H"
  • 37 --> "KEYCODE_I"
  • 38 --> "KEYCODE_J"
  • 39 --> "KEYCODE_K"
  • 40 --> "KEYCODE_L"
  • 41 --> "KEYCODE_M"
  • 42 --> "KEYCODE_N"
  • 43 --> "KEYCODE_O"
  • 44 --> "KEYCODE_P"
  • 45 --> "KEYCODE_Q"
  • 46 --> "KEYCODE_R"
  • 47 --> "KEYCODE_S"
  • 48 --> "KEYCODE_T"
  • 49 --> "KEYCODE_U"
  • 50 --> "KEYCODE_V"
  • 51 --> "KEYCODE_W"
  • 52 --> "KEYCODE_X"
  • 53 --> "KEYCODE_Y"
  • 54 --> "KEYCODE_Z"
  • 55 --> "KEYCODE_COMMA"
  • 56 --> "KEYCODE_PERIOD"
  • 57 --> "KEYCODE_ALT_LEFT"
  • 58 --> "KEYCODE_ALT_RIGHT"
  • 59 --> "KEYCODE_SHIFT_LEFT"
  • 60 --> "KEYCODE_SHIFT_RIGHT"
  • 61 --> "KEYCODE_TAB"
  • 62 --> "KEYCODE_SPACE"
  • 63 --> "KEYCODE_SYM"
  • 64 --> "KEYCODE_EXPLORER"
  • 65 --> "KEYCODE_ENVELOPE"
  • 66 --> "KEYCODE_ENTER"
  • 67 --> "KEYCODE_DEL"
  • 68 --> "KEYCODE_GRAVE"
  • 69 --> "KEYCODE_MINUS"
  • 70 --> "KEYCODE_EQUALS"
  • 71 --> "KEYCODE_LEFT_BRACKET"
  • 72 --> "KEYCODE_RIGHT_BRACKET"
  • 73 --> "KEYCODE_BACKSLASH"
  • 74 --> "KEYCODE_SEMICOLON"
  • 75 --> "KEYCODE_APOSTROPHE"
  • 76 --> "KEYCODE_SLASH"
  • 77 --> "KEYCODE_AT"
  • 78 --> "KEYCODE_NUM"
  • 79 --> "KEYCODE_HEADSETHOOK"
  • 80 --> "KEYCODE_FOCUS"
  • 81 --> "KEYCODE_PLUS"
  • 82 --> "KEYCODE_MENU"
  • 83 --> "KEYCODE_NOTIFICATION"
  • 84 --> "KEYCODE_SEARCH"
  • 85 --> "TAG_LAST_KEYCODE"

Appium使用

獲取app的Package和Activity

desired_caps

元素定位

uiautoviewer

  • id: resource_id
  • name: text/content-desc
  • xpath:
相關文章
相關標籤/搜索