1. 程式人生 > 實用技巧 >使用AirtestProject+pytest做支付寶小程式UI自動化測試

使用AirtestProject+pytest做支付寶小程式UI自動化測試

因公司業務需要做支付寶小程式的UI自動化測試,於是在網上查詢小程式的自動化資料,發現微信小程式是有自己的測試框架的,但幾乎找不到支付寶小程式UI自動化測試相關的資料。白piao失敗,那就只能自己從零開始整了。

因為之前已經用 Python + appium + unittest 搭建好了android app的UI自動化測試,於是剛開始就想直接套用這個框架,當時認為小程式頁面就其實就是相當於一個特殊的web頁面,覺得應該可行。但有天腦子一熱想嘗試使用網易的airtest與單元測試框架pytest結合。為了驗證可行性,開始檢視Airtest官方文件,並在Airtest Project官網下載了AirtestIDE(

AirtestIDE官方文件),嘗試著編寫測試用例demo。

Airtest Project主要包含 Airtest 和 Poco 兩個測試框架:

  • Airtest框架,是一個跨平臺的、基於影象識別的UI自動化測試框架,適用於遊戲和App,支援平臺有Windows、Android和iOS

  • Poco框架,是一款基於UI控制元件識別的自動化測試框架,目前支援Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程式,也可以在其他引擎中自行接入poco-sdk來使用,用appium做UI測試的同學應該比較容易上手。

這裡選擇 poco + pytest,Windows 10,測試機作業系統為Android 10

一,安裝poco

AirtestIDE後續只用於生成操作步驟程式碼(定位及操作),用例的執行會使用Pycharm,因此Python環境需要安裝pocoui第三方庫

# 安裝命令,使用清華映象
pip install pocoui -i https://pypi.tuna.tsinghua.edu.cn/simple

二,AirtestIDE連線手機,使用Poco輔助工具錄製被測小程式操作步驟生成程式碼

  • 開啟AirtestIDE,按照步驟:

    1,連線手機。開啟手機開發者除錯模式,連線電腦,此時AirtestIDE右側會出現裝置id,點選connect連線手機。

    2,選擇新建.py。點選上圖2處,選擇.py 純Python(純文字),然後會彈窗需要設定路徑引數,這裡暫時可以只設置Save Path,其他預設即可。

    3,點選OK後,會在Save Path設定的路徑裡生成對應的.py檔案,且生成初始化內容如下:

    其中auto_setup() api的引數可以檢視Airtest官方介面文件

  • Poco輔助窗選擇Android,點選2處Yes,我們會發現腳本里會新增Android相關的程式碼。

選中Poco輔助窗的Poco auto recording按鈕,將游標放在編輯器的15行,滑鼠點選操作需要測試的小程式即可錄製操作步驟。Poco輔助窗的這三個按鈕大家可以參考官方文件說明,或者分別選中後滑鼠點選被測APP介面就很快知道區別了。

三,使用pytest框架,修改指令碼,除錯執行

  • 小程式操作步驟步驟錄製如下,可以在AirtestIDE上面先除錯執行,是否正確。

程式碼如下:

# -*- encoding=utf8 -*-
__author__ = "xiaoqq"
​
from airtest.core.api import *
​
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
from airtest.cli.parser import cli_setup
​
if not cli_setup():
 auto_setup(__file__, logdir=True, devices=[
 "Android://127.0.0.1:5037/5EN0219305002521",
 ])
​
​
# script content
print("start...")
poco(text="掃一掃").click()
poco(text="相簿").click()
poco("com.alipay.mobile.beephoto:id/iv_photo").click()
poco(text="大物洗").click()
poco(text="選好了").click()
poco(text="已關門").click()
poco(text="餘額").click()
poco(text="去支付").click()
poco(text="立即支付").click()
​
​
# generate html report
# from airtest.report.report import simple_report
# simple_report(__file__, logpath=True)
  • 接下來就在Pychram裡開啟該.py檔案,開始完善指令碼。增加斷言,並使用pytest管理、執行用例
# -*- encoding=utf8 -*-
__author__ = "xiaoqq"
​
import pytest
from airtest.core.api import *
​
@pytest.fixture(scope='function', params=['Android://127.0.0.1:5037/64c83202'])
def base_poco(request):
    '''
    構造新的poco,完成測試用例執行前、後的步驟
    @return: 返回新的poco物件
    '''
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    connect_device(request.param)
    base_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    base_poco.device.wake()
    start_app("com.eg.android.AlipayGphone")
    sleep(2)
    yield base_poco
    sleep(2)
    stop_app("com.eg.android.AlipayGphone")
    sleep(2)
​
def test_wash_order(base_poco):
    print("start...")
    base_poco(text="掃一掃").click()
    base_poco(text="相簿").click()
    base_poco("com.alipay.mobile.beephoto:id/iv_photo").click()
    base_poco(text="大物洗").click()
    base_poco(text="選好了").click()
    base_poco(text="已關門").click()
    base_poco(text="餘額").click()
    base_poco(text="去支付").click()
    base_poco(text="立即支付").click()
    time.sleep(1)
    result_1 = base_poco(text="支付成功").exists()
    assert result_1 == True
    print("end...")
​
if __name__ == '__main__':
    pytest.main()
  • 執行該模組,可以檢視手機上的操作步驟,結果通過!

簡單的demo已經跑通,後續需要優化專案的目錄結構,並加入截圖、日誌、測試報告模組,搭建成一個完整的自動化測試專案。

四,總結

  • 相對來說appium太笨重了,而網易提供的AirtestIDE裡的poco輔助工具可以將元素定位及操作可以直接生成為程式碼。

  • 在AirtestIDE中只能執行單個的指令碼,無法批量的執行測試指令碼和管理測試指令碼,而利用Airtest提供的開源的API結合其他的python庫使用,可以實現更復雜的程式碼邏輯。

  • poco框架看起來程式碼簡潔程度比airtest更好,維護更方便,且airtest框架基於影象識別,實際執行工程中可能會受識別率的影響。但對於新手或者程式碼基礎薄弱的測試同學而言,airtest更容易上手。