1. 程式人生 > >React Native框架如何白盒測試-HIPPY介面測試架構篇

React Native框架如何白盒測試-HIPPY介面測試架構篇

本文轉載自騰訊TMQ團隊 ,侵權刪。

 

1、開天闢地

 

Hippy是什麼呢?簡單點,能用JavaScript來寫Android和iOS應用的框架, 類似業界的React Native。

 

好吧,我們還是嚴謹一點。Hippy是一個前終端一體化的JavaScript Framework,可以用JavaScript構建Native原生介面,以及呼叫Native的能力。同時可以一次編寫Android和iOS兩端執行。

 

 

 

這麼牛B的框架,應該如何進行程式碼級別的測試保障呢?請繼續往下看。

 

 

 

2、Hippy架構和測試策略

 

(1)Hippy分層框架

 

通過程式碼閱讀分析,我們得到的Hippy框架主要架構圖,如下。

 

 

 

接下來我們對Hippy底層框架進行具體分析,制定相應的測試策略。

 

(2)  前端框架層

 

主要實現了JSX頁面DOM轉化、js/native橋接介面、View/Module的前端實現。

 

Ø JSX頁面DOM轉化

 

這部分我們採用自動化,模擬生成各種型別JSX頁面,通過遺傳演算法混合View和屬性。然後將混合後的JSX做DOM解析,將解析後結果和預期做對比測試。

 

Ø 橋接介面、View/Module的前端實現

 

對於橋接介面、View/Module的前端實現,單獨的前端單元測試難以驗證實際效果,必須要和終端實現進行結合,所以我們這部分測試策略是進行前後端打通的介面測試。

 

(3) JS引擎層

 

JS引擎層主要是JS程式碼通過Google V8引擎執行,然後通過so呼叫java程式碼。主要作用是打通JS和Java程式碼呼叫通道。這部分由於Google自己產品已經有完善測試體系,我們不用在這個地方做重複建設。剩下的只是hippy橋接so,由於只是JNI介面沒有太多業務邏輯。所以我們的測試策略是,採用Code Review和前後端介面測試進行保障。

 

(4)終端框架層

 

主要實現了Dom節點的終端渲染、View/Module的終端實現、Hippy的生命週期管理等功能。

 

Ø Dom節點的終端渲染、View/Module的終端實現

 

這部分View/Module實現和View渲染工作,特別是View部分我們的測試策略是,採用前後端打通的介面測試進行。詳情參考本系列第二彈文章,敬請期待。

 

Ø Hippy的生命週期管理

 

通過程式碼分析得到Hippy的生命週期如下。

 

 

 

其中對啟動速度影響最大的,莫過於“引擎初始化”和“業務JavaScript載入”時間了。其中,針對“引擎初始化”時間,測試策略是在開發階段就進行程式碼埋點,多次進行效能測試後開發優化。

 

但是“業務JavaScript載入”時間,這個完全是由各業務自己決定和優化,並非Hippy底層能決定。所以,這裡測試策略採用程式碼埋點,監控具體業務JavaScript載入時間,如果超過500ms就告警,防止業務使用者體驗下降。

 

 

 

3、 介面測試框架選型和實現

 

由前面第二章內容可見,前後端打通的介面測試是個重頭戲,必須仔細選型構建。

 

(1) 測試框架對比

 

由於Hippy同類產品較少,公司外主要有Facebook的React Native,以及類似的渲染結構的Chrome核心。公司內部選取QQ瀏覽器核心作為對比物件。考察重點集中在:

 

Ø 使用的技術棧

 

Ø 測試條件構建

 

Ø 測試結果驗證

 

Ø 測試執行形式

 

React Native

 

簡介:React native框架是facebook推出的,通過JS程式碼構建跨平臺APP的開發框架。

 

Github:https://facebook.github.io/react-native/

 

那麼通過下載Github上的React Native的原始碼,我們可以清晰看到React Native針對Android測試程式碼的整體結構如下。

 

 

 

同學們一眼就能看出這是標準的android介面測試程式碼形式,接下來我們針對關心的幾個問題一一分析下。

 

Ø 使用的技術棧

 

很顯然就是Android+JUnit+JavaScript。

 

Ø 測試條件構建

 

所有的測試條件都在前端通過JavaScript進行構造,如圖。

 

 

 

Ø 測試結果驗證

 

結果驗證分為在Android端和JavaScript端兩端驗證,下圖是Android端驗證例子。

 

 

 

下圖是在前端JavaScript驗證測試結果,如下圖。

 

 

 

Ø 測試執行形式

 

用例執行標準android介面測試執行,把Demo.apk和Test.apk安裝在Android手機上,通過adb命令啟動單元測試用例。

 

QQBrowser

 

簡介:QQBrowser瀏覽器核心,針對html的渲染機制和hippy工作機制非常類似。只不過QQBrowser核心針對html渲染上屏、hippy針對JavaScript進行渲染上屏。

 

Ø 使用的技術棧

 

JavaScript+Html,主要思想是在不同的瀏覽器上執行js,檢視瀏覽器對js的支援程度。

 

Ø 測試條件構建

 

測試條件直接通過頁面JavaScript編寫,如下圖。

 

 

 

Ø 測試結果驗證

 

結果的驗證也是JavaScript的catch exception來檢驗,如果瀏覽器不支援某個JavaScript屬性,就丟擲exception,我們通過抓取exception判斷結果不通過。

 

 

 

Ø 測試執行形式

 

瀏覽器直接載入頁面執行,需要注意的是有一部分屬性還不能完全自動化,需要人手工進行點選頁面進行判斷,如下圖。

 

 

 

Chrome

 

簡介:谷歌公司的開源專案Chromium中,關於webview(核心)部分渲染測試,和QQBrowser核心渲染測試比較類似。

 

Doc:

 

https://www.chromium.org/developers/testing/android-tests/android-webview-tests

 

Code:

 

https://chromium.googlesource.com/chromium/src.git/+archive/63.0.3239.26.tar.gz

 

Ø 使用的技術棧

 

Android+JavaScript+JUnit,主要思路是在終端Java中直接讀取html和JavaScript程式碼,然後進行渲染結果確認。

 

Ø 測試條件構建

 

直接在終端Android程式碼中寫入測試html。

 

 

 

或者讀取本地html檔案

 

 

 

Ø 測試結果驗證

 

直接在Android程式碼中進行驗證判斷。

 

 

 

Ø 測試執行形式

 

Android介面測試執行形式。

 

對比總結

 

通過以上三種產品測試策略對比,我們列出如下表格資料方便決策。

 

 

 

由於產品形態類似,驗證結構靈活性等原因,最後我們選擇了類似ReactNative的測試架構。

 

(2)測試框架構建

 

從上一節結論可以知道,我們的介面測試架構採用類似ReactNative的測試架構,如下。

 

 

 

前端測試層

 

這裡是針對Hippy“前端框架層”來說的。

 

Ø Param Pip

 

用來將前端引數傳遞給終端Pip。

 

Ø Assert Pip

 

用來將前端斷言結果終端Pip。

 

終端測試層

 

這裡是針對Hippy“終端框架層”來說的。

 

Ø Pip

 

接收前端Pip傳送的各種結果進行處理。

 

Ø PreCondition

 

測試的前置條件,包含例如:jsbundle的設定、啟動APP等。

 

Ø Reflection

 

反射工具,針對各種屬性和回撥物件獲取提供支援。

 

Ø Gesture

 

使用者動作模擬,封裝了常用的使用者操作。

 

Ø Activity

 

作為測試Activity,其中會載入jsbundle並且在終端展示渲染效果。

 

Android Framework層

 

Ø Configuration

 

提供執行環境配置管理。

 

Ø Junit

 

Junit單元測試框架。

相關推薦

React Native框架如何測試-HIPPY介面測試架構

本文轉載自騰訊TMQ團隊 ,侵權刪。   1、開天闢地   Hippy是什麼呢?簡單點,能用JavaScript來寫Android和iOS應用的框架, 類似業界的React Native。   好吧,我們還是嚴謹一點。Hippy是一個前終端一體化的JavaS

android 架構之整合react native框架js混編APP

本篇文章主要總結一下現在APP當中使用的js、webView混編架構和技術。 什麼是 js 混編? js混編簡單說就是使用JavaScript開發APP程式。 android應用使用的是java,Kotlin 、c/c++ 為主的語言開發,ios使用的ob

使用react-native框架開發APP總結。

先交代一下背景,專案已經開發出web端,小程式端。在這之後,需要開發APP,對於React,es6已經運用的很熟悉了,所以採用了react 系列的React-native技術,因為是第一次使用react-native,還是有很多欠考慮的地方,歡迎交流。 一、當架子已經搭起來,需要考慮如下問題:

介面測試 Http 介面測試框架 (思路 + 實現中 + 開源 + 可能難產)

寫在前面   有時間我會把我初步的想法整理好分享出來,大家一起來探討它的可行性,它不一定適用你們的業務,但是非常適合我專案的業務。雖然它也可能難產,但是我想盡力去做、去完成,也算鞏固一下自己的知識,應用到專案中去。 這個框架需要大家不斷的鞭策、一起努力、共同搭建,可以隨時發表看法,歡迎拍磚,求不打

介面測試 Http 介面測試框架 (開源 + 已投入實際專案中)

轉載地址:https://testerhome.com/topics/5631 說明 由於部分內容涉及公司機密,已用字母替換,不影響閱讀 實際效果 驗證1000個介面平均耗時6s(看機器配置及網速)第一次投入使用,馬上發現5個介面異常並且該驗證過程不到30s的時間

[React Native] Android 屏優化

APP是原生嵌入一個React Native介面 背景 按官方例項集成了一個React Native介面,但每次開啟都感覺等待時間有點長,會有白屏狀態。這對於強迫症來說簡直不能忍。於是決定優化。 效果 優化前的效果,白屏時間較長。

React Native 啟動屏問題解決方案,教程

問題描述: 用React Native架構的無論是Android APP還是iOS APP,在啟動時都出現白屏現象,時間大概1~3s(根據手機或模擬器的效能不同而不同)。 問題分析: 為什麼會產生白屏? React Native應用在啟動時會將js bundle

React-Native 中 StackNavigator的跳轉介面的使用

剛接觸React-Native,其中對React,javascript, 也僅僅是知道的水平,但是並不影響對這邊文章的閱讀,首先你需要確認,開發react-native的環境配置,和工具安裝你已經全部安裝並測試可以使用! 一,新建一個專案:(名稱隨意)Smlz

3、React Native實戰——實現QQ的登入介面

今天記錄的是使用React Native實現QQ的登入介面,如果不瞭解React Native,請看React Native中文網站:http://reactnative.cn/ 下面是一張手機QQ的登入介面截圖: 下面是用React Native實現的類似上圖的登入效果

測試系列:介面測試與效能測試的區別

       最近我在一個論壇上看到了一個關於效能測試和介面測試的經典問題,問題如下: 問題:後端效能測試,一個功能其實都是由後臺多個介面組成的。 例如一個單據的儲存,可能後臺需要呼叫幾個介面。用LR錄製這個功能做效能測試。和把它這個功能呼叫的幾個介面連線起來一起做介

Python測試介面測試的基礎

介面測試基礎   測試對於介面測試的理解總是停留在工具使用層面,很多情況下,測試人員會花很大的代價去學習一個工具,而測試工具本身的侷限性,又導致測試人員陷入想直接用現成的測試框架卻又無法進行擴充套件的僵局,最後由於專案的特殊性等客觀因素,測試人員只能放棄工具,脫離了工具的視覺化介面友好操作,發現直接連線口是

介面測試介面測試學習之資料總結

一、什麼是介面? 應用程式介面(Application Programming Interface,簡稱:API),又稱為應用程式設計介面。通俗講就是HTTP請求。   二、介面型別 介面一般分為兩種: 1、程式內部的介面 2、系統對外的介面 &

最新前端React Native,後臺Node.js,用輕量級架構開發一款直接在AppStore上線的App

前端React Native,後臺Node.js,用輕量級架構開發一款直接在AppStore上線的App,只需一週時間! 這不是一門技術多麼高深的課程 卻可以讓你快速開發一款App 一週開發一款非常“好玩兒”的上線App 這是一款已經在App store上線的App,源於講師一

隨行付微服務測試介面測試和契約測試

背景 日常開發過程中,專案的介面通常由服務提供方約定和提供,微服務模式下介面被多個消費者呼叫更是常態,那麼提供方介面的變更如何快速、高效、無遺漏的通知給消費者呢?另外,當一個service同時被多個使用者呼叫,如何保證對service的修改可以讓其它所有使用者造成的影響都能被感知到?這些問題契約測試可以給你答

大前端的自動化工廠(5)—— 基於Karma+Mocha+Chai的單元測試介面測試

一. 前端自動化測試 大多數前端開發者對測試相關的知識是比較缺乏的,一來是開發節奏很快,來不及寫,另一方面團隊裡也配備了“人肉測試機”,完全沒必要自己來。但隨著專案體量的增大,許多人維護同一份程式碼,經常會出現有些函式莫名其妙地結果不對了,或者某個介面的入參變了,又或者哪位大哥把後端返回的資料結構給改了。

python - 介面自動化測試 - HttpRequest - 介面測試類封裝

# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: http_request.py @ide: PyCharm Community Edition @time: 2018-12-20 11:38 @blog: h

python介面測試__WebService介面測試 (suds + pyunit)

1. 在pycharm裡面安裝suds庫    也嘗試過用pip install和手動安裝,匯入庫的時候都找不到。在pycharm裡面直接安裝是可以用的。    2. 測試web service介面   匯入庫: from suds.client import Client

【軟體測試介面測試的簡介

1.介面測試的背景 1.1    什麼是介面測試 介面測試是測試系統元件間介面的一種測試。介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的互動點。測試的重點是要檢查資料的交換,傳遞和控制管理過 程,以及系統間的相互邏輯依賴關係等。 1.2   為什麼要做

web前端測試——mocha介面測試

執行環境:macbook(windows沒有測試) 條件:電腦安裝了node.js 第一步: 在桌面新建test資料夾,開啟sublim text,並將資料夾拖入sublim text,方便管理檔案 第二步: 開啟終端,輸入cd Desktop/test進入到該