一,前言
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更容易上手。