1. 程式人生 > >FAutoTest-微信小程式 / 公眾號H5 自動化利器

FAutoTest-微信小程式 / 公眾號H5 自動化利器

X5核心H5自動化背景

近來有很多童靴諮詢如何做微信小程式/公眾號等H5頁面來做自動化,之前寫了一篇文章微信小程式自動化測試實踐
https://www.cnblogs.com/yyoba/p/9455519.html/
其中的工具是用appium來做。但是微信小程式/公眾號這種H5頁面是用微信自家X5核心來渲染的,appium對其支援的並不是非常理想,通過ChromeOption定製X5核心的程序執行時其穩定性不盡如人意,最近有關注到騰訊自家開源了專門做微信小程式/公眾號H5頁面自動化的框架,所以給各位小夥伴們嘮叨嘮叨。

FAutoTest

FAutoTest是騰訊自家開發來做微信H5頁面的自動測試框架,既然企鵝能將其開源,說明這個框架應該是經過其內部驗證實踐的。我們可以從GitHub上找到這個開源專案地址

https://github.com/Tencent/FAutoTest/
框架的介紹和使用需要的環境官方網址已經介紹的非常詳細了(對於英文犯暈的同學友好度max),這裡就不多做介紹。
還要再重點強調一遍,必須要開啟微信的核心debug模式,怎麼開啟可以參考我之前的微信小程式自動化測試實踐這篇blog。
之前是寫的微信小程式實踐,那這篇就拿公眾號來試下水。

FAutoTest實踐

工具選型

官方有對其介紹:框架內打包了 Python 版本的 UIAutomator,方便在安卓 Native 頁面進行操作。所以在工具選型上面直接拋棄了appium,一來appium執行速度慢,需要進行大量的初始化操作,二來本身appium就是基於UIAutomator,何不就用python版的UIAutomator呢(感謝國內前輩賀曉聰大神的的框架,對python版封裝的很優秀),有興趣的同學可以去觀摩下:

https://github.com/xiaocong/uiautomator/

頁面元素定位

  • 開啟微信,通過uiautomatorview.bat工具定位到元素資訊
  • 開啟微信公眾號,通過chrome:inspect探測web頁面的元素

以檸檬班軟體測試公眾號舉例:測試流程經過的元素資訊

  • 通訊錄 text定位
  • 公眾號 text定位
  • 檸檬班軟體測試 需要先滑動至檸檬班軟體測試,再去點選
  • 粉絲福利 text定位
  • java自動化 text定位
  • 諮詢按鈕 xpath定位://*[@id="js-bottom"]/div[2]/div[1]/button
  • 諮詢輸入框 xpath定位://*[@id="js-input"]
  • 傳送按鈕 xpath定位://*[@id="js-btn-send"]

自動化指令碼編寫

先手動開啟對應的H5頁面,來看下FAutoTest是否能完成H5頁面的自動化測試,程式碼如下:

#初始化driver
h5Driver = H5Driver()
h5Driver.initDriver()
#點選諮詢按鈕
h5Driver.clickElementByXpath('//*[@id="js-bottom"]/div[2]/div[1]/button')
#點選輸入框
h5Driver.clickElementByXpath('//*[@id="js-input"]')
h5Driver.textElementByXpath('//*[@id="js-input"]','how much')
#點擊發送
h5Driver.clickElementByXpath('//*[@id="js-btn-send"]')
h5Driver.close()

嗯,一切正常,接下來上native原生頁面程式碼,以及unitest用例管理

# coding=utf-8
from fastAutoTest.core.h5.h5Engine import H5Driver
import  unittest
import  os
from uiautomator import Device
from time import sleep

class wechatPublicTest(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        #使用adb命令調起微信
        cmd = 'adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI'
        os.system(cmd)
        #對應裝置的deviceName
        androidDriver = Device('ZX1G225X2G')
        print androidDriver.info
        self.driver=androidDriver
        #休眠一下,等待微信主頁面載入完畢
        sleep(5)

    #微信原生介面流程測試,用uiautomator框架
    def test_public_native(self):
        #找到微信主頁面的“通訊錄” 並點選
        self.driver(text='通訊錄').click()
        #點選公眾號
        self.driver(text='公眾號').click()
        #上下滑動去找檸檬班軟體測試公眾號
        self.driver(scrollable=True).scroll.to(text="檸檬班軟體測試")
        self.driver(text='檸檬班軟體測試').click()
        self.driver(text='粉絲福利').click()
        #選擇java自動化
        self.driver(text='java自動化').click()
        sleep(5)

    #微信公眾號H5部分測試,用到FAutoTest框架
    def test_public_we_h5(self):
        #初始化driver
        h5Driver = H5Driver()
        h5Driver.initDriver()
        #點選諮詢按鈕
        h5Driver.clickElementByXpath('//*[@id="js-bottom"]/div[2]/div[1]/button')
        #點選輸入框
        h5Driver.clickElementByXpath('//*[@id="js-input"]')
        h5Driver.textElementByXpath('//*[@id="js-input"]','how much')
        #點擊發送
        h5Driver.clickElementByXpath('//*[@id="js-btn-send"]')
        h5Driver.close()

    @classmethod
    def tearDownClass(self):
        #測試用例執行結束關閉應用
        cmd = 'adb shell am force-stop com.tencent.mm'
        os.system(cmd)

if __name__ == '__main__':
     unittest.main()

執行效果