愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐_第1頁(yè)
愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐_第2頁(yè)
愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐_第3頁(yè)
愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐_第4頁(yè)
愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

愛(ài)奇藝移動(dòng)端APP健壯性測(cè)試的設(shè)計(jì)與實(shí)踐01前言一款\t"/html/67/_self"APP的發(fā)布以及新功能的迭代需要經(jīng)過(guò)嚴(yán)格的質(zhì)量保證,而崩潰性問(wèn)題是影響APP穩(wěn)定的頭號(hào)問(wèn)題。其中,因前端不兼容后端服務(wù)數(shù)據(jù)格式變更而引起的崩潰問(wèn)題占有一定的比例。這類崩潰問(wèn)題一般排查難度較大,且利用常規(guī)\t"/html/67/_self"測(cè)試方法通常很難有效降低這種類型缺陷的比例。**是否有更好的方式來(lái)提前預(yù)防數(shù)據(jù)變更導(dǎo)致的崩潰問(wèn)題?**本文將重點(diǎn)介紹愛(ài)奇藝\t"/html/67/_self"技術(shù)產(chǎn)品團(tuán)隊(duì)打造的APP健壯性測(cè)試實(shí)踐內(nèi)容。02背景愛(ài)奇藝APP擁有豐富的視頻資源,需要頻繁進(jìn)行節(jié)目上線或者下線、各種活動(dòng)配置等操作調(diào)整。這些內(nèi)容迭代主要是通過(guò)后臺(tái)管理系統(tǒng)進(jìn)行,然后下發(fā)到APP端并在UI層展示。在版本功能迭代過(guò)程中盡管有大量的、針對(duì)性的質(zhì)量保證方法,但是服務(wù)端業(yè)務(wù)邏輯盤根錯(cuò)節(jié),一些極少用到的功能配置可能在歷經(jīng)多次代碼迭代后在最新版本APP中出現(xiàn)兼容問(wèn)題,一些第三方依賴接口可能會(huì)因?yàn)楦袷降淖兓l(fā)前端UI不兼容甚至崩潰,這對(duì)于APP的健壯性、穩(wěn)定性提出了很大的挑戰(zhàn)。愛(ài)奇藝技術(shù)團(tuán)隊(duì)對(duì)線上歷史問(wèn)題進(jìn)行總結(jié)、對(duì)行業(yè)內(nèi)前沿技術(shù)進(jìn)行探索,最終經(jīng)過(guò)多次探討后設(shè)計(jì)了一種APP健壯性測(cè)試方案。團(tuán)隊(duì)研發(fā)的基礎(chǔ)網(wǎng)絡(luò)庫(kù)SDK對(duì)APP收到的服務(wù)端接口返回進(jìn)行攔截,從網(wǎng)絡(luò)層進(jìn)行數(shù)據(jù)替換。團(tuán)隊(duì)根據(jù)歷史問(wèn)題的總結(jié)、日常經(jīng)驗(yàn)的積累提煉出一系列數(shù)據(jù)組合,當(dāng)APP進(jìn)入需要測(cè)試的頁(yè)面時(shí),就會(huì)去拉取并進(jìn)行“臟數(shù)據(jù)”填充,以便盡早發(fā)現(xiàn)因數(shù)據(jù)變更引發(fā)的崩潰問(wèn)題。03技術(shù)實(shí)現(xiàn)從上圖可以看到:1)策略配置是一個(gè)獨(dú)立的Web化模塊,APP內(nèi)“臟數(shù)據(jù)”注入規(guī)則都由策略配置控制。2)APP內(nèi)的基礎(chǔ)網(wǎng)絡(luò)庫(kù)SDK模塊是一個(gè)獨(dú)立的功能模塊,不會(huì)對(duì)其他功能模塊有影響;并具有單獨(dú)的開關(guān)控制,只有開關(guān)開啟時(shí)才對(duì)后端返回的數(shù)據(jù)進(jìn)行攔截替換。下面將對(duì)實(shí)現(xiàn)情況進(jìn)行具體說(shuō)明。一、WEB策略配置--可視化界面策略配置的前提是確認(rèn)頁(yè)面的哪些接口請(qǐng)求需要進(jìn)行校驗(yàn),通常一個(gè)頁(yè)面有非常多的后端請(qǐng)求,每個(gè)請(qǐng)求都會(huì)帶有很多不同類型的參數(shù),對(duì)應(yīng)的返回?cái)?shù)據(jù)帶了大量的KEY和VALUE,數(shù)據(jù)配置對(duì)測(cè)試結(jié)果尤其重要。豐富的高?!芭K數(shù)據(jù)”才能極大的提升網(wǎng)絡(luò)數(shù)據(jù)測(cè)試的效果,如果純手工輸入“臟數(shù)據(jù)“進(jìn)行測(cè)試,人力成本較高,最終我們通過(guò)WEB可視化界面進(jìn)行數(shù)據(jù)策略配置,大幅度減少用戶對(duì)“臟數(shù)據(jù)”的設(shè)計(jì)成本,因此策略配置界面的原則是數(shù)據(jù)通配、操作簡(jiǎn)單、策略可復(fù)用。--策略示例圖-1--策略示例圖-2從策略示例圖1、2可以看到,配置分為二部分:1)URL配置:被測(cè)頁(yè)面的請(qǐng)求URL,支持域名模糊匹配、多域名同策略、域名參數(shù)匹配等。2)數(shù)據(jù)配置:支持單節(jié)點(diǎn)、多節(jié)點(diǎn)、節(jié)點(diǎn)移除/跳過(guò);支持同類型、非同類型、emoji表情、#color、null、空值、object等。可視化頁(yè)面為用戶提供多種默認(rèn)策略,這些默認(rèn)策略均是測(cè)試中提煉出的經(jīng)驗(yàn)積累,用戶僅需配置待測(cè)URL即可使用,極大地降低操作成本。二、策略通信原理鑒于測(cè)試的目標(biāo)覆蓋度以及測(cè)試任務(wù)執(zhí)行效率兩個(gè)維度考慮,我們具有兩種遍歷JSON的策略:1)刷新單個(gè)節(jié)點(diǎn)進(jìn)行順序訪問(wèn)此策略可以覆蓋所有節(jié)點(diǎn)檢查,根據(jù)返回結(jié)構(gòu),依次替換節(jié)點(diǎn)數(shù)據(jù)。具有節(jié)點(diǎn)全覆蓋的特點(diǎn)。接口返回?cái)?shù)據(jù)體量大時(shí)耗時(shí)會(huì)較長(zhǎng),所以此方式適用于UI自動(dòng)化測(cè)試。2)刷新遍歷所有節(jié)點(diǎn)的全節(jié)點(diǎn)訪問(wèn)此策略每次訪問(wèn)到匹配的URL時(shí)從列表內(nèi)隨機(jī)獲取一個(gè)臟數(shù)據(jù),對(duì)原數(shù)據(jù)進(jìn)行替換。具有數(shù)據(jù)隨機(jī)性強(qiáng),遍歷靈活度高的特點(diǎn)。接口返回?cái)?shù)據(jù)體量無(wú)論大小,各個(gè)節(jié)點(diǎn)均有機(jī)會(huì)被替換,所以此方式適用于穩(wěn)定性測(cè)試。遍歷策略開發(fā)難點(diǎn):任務(wù)過(guò)程中如有發(fā)生崩潰,重啟APP后遍歷執(zhí)行仍然會(huì)在相同的崩潰節(jié)點(diǎn)反復(fù)測(cè)試,這導(dǎo)致測(cè)試效率低下后續(xù)測(cè)試步驟無(wú)法繼續(xù)進(jìn)行。為了解決這個(gè)問(wèn)題,測(cè)試中SDK維護(hù)一個(gè)“臟數(shù)據(jù)”遍歷的訪問(wèn)棧使用非遞歸遍歷,會(huì)保存遍歷棧到本地,不論是重啟還是發(fā)生崩潰都可以直接從這個(gè)棧里恢復(fù)訪問(wèn)進(jìn)度。SDK數(shù)據(jù)攔截實(shí)現(xiàn):通過(guò)基于ASM的hook框架編譯時(shí)指定網(wǎng)絡(luò)庫(kù)對(duì)應(yīng)的方法進(jìn)行hook修改網(wǎng)絡(luò)庫(kù)的字節(jié)碼實(shí)現(xiàn)攔截,將JSON數(shù)據(jù)按指定規(guī)則進(jìn)行修改,最后將數(shù)據(jù)返回給網(wǎng)絡(luò)庫(kù),傳遞到請(qǐng)求網(wǎng)絡(luò)的業(yè)務(wù)方,此方法能有效地降低對(duì)基礎(chǔ)庫(kù)的侵入性能。SDK的特點(diǎn):泛用性廣:移動(dòng)端有各種不同的網(wǎng)絡(luò)庫(kù)在使用,把攔截網(wǎng)絡(luò)庫(kù)的功能獨(dú)立成一個(gè)library并適應(yīng)不同開發(fā)團(tuán)隊(duì)的技術(shù)場(chǎng)景,目前已落地到多個(gè)業(yè)務(wù)線。非侵入式對(duì)接:各業(yè)務(wù)線通過(guò)該SDK對(duì)接網(wǎng)絡(luò)庫(kù)進(jìn)行數(shù)據(jù)攔截,原有網(wǎng)絡(luò)庫(kù)無(wú)任何侵入式修改。\t"/html/67/_self"缺陷管理:在業(yè)務(wù)方使用“臟數(shù)據(jù)”的過(guò)程中發(fā)生異常崩潰,SDK自動(dòng)捕捉異常信息并投遞缺陷給模塊的負(fù)責(zé)人,測(cè)試任務(wù)將重啟APP繼續(xù)測(cè)試流程的循環(huán)。三、測(cè)試驅(qū)動(dòng)方式SDK開關(guān)打開后,運(yùn)行我們的測(cè)試應(yīng)用服務(wù),就可以在APP的UI頁(yè)面上進(jìn)行操作。操作方式包括:\t"/html/67/_self"自動(dòng)化測(cè)試、穩(wěn)定性測(cè)試、手工測(cè)試。自動(dòng)化測(cè)試(UI自動(dòng)化)我們使用UI自動(dòng)化作為主要的驅(qū)動(dòng)方式之一,UI自動(dòng)化可以精準(zhǔn)到達(dá)被測(cè)頁(yè)面,并進(jìn)行指定場(chǎng)景接口的返回?cái)?shù)據(jù)替換測(cè)試。針對(duì)\t"/html/67/_self"健壯性測(cè)試的UI自動(dòng)化,無(wú)需復(fù)雜的步驟,在達(dá)到指定頁(yè)面后,重復(fù)觸發(fā)接口請(qǐng)求。此驅(qū)動(dòng)方式具有編寫便利、維護(hù)成本低的特點(diǎn)。當(dāng)被測(cè)頁(yè)面接口返回?cái)?shù)據(jù)量級(jí)較大時(shí),需要耗費(fèi)較長(zhǎng)時(shí)間才能達(dá)到數(shù)據(jù)高覆蓋的目的,UI自動(dòng)化無(wú)需值守可以極大降低人力投入。此方式適用于回歸測(cè)試、大量數(shù)據(jù)頁(yè)面、性能壓測(cè)等測(cè)試場(chǎng)景。穩(wěn)定性測(cè)試(Monkey類測(cè)試)為了讓APP混沌測(cè)試覆蓋更廣,我們將“臟數(shù)據(jù)”修改方案在穩(wěn)定性測(cè)試中進(jìn)行實(shí)施,以低成本實(shí)現(xiàn)多頁(yè)面觸達(dá)的需求,觸發(fā)更多頁(yè)面的后端接口。默認(rèn)使用全量字段隨機(jī)注入。以下是處理邏輯:根據(jù)預(yù)埋或者自定義的頁(yè)面層級(jí)訪問(wèn)權(quán)重,對(duì)APP中的頁(yè)面進(jìn)行隨機(jī)訪問(wèn)。在APP啟動(dòng)且進(jìn)入預(yù)期頁(yè)面之前打開SDK開關(guān)。為了提高修改頻率,可以在進(jìn)入目標(biāo)頁(yè)面后適當(dāng)加入刷新操作(可配置)。期間如觸發(fā)崩潰問(wèn)題,則通知SDK側(cè)進(jìn)行日志提取和缺陷提交,隨后關(guān)閉SDK,進(jìn)入下一個(gè)循環(huán)。手工測(cè)試特點(diǎn)優(yōu)勢(shì):具備靈活度高、成本低,針對(duì)自動(dòng)化難以涉及的掃碼、支付等多種場(chǎng)景;使用場(chǎng)景:在開發(fā)準(zhǔn)入、新\t"/html/67/_self"功能測(cè)試中落地,針對(duì)新增接口節(jié)點(diǎn)進(jìn)行充分驗(yàn)證;執(zhí)行流程:配置策略>安裝APK>進(jìn)入啟動(dòng)頁(yè)>填寫策略ID>進(jìn)入被測(cè)頁(yè)>缺陷分析>自動(dòng)缺陷管理。04效果收益及未來(lái)規(guī)劃目前,該技術(shù)方案已經(jīng)推行到多個(gè)業(yè)務(wù)線,在測(cè)試過(guò)程中召回多個(gè)難以發(fā)現(xiàn)的缺陷,幫助規(guī)避了線上可能出現(xiàn)的崩潰問(wèn)題;新業(yè)務(wù)新場(chǎng)景接入便捷,落地投入成本較低,自動(dòng)化任務(wù)幾乎零維護(hù);缺陷

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論