目次
1. Appium の概要
Appium は、iOS および Android プラットフォーム上のネイティブ、モバイル ブラウザベースのハイブリッド アプリケーションをサポートするオープンソースの自動テスト ツールです。
1. 自動テストに appium を使用する利点
Appium はさまざまなプラットフォームで標準の自動化 API を使用するため、クロスプラットフォームの場合に独自のアプリケーションを再コンパイルしたり変更したりする必要はありません。
Appium は、Java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure、Perl 言語など、Selenium WebDriver でサポートされるすべての言語をサポートしており、Selenium WebDriver の API を使用できます。Appium はあらゆる種類のテスト フレームワークをサポートし、真のクロスプラットフォームの自動テストを実現します。(この記事では主にPythonの使い方を紹介します)
2. Appium アーキテクチャ
Appium は Node.js で書かれた HTTP サーバーであり、iOS、Android などのさまざまなプラットフォームと対話するための複数の WebDriver セッションを作成および管理します。
Appium がテストを開始すると、テスト対象のデバイス (携帯電話) でサーバーが起動され、Appium サーバーからのコマンドがリッスンされます。iOS や Android などの各プラットフォームでは、実行方法と対話方法が異なります。したがって、Appium はスタブ プログラムを使用してプラットフォームを「ハッキング」し、テスト ケースの実行を完了するための指示を受け入れます。
早速本題に入り、モバイル端末上で自動テストの実戦を行ってみましょう。
Appium 自動テスト ビデオ: 2023 年、APP 自動テスト プロジェクトの実戦を学ばなければなりません_哔哩哔哩_bilibili https://www.bilibili.com/video/BV13g4y1G7QC/?spm_id_from=333.999.0.0
2.Appiumの実戦(実機を例にします)
aapt dump badging D:\XXX.apk インストールパッケージのすべての情報を取得します
adb デバイス (電話がコンピュータに接続されているかどうかを確認します)
adb Shell pm list Packages: すべてのパッケージ名をリストし、表示されたパッケージのパッケージ名を見つけます。
adb shell dumpsys package com.android.XXX: パッケージの特定の情報を表示します
他の:
adb devices: Android デバイスがコンピューターに接続されているかどうかを確認します。
adb Shell dumpsys アクティビティ: 現在実行中のアクティビティ、実行中のプロセスなどを確認します。
adb シェル dumpsys アクティビティ アクティビティ
adbshellpmlistpackages: すべてのパッケージ名をリストします。
adb shell dumpsys パッケージ: インストールされているすべてのアプリケーション情報をリストします。
adb shell dumpsys package com.android.XXX: パッケージの特定の情報を表示します
adb shell dumpsys activity | grep mFocusedActivity: 現在再開されているアクティビティを確認します
adb logcat | grep ActivityManager: 現在実行中のアクティビティを表示する
adb logcat | grep 表示: 現在実行中のアクティビティを表示します。
1. 実デバイスまたはエミュレータに接続します (ここでは実デバイスを例にします)
携帯電話を接続するときは、携帯電話の開発者モードを選択し、cmd でコマンド ライン ウィンドウを開き、「adb devices」と入力してデバイスの deviceName を取得することに注意してください。
2. アクティビティの取得
cmd を使用してコマンド ライン ウィンドウを開き、 aapt dump badging D:\XXX.apk (xxx はインストール パッケージ名を指し、D:\ はパスを指します) と入力して、テストするアプリ インストール パッケージの特定の情報を直接表示します。
マークされているのはパッケージ名で、下にドラッグし続けるとアクティビティ情報が表示されます。
ここの赤丸のところにアクティビティ情報が表示されます。この2つの値はappiumスクリプト内で事前に取得する必要があるため、事前にこの取得方法を導入しておく必要があります。cmd で見た目が悪いと思われる場合は、cmd 情報を txt ファイルにエクスポートできます。たとえば、aapt dump badging shojibaidu.apk > 123.txt Enter キーを押すと、123.txt ファイルがデスクトップに生成されます。この情報を見つけるには、クエリで開きます。上記の方法により、Android SDK環境さえあれば、任意のパッケージのパッケージ名とActivity情報を取得することができます。
Appium 自動テスト:
3.Appiumを起動する
1) デスクトップ上の appium アイコンをダブルクリックして開き、「Android 設定」をクリックして設定します。
2) 上記で取得した実デバイスの deviceName を入力し、platformName と platformVersion を選択します
3) サービスのセッションを書き換え可能に構成します (必須ではない構成)
設定後、右上隅の開始ボタンをクリックして開始します。
起動に成功したら、次のステップはコードを記述することです。
4. 上記で取得したデバイスとインストールパッケージの情報をスクリプトに書き込みます
desired_caps = {
'platformName': 'Android',
'deviceName':'8TB6V4ZPZ54LPJ5P',
'platformVersion': '5.1',
'app': PATH(r'D:\shell_customer-debug.apk'),
'appPackage': 'com.jyibb.shell_customer',
'appActivity': 'com.jyibb.module_launch_customer.SplashActivity', # 'unicodeKeyboard': 'True',#此两行是为了解决字符输入不正确的问题
# 'resetKeyboard': 'True' #运行完成后重置软键盘的状态
5. アプリのポジショニング要素を見つける
Android SDK でアーティファクトを開始して、スクリプト用のアプリの配置要素を見つけます。次の図に示すように、Android SDK のツールには uiautomatorviewer.bat があります。
uiauTomatorviewer.bat をクリックして開始します。左上隅に 4 つのボタンがあり、ローカル ファイルを開く、ページをダンプする、ダンプ圧縮形式のページを開く、および保存するために使用します。起動後、左上隅にある 3 番目のアイコンをクリックして、実機のインターフェースを表示します。
最初の接続は遅くなりますが、辛抱強く待ちますが、接続が完了すると高速になります。ここでは、Baidu インターフェースを例に挙げます。
実機接続後のインターフェース表示です。このようにして、id、class、text、およびその他の位置決め要素に基づいて位置決めを実行できます。
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_id("com.baidu.searchbox:id/baidu_searchbox").click()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").clear()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").send_keys('appium测试')
driver.find_element_by_id("float_search_or_cancel").click()
driver.find_element_by_id("floating_action_button").click()
driver.quit()
3. 私自身のアプリを例として、完全なコードをすぐ下に示します。
#coding:utf-8
from appium import webdriver
import time,os
PATH = lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))
#设备及安装包信息
desired_caps = {
'platformName': 'Android',
'deviceName':'8TB6V4ZPZ54LPJ5P',
'platformVersion': '5.1',
'app': PATH(r'D:\shell_customer-debug.apk'),
'appPackage': 'com.jyibb.shell_customer',
'appActivity': 'com.jyibb.module_launch_customer.SplashActivity',
# 'unicodeKeyboard': 'True',
# 'resetKeyboard': 'True'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(5)#等待时间可根据自己的情况进行添加
driver.find_element_by_id("com.jyibb.shell_customer:id/layout_main_header_mine").click()
time.sleep(5)
driver.find_element_by_id("com.jyibb.shell_customer:id/login_phone_number_p").send_keys('15000000000')
driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").click()
driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").send_keys("111111q")
time.sleep(5)
driver.find_element_by_id("com.jyibb.shell_customer:id/bt_login_p").click()
この時点で、スクリプトを実行して自動テストを実行します。
Appium 自動テスト: