目次
- Appium環境の構築
- Mac iOS環境の構築
- Appium基本
- Appium応用
Appiumとは
Appiumはオープンソースのモバイルアプリ自動化ツールであり、WebDriverプロトコルに基づいたツールです。主な特徴は以下の3点です:
- マルチプラットフォーム対応: iOS/Android/H5/ハイブリッドアプリ/WinAppに対応
- 汎用性: Windows/Linux/Mac上で動作し、Java/Python/Ruby/JavaScript/PHP等各种言語をサポート
- オープンソース: 無償で利用可能
モバイル自動化テストツールの比較
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)
- Android adbを使用して基本システム操作を実行
- Androidデバイスにbootstrap.jarをデプロイ
- bootstrap.jarがAndroidポートをPCにポートフォワード
- PC側でポートを listenし、WebDriverプロトコルでリクエストを受信
- コマンドを分析し、forwardポート経由でbootstrap.jarに送信
- bootstrap.jarがリクエストを受け取り、uiautomatorにコマンドを渡す
- ui automatorがコマンドを実行
Android-uiautomator2-driverでは、bootstrap.jarの代わりにuiautomator2 server apkを使用し、netty serverが従来のwebsocketの代わりにPC側と通信を行います
iOS
- クライアント側はTest Script(WebDriverテストスクリプト)
- Appium Server(ポート4723)がWebDriver JSON WireProtocolをサポートし、RESTインターフェースを提供
- Appium Serverがinstruments.jsを呼び出しsocket serverを起動し、 instruments.appをサブプロセスとして実行、bootstrap.js(UIAutomationスクリプト)をデバイスにインジェクション
- Bootstrap.jsが実行結果をAppium Serverに返す
- 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.mp4aaptを使用してパッケージ名とメインActivityを取得(aaptはAndroidSDK/build-tools配下)
aapt dump badging demo-app.apkpackage: 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: