Mobile Testing支援執行遵循Appium測試架構編寫的自動化測試代碼。
Mobile Testing平台目前可支援pytest、unittest和robotframework等三方庫,如需其他支援,聯絡支援人員。
前提條件
瞭解使用Appium進行自動化測試的方法。具體說明請參見:Appium官方文檔。
具備Python編程基礎。
背景資訊
編寫Android測試指令碼,包含如下操作:
編寫測試指令碼:編寫Capabilities檔案和測試指令碼,Capabilities檔案用於執行測試指令碼時指定所需的測試環境。詳細操作請參見步驟一、建立Capabilities檔案和步驟二、編寫測試指令碼。
驗證測試指令碼:在本地啟動Appium Server,以驗證編寫完成的測試指令碼。詳細操作請參見步驟三、啟動Appium Server和步驟四、驗證測試指令碼。
上傳Mobile Testing平台:測試指令碼驗證無誤後,上傳至Mobile Testing平台。詳細操作請參見步驟五、上傳至Mobile Testing平台。
步驟一、建立Capabilities檔案
使用Python語言編寫Capabilities檔案,用於執行測試指令碼時指定所需的測試環境,放在根目錄下,檔案命名為desired_capabilities.py。
desired_capabilities.py僅用於本地執行測試指令碼時,指定測試環境。
desired_capabilities.py檔案包括get_uri()和get_desired_capabilities()2個函數。
函數 | 說明 |
| 擷取本次會話的參數。 參數可根據實際需求進行設定。具體說明請參見:Appium Desired Capabilities。 |
| 返回Appium Server的地址。 |
範例程式碼
#!/usr/bin/env python
def get_desired_capabilities():
desired_caps = {
'platformName': 'Android',
'platformVersion': '7.0',
'deviceName': 'V889F',
'appPackage': 'com.alibaba.mts.mtsdemoapp',
'appWaitPackage': 'com.example.Android.myapp',
'app': 'D:/home/xx/xx/xx/xx.apk',
'newCommandTimeout': 30,
'automationName': 'Appium'
}
return desired_caps
def get_uri():
return "http://localhost:50000/wd/hub"樣本說明
在
get_desired_capabilities()函數中設定了8個參數:
參數 | 說明 |
platformName | 測試裝置的系統類別型。可選Android或iOS平台。 |
platformVersion | 測試裝置的系統版本。 |
deviceName | 測試裝置的名稱。 |
appPackage | 待測應用的包名。僅適用於Android平台。 |
appWaitPackage | 測試時等待啟動的應用程式套件名。僅適用於Android平台。 |
app | 待測應用安裝檔案的儲存位置。 |
newCommandTimeout | 兩條指令之間允許的最長時間間隔(單位:秒)。 如兩條指令之間的時間間隔超過預設取值,則Appium Server將終止本次會話。 |
automationName | 本次會話所使用的自動化引擎。
|
本地啟動的Appium Server,監聽連接埠預設設定為50000,則傳回值為
http://localhost:50000/wd/hub。
步驟二、編寫測試指令碼
使用Python語言編寫測試指令碼,作為執行自動化測試的入口,放在根目錄下,檔案命名為main.py。
Mobile Testing平台通過執行測試指令碼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):
global automationName
def setUp(self):
# 擷取我們設定的capabilities,通知Appium Server建立相應的會話。
desired_caps = desired_capabilities.get_desired_capabilities()
# 擷取server的地址。
uri = desired_capabilities.get_uri()
# 擷取使用的測試架構
self.automationName = desired_caps.get('automationName')
# 建立會話,得到driver對象,driver對象封裝了所有的裝置操作。
self.driver = webdriver.Remote(uri, desired_caps)
def test_searchbox(self):
# 找到包含“Tab4”字串的控制項。
if self.automationName == 'Appium':
tab4 = self.driver.find_element_by_name("Tab4")
else:
tab4 = self.driver.find_element_by_link_text("Tab4")
# 點擊.
tab4.click()
# 等待2秒鐘
time.sleep(2)
# 通過控制項類名找到使用者名稱和密碼輸入框。
editTexts = self.driver.find_elements_by_class_name("android.widget.EditText")
# 輸入使用者名稱和密碼,[0]表示使用者名稱,[1]表示密碼
editTexts[0].send_keys("admin")
editTexts[1].send_keys("admin")
# 隱藏出現的軟鍵盤
self.driver.hide_keyboard()
# 找到包含“登入”的按鈕並點擊
if self.automationName == 'Appium':
self.driver.find_element_by_name("登入").click()
else:
self.driver.find_element_by_link_text("登入").click()
# 等待3秒鐘,等待登入成功。
time.sleep(3)
def tearDown(self):
# 測試結束,退出會話。
self.driver.quit()
if __name__ == '__main__':
unittest.main()步驟三、啟動Appium Server
在本地命令列,執行appium命令,啟動Appium Server。例如:appium -p 50000。
參數釋義
參數 | 說明 |
-p | 指定Appium Server監聽的連接埠號碼。 |
-a | 指定Appium Server的IP地址。 |
--selendroid-port | 在Selendroid模式下,指定adb forward的連接埠。 |
-U | 當Appium Server掛載多個裝置時,指定用於測試的裝置的串號。 |
--full-reset | 設定測試案例執行完成後,對裝置進行完全清理。 |
步驟四、驗證測試指令碼
在本地添加手機。
本地添加已開啟開發人員模式的手機。
遠端連線雲真機,執行
adb connect,遠程掛載雲真機到本地。
在本地命令列,執行
python main.py命令,執行並驗證測試指令碼main.py。
步驟五、上傳至Mobile Testing平台
在根目錄下將
main.py檔案壓縮為zip檔案。在Mobile Testing控制台,建立上傳指令碼,上傳
main.py,用於後續的Android功能測試。建立指令碼的詳細操作請參見:建立指令碼。