全部產品
Search
文件中心

Mobile Testing - Deprecated:編寫Android測試指令碼

更新時間:Jul 13, 2024

Mobile Testing支援執行遵循Appium測試架構編寫的自動化測試代碼。

重要

Mobile Testing平台目前可支援pytest、unittest和robotframework等三方庫,如需其他支援,聯絡支援人員

前提條件

  • 瞭解使用Appium進行自動化測試的方法。具體說明請參見:Appium官方文檔

  • 具備Python編程基礎。

背景資訊

編寫Android測試指令碼,包含如下操作:

步驟一、建立Capabilities檔案

使用Python語言編寫Capabilities檔案,用於執行測試指令碼時指定所需的測試環境,放在根目錄下,檔案命名為desired_capabilities.py

重要

desired_capabilities.py僅用於本地執行測試指令碼時,指定測試環境。

desired_capabilities.py檔案包括get_uri()get_desired_capabilities()2個函數。

函數

說明

get_desired_capabilities()

擷取本次會話的參數。

參數可根據實際需求進行設定。具體說明請參見:Appium Desired Capabilities

get_uri()

返回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

本次會話所使用的自動化引擎。

  • Android 4.2以下:設定為Selendroid

  • iOS或Android 4.2及以上:設定為Appium

  • 本地啟動的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

設定測試案例執行完成後,對裝置進行完全清理。

步驟四、驗證測試指令碼

  1. 在本地添加手機。

    • 本地添加已開啟開發人員模式的手機。

    • 遠端連線雲真機,執行adb connect ,遠程掛載雲真機到本地。

  2. 在本地命令列,執行python main.py命令,執行並驗證測試指令碼main.py

步驟五、上傳至Mobile Testing平台

  1. 在根目錄下將main.py檔案壓縮為zip檔案。

  2. 在Mobile Testing控制台,建立上傳指令碼,上傳main.py,用於後續的Android功能測試。

    建立指令碼的詳細操作請參見:建立指令碼