使用AirtestProject+pytest做支付寶小程式UI自動化測試
因公司業務需要做支付寶小程式的UI自動化測試,於是在網上查詢小程式的自動化資料,發現微信小程式是有自己的測試框架的,但幾乎找不到支付寶小程式UI自動化測試相關的資料。白piao失敗,那就只能自己從零開始整了。
因為之前已經用 Python + appium + unittest 搭建好了android app的UI自動化測試,於是剛開始就想直接套用這個框架,當時認為小程式頁面就其實就是相當於一個特殊的web頁面,覺得應該可行。但有天腦子一熱想嘗試使用網易的airtest與單元測試框架pytest結合。為了驗證可行性,開始檢視Airtest官方文件,並在Airtest Project官網下載了AirtestIDE(
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更容易上手。