Appium基礎チュートリアル

目次

  • Appium環境の構築
  • Mac iOS環境の構築
  • Appium基本
  • Appium応用

Appiumとは

Appiumはオープンソースのモバイルアプリ自動化ツールであり、WebDriverプロトコルに基づいたツールです。主な特徴は以下の3点です:

  1. マルチプラットフォーム対応: iOS/Android/H5/ハイブリッドアプリ/WinAppに対応
  2. 汎用性: Windows/Linux/Mac上で動作し、Java/Python/Ruby/JavaScript/PHP等各种言語をサポート
  3. オープンソース: 無償で利用可能

モバイル自動化テストツールの比較

iOS向け

公式ツール:

  • Uiautomation/XCUITest: ホワイトボックス、UIテスト、JavaScript

その他:

  • FastMonkey: パフォーマンス(Monkey類似)、張札氏作

Android向け

公式ツール:

  • Uiautomator/Uiautomator2: UIテスト、Java
  • Monkey: アプリのパフォーマンス・安定性テスト、ランダム操作
  • MonkeyRunner: UIテスト、Jython対応、座標指定のみ
  • Robotium: ホワイトボックス、UIテスト、Java、WebView/Toast/menu/Dialog対応、プロセス間跨ぎ不可
  • Espresso: 公式推奨拡張テストパッケージ、ホワイトボックス、UI、通常は開発者自身によるテストに使用
  • CTS: 互換性テスト、Java

その他:

  • Python-Uiautomator2: UIテスト、操作が简单、WiFi接続・weditorによる要素取得に対応
  • Adb-For-Test/adb-For-Robotium: 個人作成、adbコマンドをラップ

マルチプラットフォーム対応

  • Calabash: iOS/Android/ハイブリッドアプリ対応、Ruby、BDDパターン、APIが豊富
  • Appium: iOS/Android/ハイブリッドアプリ/H5対応、Java/Python/Ruby/JSなど
  • Macaco: AliによるAppiumのシンプルラップフレームワーク、Electronアプリ対応、app-inspectorとui-recorder 포함、iOS/Android操作API統一、現在は課題较多、環境構築が複雑
  • Airtest(ATS): NetEase推出の画像比較ベースのモバイル自動化テストツール、ゲームUIテストに適用、iOS/Android対応

クラウドプラットフォーム

  • Sauce Labs: Appium公式推奨、最も广泛に使用されるクラウドテストプラットフォーム、有料
  • Testin/Tencentクラウドテストなど: 国内クラウドプラットフォーム、有料
  • OpenSTF: オープンソースのモバイルクラスター管理プラットフォーム、無償

Appiumの動作原理

Android(uiautomator)

  1. Android adbを使用して基本システム操作を実行
  2. Androidデバイスにbootstrap.jarをデプロイ
  3. bootstrap.jarがAndroidポートをPCにポートフォワード
  4. PC側でポートを listenし、WebDriverプロトコルでリクエストを受信
  5. コマンドを分析し、forwardポート経由でbootstrap.jarに送信
  6. bootstrap.jarがリクエストを受け取り、uiautomatorにコマンドを渡す
  7. ui automatorがコマンドを実行

Android-uiautomator2-driverでは、bootstrap.jarの代わりにuiautomator2 server apkを使用し、netty serverが従来のwebsocketの代わりにPC側と通信を行います

iOS

  1. クライアント側はTest Script(WebDriverテストスクリプト)
  2. Appium Server(ポート4723)がWebDriver JSON WireProtocolをサポートし、RESTインターフェースを提供
  3. Appium Serverがinstruments.jsを呼び出しsocket serverを起動し、 instruments.appをサブプロセスとして実行、bootstrap.js(UIAutomationスクリプト)をデバイスにインジェクション
  4. Bootstrap.jsが実行結果をAppium Serverに返す
  5. Appium Serverが結果をAppium Clientに返す

環境構築

  • JDKをインストールし、環境変数を設定
  • Android SDKをインストールし、環境変数を設定
  • Appium-Windows-Desktopをインストール
  • Appium-Python-Clientをインストール
  • エミュレータをインストール

MacでのAndroid/iOS環境構築

Androidの概要

基本アーキテクチャ

常见のレイアウト/ビュー

  • LinierLayout: リニアレイアウト
  • RelativeLayout: 相対レイアウト
  • FrameLayout: フレームレイアウト、重なり合い
  • View: 基本ビュー
  • ListView: リストビュー、要素が動的に変化することに注意

HierarchyViewer、uiautomatorviewerを使用

基本コントロール

  • TextView: テキスト表示
  • Button: ボタン
  • EditText: 入力フィールド
  • ImageView: 画像表示
  • その他: Alert(警告ダイアログ)/Toast(ヒントメッセージ)/SeekBar(スライダー)/Webview(**埋め込み网页**)

コントロールの常见属性

  • index: インデックス、並び替えに使用
  • text: コントロール名(表示テキスト)
  • resource-id: リソースID
  • class: コントロールタイプ(テキスト/ボタン/入力フィールドなど)
  • content-desc: コントロールの説明
  • package: 所属パッケージ(1パッケージ=1APK)
  • enabled: 有効/無効
  • clickable: クリック可能/不可能
  • focused: フォーカス状態
  • bounds: 座標

ADBコマンドの基礎

Android SDKの説明

  • add-ons: アドオンライブラリ
  • build-tools: ビルドツール
  • platform: 各バージョンSDK
  • platforms-tools: プラットフォーム共通ツール(adbなど)
  • tools: 常用ツール

ADBの説明

ADB(Android Debug Bridge): Androidデバイスデバッグブリッジ、PC側からAndroidデバイスをコマンドでデバッグ可能。デバイス状態の取得、アプリのインストール/アンインストール、ファイルアップロード/ダウンロードなどの操作が可能。

ADB常用コマンド

サービス開始/停止

  • adb start-server: サービス開始
  • adb kill-server: サービス停止

デバイス接続/接続状態取得(自動サービス開始)

  • adb connect/disconnect デバイス名またはuuid: 接続/切断
  • adb devices: 接続デバイスの確認

アプリインストール/アンインストール

  • adb install アプリパス.apk
  • adb uninstall APKパッケージ名

uiautomatorviewerでAPKパッケージ名を取得可能

ファイルアップロード/ダウンロード

  • アップロード: adb push ローカルファイル デバイスディレクトリ
  • ダウンロード: adb pull デバイスファイル ローカルディレクトリ
adb push sample.txt /sdcard/
adb pull /sdcard/sample.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/shot.png
  • screenrecord: 画面録画 adb shell screenrecord --time-limit 10 /sdcard/recording.mp4

aaptを使用してパッケージ名とメインActivityを取得(aaptはAndroidSDK/build-tools配下)

aapt dump badging demo-app.apk
package: name='com.example.demo'
...
launchable-activity: name='com.example.demo.ui.MainActivity'
...

パッケージ名.メインActivity名として扱う

実行例

uiautomatorviewerで要素座標を確認し、boundsの中心値を使用、画面解像度1280×760、スワイプ時は平均値を取る

демоメッセージングアプリのテスト例:

  • デモアプリをインストール
  • アプリを起動
  • ログインボタンをタップ
  • 電話番号を入力
  • TABキーを押下
  • パスワードを入力
adb install demo-app.apk
adb am start -n com.example.demo/com.example.demo.ui.SplashActivity
adb shell input tap 170 1197
adb shell input text 13800138000
adb shell input keyevent KEYCODE_TAB
adb shell input text password123
adb shell input swipe 700 540 10 540
adb shell screencap -p /sdcard/screen.png
adb shell input keyevent 3
adb pull /sdcard/screen.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の使用方法

アプリのPackageとActivityの取得方法

desired_caps

要素ロケーティング

uiautomatorviewer

  • id: resource_id
  • name: text/content-desc
  • xpath:

タグ: appium mobile-testing automation Android iOS

5月31日 04:30 投稿