小程序自動化測試實踐

2020-09-05 GT七妖妖

曾幾何時,大家還不知道什麼是小程序,它到底能幹些什麼,跟APP有啥區別,跟H5又有啥區別,但是最近幾年,依託於騰訊這顆大樹,已經迅速建立起了小程序良好的生態體系,同時也因為APP市場的飽滿,以及其開發和推廣成本高等問題,目前幾乎所有的網際網路公司的業務都用起了小程序,而且頁面也越來越複雜,涉及的業務場景也越來越多,小程序已經是IT網際網路領域一個舉足輕重的屬性了。

為了應對小程序如火如荼的發 展,騰訊在今年5月底推出了 miniprogram-automator 來支持小程序的自動化測試,本文也主要是基於此項技術來做介紹,讓大家對小程序自動化有個初步的了解。

之前小程序自動化的模式

在騰訊推出此項技術之前,其實小程序的自動化測試已經有所開展了,主要有以下幾種方式:

1. 通過APP自動化的工具appium來實現的

2. 通過Airtest來實現

3. 通過FAutoTest來實現

這些方法大同小異,基本上都屬於黑盒自動化方案。此處不做具體介紹,大家可以自行查閱。

純Miniprogram-automator模式

Miniprogram-automator是騰訊自研的一套小程序自動化sdk,原理跟大家熟知的自動化測試框架selenium webdriver類似,只是操作的目標不同而已。

運行環境

  • Nodejs版本需要大於8.0
  • 小程序基礎庫的版本需要大於等於2.7.3,需要注意的此處不是小程序最低支持的基礎庫的版本,而是本地調試基礎庫的版本

  • 開發工具版本 : 1.02.1907232 及以上

SDK安裝

npm i miniprogram-automator --save-dev

​框架支持編寫語言

目前此框架僅支持通過javascript來書寫自動化測試用例。

簡單應用

代碼片段

const automator = require('miniprogram-automator')const miniProgram = automator.launch({ cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli', projectPath: '/Users/user/Desktop/miniprogram-quickstart-master/miniprogram-quickstart-master', }).then(async miniProgram => { const page = await miniProgram.reLaunch('/pages/index/index') await page.waitFor(500) const element = await page.$('.user-motto') console.log(await element.text()) await miniProgram.close() })

運行用例

將上述代碼保存到test.js中,然後運行命令如下:

node test.js

代碼講解

const automator = require('miniprogram-automator')

首先需要引入miniprogram-automator自動化包,此處需要注意的是代碼文件和miniprogram-automator包的地址的路徑問題,否則會出現類似Cannot find module 'miniprogram-automator' 這樣的問題出現。

const miniProgram = automator.launch({ cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli', projectPath: '/Users/user/Desktop/miniprogram-quickstart-master/miniprogram-quickstart-master', }).then(async miniProgram => {})

此塊創建了miniProgram的實例,該模塊提供了控制小程序的方法automator.launch用來啟動並連接微信開發者工具。

cliPath: 工具cli位置,默認路徑是/Applications/wechatdevtools.app/Contents/MacOS/cli

projectPath: 項目文件路徑

此處是通過cli命令行來啟動微信開發者工具,要達到此目的,需要注意以下前提條件:

1、確保工具安全設置中已開啟 CLI/HTTP 調用功能。

開發者工具菜單中的設置->安全設置->服務埠

2、開啟小程序自動化功能

cli --auto <project_root> --auto-port <port>const page = await miniProgram.reLaunch('/pages/index/index')

此處是通過調用miniProgram提供的relaunch方法創建了一個page的實例,page模塊提供了控制小程序頁面的方法,relanch方法會關閉所有的頁面,打開到應用內指定的頁面。裡面中的參數是頁面的路徑,此路徑可以從app.json文件中獲取到。

await page.waitFor(500) 

此處是調用page的waitFor方法,等待直到指定條件成立,方法的參數是number類型,該參數會被當成超時時長,當經過指定時間後,結束等待。這塊屬於隱式等待,如果想進行顯示等待的話,可以傳入string或是function類型。

const element = await page.$('.user-motto')

此處是調用page模塊的$方法,用來獲取頁面元素,參數是元素的選擇器字符串,定位element元素時可以在微信開發者工具調試器中wxml處進行調試。

await miniProgram.close() 

此處調用miniProgram模塊的close方法關閉與小程序運行的連接並且關閉項目窗口。

Miniprogram-automator + Jest模式

Miniprogram-automator 這個僅僅是小程序自動化的sdk,說直白些,僅提供了一些API,並不是真正意義上的測試框架,這意味著上述的代碼僅僅是javascript的代碼片段,而非真正意義上的自動化測試用例,要達到真正書寫自動化測試用例,需要一款測試框架,該框架可以是市面上任意一款node.js的javascript框架。miniprogram-automator負責操作小程序頁面的信息,測試框架負責組織和斷言。

測試框架選取與安裝

此處使用時下比較流行的facebook出品的一款測試框架Jest,該框架集成了眾多框架的功能。

npm i jest -g

簡單應用

代碼片段

const automator = require('miniprogram-automator')describe('小程序自動化測試初體驗', () => {let miniProgram beforeAll(async () => { miniProgram = await automator.launch({ cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli', projectPath: '/Users/user/Desktop/miniprogram-quickstart-master/miniprogram-quickstart-master',  }) }, 30000) it('測試微信用戶座右銘是hello world', async () => { const page = await miniProgram.reLaunch('/pages/index/index') const user_motto = await page.$('.user-motto') expect(await user_motto.text()).toBe('Hello World') }) afterAll(async () => { await miniProgram.close() })})

運行用例

將上述代碼保存到quickstart.test.js中,然後運行命令如下:

jest quickstart.test.js

測試結果如下

代碼講解

此處僅講解與純miniprogram-automator模式不一樣的代碼部分。

describe('小程序自動化測試初體驗', () => {let miniProgram beforeAll(async () => { miniProgram = await automator.launch({ cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli', projectPath: '/Users/user/Desktop/miniprogram-quickstart-master/miniprogram-quickstart-master',  }) }, 30000)

因為Jest集成了Mocha,chai,jsdom,sinon等功能,所以這些框架的語法都可以在Jest應用,describe此處就是起test suite的意義。

beforeAll屬於測試生命周期API的一種,用在所有測試用例開始前執行。此方法可以進行一些測試初始化的操作。

30000 屬於設置的Jest的超時時間,因為工具項目窗口啟動初次編譯需要一定時長,Jest 默認 5 秒超時太短,所以需要修改如此。

it('測試微信用戶座右銘是hello world', async () => { const page = await miniProgram.reLaunch('/pages/index/index') const user_motto = await page.$('.user-motto') expect(await user_motto.text()).toBe('Hello World')​ })

此處屬於具體的測試用例,可以用it,也可以用test關鍵字。

toBe是matcher函數,使用expect和」matcher」函數結合驗證屬於具體的斷言部分。判斷實際得到的結果跟預期結果是否一致。

afterAll(async () => { await miniProgram.close()})

afterAll也屬於測試生命周期API的一種,用來在所有用例執行完畢後執行,此處可以進行一些清理收尾工作。

註:本文是針對小程序快速啟動模板項目https://github.com/wechat-miniprogram/miniprogram-quickstart 做的自動化測試。

大家對小程序自動化測試有什麼想法和意見,歡迎回復和討論!

相關焦點

  • 乾貨 | 微信小程序自動化測試最佳實踐(附 Python 源碼)
    本文為霍格沃茲測試學院測試大咖公開課《微信小程序自動化測試》圖文整理精華版。隨著微信小程序的功能和生態日益完善,很多公司的產品業務形態逐漸從 App 延升到微信小程序、微信公眾號等。小程序項目頁面越來越多,業務邏輯也越來越複雜,全手工測試已無法滿足快速增長的業務需求。
  • Oculus發布Quest VR開發自動化之最佳實踐
    我們希望通過分享這篇來自Oculus的博文來幫助你開始採用自動化流程,或者至少了解如何評估、開始和擴展你的自動化和測試工作。 本文包含了一系列在確定自動化優先次序和實現過程中的建議技巧和最佳實踐。
  • 技術中臺之DevOps自動化測試實踐
    Devops作為技術中臺的重要組成部分之一,其下「自動化測試」功能也是不可或缺的一環,如何結合DevOps自身提供的自動化測試功能,做好DevOps的接口自動化呢?首先要先了解DevOps為自動化測試提供了哪些功能,如何使用該功能進行自動化測試,以及如何設計測試框架等等,本文將會為大家一一解答。
  • 「自動化測試解放雙手」,測試自動化好處大盤點
    狹義的TA,實際上僅僅是第(3)步,即測試執行層面的自動化。僅僅單個環節的自動化,對於測試工作整體效率的提升是有限的,因為其他步驟可能成為瓶頸。事實上,在測試執行自動化的基礎上,將測試工作的其他高頻步驟,例如升級被測軟體、收集軟體日誌、反饋測試結果等,也以自動化的形式實現,是一件水到渠成的事情。
  • 基於AI 的軟體自動化測試思考與實踐—kylinTOP 測試與監控平臺
    而且不同的人寫的自動化用例風格不一樣,維護起來非常困難,要求測試人員必須撐握一門計算機語言,如:VB、python等。如下所示,是使用robotFramework編輯器基於SeleniumLibrary庫寫的一個自動化測試用例。元素操作之間要寫sleep,測試人員要對每個操作方法熟悉、對於不支持的操作,測試人員要自已通過python腳本語言寫用戶自定義關鍵字。
  • 軟體測試工程師必備:Robot Framework實現接口自動化實踐
    Robot Framework是一款python編寫的功能自動化測試框架。具備良好的可擴展性,支持關鍵字驅動,可以同時測試多種類型的客戶端或者接口,可以進行分布式測試執行。主要用於輪次很多的驗收測試和驗收測試驅動開發(ATDD)。
  • 如何建立測試自動化策略?
    自動化的最常見候選者是:單元測試-由熟悉後端的開發團隊對代碼的最小功能元素進行檢查。組件測試-前端的測試團隊分別檢查每個對象或軟體的一部分。集成測試-檢查單元組合的行為。API測試-集成測試的一部分,重點放在API功能上。兼容性測試-分析不同瀏覽器,作業系統,網絡環境,硬體等中的軟體行為。
  • 全程手把手教你實現Android自動化測試,實踐案例分享
    自動化測試概念詳解:1. Package:是指一個應用的標名,是Android系統中為每一個應用程式分配的一個標誌,每個應用的標誌都必須是不同的。使用Java代碼實現界面拖拽基於自動化測試集的運用測試集的理解:顧名思義就是集合,通常我們把一個系統的所有腳本看做是一個大的集合(100個腳本),如果我們想取一個子集(7個腳本)來測試,那麼我們可以把這7個腳本創建一個小的集合,即為測試集
  • 企業測試自動化如此具有挑戰性的5個原因
    摘要:大多數組織都知道測試自動化對於現代應用程式交付過程至關重要。他們只是不確定如何在沒有高昂的開銷和大規模破壞的情況下在企業環境中實現它。企業組織通常取得小的勝利,但是由於五個主要領域的挑戰,該過程最終會惡化。了解這些挑戰將幫助我們克服挑戰。在傳統的瀑布式開發模型中,僅靠手動測試就可完成所有測試.
  • 最佳實踐—DevOps交付管道中的負載和性能測試
    >在DevOps環境中,將性能測試作為持續交付管道的一部分正在成為一種最佳實踐。因此,性能測試必須是連續應用程式交付不可或缺的一部分。越來越多的團隊意識到,性能下降與功能下降對應用程式質量的影響一樣大!因此,我們將重點放在性能測試上,以及如何將負載和性能測試最佳地集成到應用程式交付中。
  • 最佳實踐——DevOps交付管道中的負載和性能測試
    >在DevOps環境中,將性能測試作為持續交付管道的一部分正在成為一種最佳實踐。因此,性能測試必須是連續應用程式交付不可或缺的一部分。越來越多的團隊意識到,性能下降與功能下降對應用程式質量的影響一樣大!因此,我們將重點放在性能測試上,以及如何將負載和性能測試最佳地集成到應用程式交付中。
  • 關於連續測試須知:Forrester連續功能測試自動化報告
    Diego Lo Giudice在Forrester Wave™:連續功能測試自動化套件,2020年第二季度中指出,「自動化是自適應的核心。儘管測試自動化並不是新事物,但是過去的自動化方法並不能幫助應用程式開發團隊滿足現代交付需求的增長。」
  • 自動化功能測試和接口測試工具整理
    其次,我們還是要將在整個devops最佳實踐裡面,不僅僅開發過程是持續增量進行的,對於測試過程本身也是持續增量進行的,兩者必須匹配。或者理想狀態應該是沒有獨立的測試周期,開發完成的階段往往就是測試也配套完成的時間點。
  • 案例分享丨蔚瀾環保基於MeterSphere的自動化測試實踐
    寧波蔚瀾環保科技有限公司(以下簡稱為蔚瀾環保)是一家致力於「碧海藍天」的環保科技公司,主要的產品包括智能分類垃圾箱,以及小程序其中,測試經理兼任自動化測試,功能測試人員2人。作為一家成立於2019年的公司,軟體團隊組建時間較短,但是產品已經更新了3代(包括硬體)。隨著產品功能的增多,新功能的加入難以有效評估影響範圍,直接導致回歸測試的時間越來越長。如果仍然採取之前的功能測試模式,很難滿足公司業務發展的需要,引入自動化測試勢在必行。
  • 自動化測試進階課程——Selenium自動化測試通關實戰班
    接觸了不少同行,由於他們之前一直做手工測試,現在很迫切希望做自動化測試,其中不乏工作3年以上的人,但有些初學者很糾結是學QTP還是Selenium,小編是建議學Selenium。Selenium不僅可以用多種程式語言編寫測試程序,更能直接跨越各種web瀏覽器和作業系統執行測試;Selenium還是被公認為最實用的自動化測試平臺,因為它的功能很簡單,卻可以提供滿足90% web應用需求的用戶界面。那Selenium自動化測試的該學什麼?從哪裡學起?看Selenium課程視頻學的快,先了解下這份學習大綱。
  • 9個開源自動化測試框架,質量保證測試工程師用起來
    自動化測試框架由一組最佳實踐,通用工具和庫組成,可幫助測試人員評估多個Web和移動應用的功能,安全性,可用性和可訪問性。而在,軟體開發世界中有很多的自動化測試框架,該如何選擇?雖然技術團隊可以構建複雜的自動化測試框架,但是當可以選擇現有的開源工具,庫和測試框架獲時,則可以選擇適合自己的框架,來節省開發成本和時間。
  • 從功能測試轉成自動化測試,軟體測試工程師該如何成功轉型?
    所以想做自動化,首先得了解一下自動化測試的一些常見問題。1. 什麼是自動化測試?自動化測試,顧名思義,自動完成測試工作。通過一些自動化測試工具或自己造輪子實現模擬之前人工點點/寫寫的工作並驗證其結果完成整個測試過程,這樣的測試過程,便是自動化測試。
  • Python 自動化測試(四):數據驅動
    《Pytest 自動化測試最佳實踐:實用特性與進階技巧》!這種測試,在功能測試中非常耗費人力物力,但是在自動化中,卻比較好實現,只要實現了測試操作步驟,然後將多組測試數據以數據驅動的形式注入,就可以實現了。前面文章學習了參數化,當數據量非常大的時候,我們可以將數據存放到外部文件中,使用的時候將文件中的數據讀取出來,方便測試數據的管理。
  • 2020 年十大最佳自動化測試工具
    測試自動化是這些方面的重要組成部分。最新的《 2018-2019年世界質量報告》表明,測試自動化是實現"快速質量"的最大瓶頸,因為它是成功採用敏捷和DevOps的推動力。沒有好的工具就無法實現測試自動化。因為它們決定了如何執行自動化以及是否可以實現自動化的好處。測試自動化工具是DevOps工具鏈中的關鍵組件。
  • 自動化測試的十大優勢
    通過這種方式,自動化測試可以保證軟體的熟練程度,而不需要重複和手工幹預。自動化測試最大的商業好處之一是,它可以一次又一次地實現。卓碼測評整理了自動化測試的10個優勢,可供參考:1、反饋快速自動化測試對於軟體項目的各個階段的驗證來說是一種解脫。