モバイルテストは、Appium に基づいて記述された自動テストコードをサポートしています。このトピックでは、Appium を使用して iOS 10 デバイスで機能テストを実行する方法について説明します。
モバイルテストは、pytest、unittest、Robot Framework などのサードパーティライブラリをサポートしています。別のフレームワークを使用する場合は、テクニカルサポートにお問い合わせください。
前提条件
Appium を使用した自動テストの方法を理解している必要があります。詳細については、「Appium ドキュメント」をご参照ください。
Python プログラミングの基本的なスキルが必要です。
環境の構成
このトピックでは、iOS 10 を使用して必要な環境を示します。
macOS 10.11.5 以降
Xcode 8.0 以降
Appium 1.6.0 以降
ケイパビリティファイルの作成
Python 言語でケイパビリティファイルを作成し、テストスクリプトの実行に必要なテスト環境を指定します。ファイル名は desired_capabilities.py です。
ファイルには、get_uri() 関数と get_desired_capabilities() 関数が含まれています。
関数 | 説明 |
| 現在のセッションのパラメーターをクエリします。 ビジネス要件に基づいてパラメーターを構成できます。詳細については、「Appium Desired Capabilities」をご参照ください。 |
| Appium サーバーの URL を返します。 |
サンプルコード
#!/usr/bin/env python
import sys
def get_desired_capabilities():
desired_caps = {
'platformName': 'iOS',
'platformVersion': '10.0',
'deviceName': 'iPhone 6s',
'udid': '36317c0f81086d7f4f99a9771179720b7962****',
'realDeviceLogger':'/usr/local/lib/node_modules/deviceconsole/deviceconsole',
'app': '/Users/adam/iosapp.app',
'bundleId':'net.oschina.iosapp',
'newCommandTimeout': 60,
'automationName': 'Appium',
'noReset': True
}
return desired_caps
def get_uri():
return "http://localhost:56000/wd/hub"
def flushio():
sys.stdout.flush()パラメーターの説明
1. get_desired_capabilities() 関数では 10 個のパラメーターが構成されています。
パラメーター | 説明 |
platformName | テストデバイスのシステムタイプ。 |
platformVersion | テストデバイスのシステムバージョン。 |
deviceName | テストデバイスの名前。 |
udid | テストデバイスの ID。 |
realDeviceLogger | テストデバイスのログをクエリするために使用される deviceconsole ツールの格納パス。 |
app | アプリインストーラーの格納パス。 このパラメーターが構成されていない場合、電話に現在インストールされているアプリのバンドル ID が格納パスとして使用されます。 |
bundleId | アプリのバンドル ID。 |
newCommandTimeout | 2 つのコマンド間で許容される最大時間間隔。 2 つのコマンド間の間隔が指定された値を超えると、Appium サーバーは現在のセッションを終了します。 |
automationName | 現在のセッションで使用される自動化エンジン。
|
noReset | 現在のセッションが終了する前にアプリをリセットするかどうかを指定します。 |
2. デフォルトでは、オンプレミス Appium サーバーのリスナーポートは 50000 に設定されています。この場合、get_uri() の戻り値は http://localhost:50000/wd/hub です。
desired_capabilities.py は、テストスクリプトをローカルで実行および検証するためにのみ使用されます。テストスクリプトがパッケージ化されてアップロードされると、モバイルテストプラットフォームは desired_capabilities.py ファイルを置き換えるファイルを生成します。
エントリスクリプトファイルの作成
自動テストを実行するためのエントリとして、Python 言語でテストスクリプトを作成します。スクリプトファイルの名前は main.py です。
サンプルコードと説明:
# -*- coding: utf-8 -*-
from appium import webdriver
# ルートディレクトリに作成された desired_capabilities.py ファイルをインポートします。
import desired_capabilities
# 単体テストツールとして Python の unittest を使用します。
from unittest import TestCase
# 単体テストツールとして Python の unittest を使用します。
import unittest
# time.sleep(xx) 関数を使用して、現在のスレッドの実行を特定の秒数だけ一時停止します。
import time
class MqcTest(TestCase):
def setUp(self):
# 指定されたケイパビリティをクエリし、対応するセッションを作成するように Appium サーバーに通知します。
desired_caps = desired_capabilities.get_desired_capabilities()
# サーバーの URL をクエリします。
uri = desired_capabilities.get_uri()
# セッションを作成し、すべてのデバイス操作をカプセル化するドライバーオブジェクトをクエリします。
self.driver = webdriver.Remote(uri, desired_caps)
# アプリが完全にロードされるまで待ちます。
time.sleep(3)
# 最初のテストケースを使用して、検出されたダイアログボックスを閉じます。
def test_case_a_dismiss_alert(self):
while True:
time.sleep(3)
alertEle = self.driver.find_elements_by_class_name("XCUIElementTypeAlert")
if alertEle:
print 'find an alert'
notAllowBtn = self.driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Forbid']")
notAllowBtn.click()
else:
break
# 2 番目のテストケースを使用して、アプリにログインします。
def test_case_b_login(self):
# ナビゲーションバーの左ボタンを取得します。
leftBtn = self.driver.find_element_by_xpath("//XCUIElementTypeButton[@label='navigationbar sidebar']")
leftBtn.click()
time.sleep(3)
# Click Profile Picture to Log On ボタンを取得します。
potraitEle = self.driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Click Profile Picture to Log On']")
potraitEle.click()
time.sleep(3)
# ユーザー名とパスワードの入力フィールドを取得します。
tfEle = self.driver.find_element_by_class_name("XCUIElementTypeTextField")
stfEle = self.driver.find_element_by_class_name("XCUIElementTypeSecureTextField")
tfEle.send_keys("mqctest".decode('UTF-8'))
time.sleep(1)
stfEle.send_keys("123456".decode('UTF-8'))
time.sleep(2)
# ログインボタンを取得します。
loginBtn = self.driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Log On']")
loginBtn.click()
# ログインが成功するまで待ちます。
time.sleep(5)
def tearDown(self):
# テストが終了します。セッションを終了します。
self.driver.quit()
if __name__ == '__main__':
try: unittest.main()
except SystemExit: passモバイルテストプラットフォームは、main.py ファイルのテストスクリプトを実行することで、機能テストを実装します。
Appium サーバーの起動
CLI で appium コマンドを実行して、Appium サーバーを起動します。例: appium -p 50000。
パラメーター
パラメーター | 説明 |
-p | Appium サーバーのリスナーポートを指定します。 |
-a | Appium サーバーの IP アドレスを指定します。 |
-selendroid-port | Selendroid モードの Android Debug Bridge ( adb ) のポートを指定します。 |
-U | 複数のデバイスが Appium サーバーに接続されている場合に、テストデバイスのシリアル番号を指定します。 |
--full-reset | テストケースの実行後にデバイスをクリーンアップすることを指定します。 |
テストスクリプトの実行
開発者モードが有効になっている携帯電話をコンピューターに接続します。
CLI で
python main.py -vコマンドを実行して、テストスクリプトを実行し、テストする機能が期待どおりに動作するかどうかを確認します。
モバイルテストへのテストスクリプトの送信
1. テストファイルを ZIP ファイルとしてパッケージ化します。
main.py ファイルはルートディレクトリに格納する必要があります。
2. モバイルテストコンソールで、ZIP ファイルをアップロードしてスクリプトを作成します。このスクリプトは、Android デバイスでの後続の機能テストに使用されます。詳細については、「スクリプトの作成」をご参照ください。