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


一,前言

1,背景

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

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

2,Airtest Project簡介

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

  • Airtest框架,是一個跨平台的、基於圖像識別的UI自動化測試框架,適用於游戲和App,支持平台有Windows、Android和iOS

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

3,環境

這里選擇 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連接手機,使用Poco輔助工具錄制被測小程序操作步驟生成代碼

1,打開AirtestIDE,按照步驟:

1.1,連接手機。打開手機開發者調試模式,連接電腦,此時AirtestIDE右側會出現設備id,點擊connect連接手機。

1.2,選擇新建.py。點擊上圖2處,選擇.py 純Python(純文本),然后會彈窗需要設置路徑參數,這里暫時可以只設置Save Path,其他默認即可。

1.3,點擊OK后,會在Save Path設置的路徑里生成對應的.py文件,且生成初始化內容如下:

其中auto_setup() api的參數可以查看Airtest官方接口文檔

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

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

四,使用pytest框架,修改腳本,調試運行

1,在AirtestIDE中調試代碼

小程序操作步驟錄制如下,可以在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)

2,完善代碼

接下來就在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()

3,運行代碼

運行該模塊,可以查看手機上的操作步驟,結果通過!

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

五,總結

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM