出去打工和儿子租房
  • APP測試思想及流程要點全面總結

    2021-09-18 13:57發布

    APP已經滲透到每個人的生活、娛樂、學習、工作當中,作為現如今幾乎最廣泛的應用程序,在所有的移動平臺上都有應用,并且以極高的速度增長。但是作為程序而言,出現的時間并不是非常久。很多原有的軟件測試流程和思想無法直接套用在APP的測試中,因為和一般的PC端軟件相比,APP又具有很多特殊的屬性。

    例如:

    傳統軟件針對不同的平臺甚至系統,都會有完全對應的版本,而APP一般對于系統版本并不敏感;

    其次,APP基本都是輕量化開發,無需復雜的設置或者調試,往往都是傻瓜化安裝,上手難度極低;

    另外,APP的運行環境基本上是以無線連接為主(3/4/5G、WiFi),對于網絡連接的速度比較敏感……

    這些都是和傳統軟件并不一致的地方。

    所以,APP作為一個特殊種類的軟件,是有必要單獨總結出來測試方法和測試思路的,這對于測試對象為APP的測試工程師來說,是十分必要的。

    APP測試思想

    APP測試實際上依然屬于軟件測試的范疇,是軟件測試的一個真子集,所以經典軟件測試理論,依然是在APP測試中有效的,只是需要針對APP的特殊情況進行一定的增補和額外覆蓋。

    對于APP測試,一般采用的是黑盒測試思想,也會在必要的時候進行自動化測試以及性能測試,并且對于APP還會有專項測試,例如內存、流量以及耗電量測試。

    APP測試也是需要進行功能測試的,其功能測試與傳統功能測試是同樣的測試流程和標準,并沒有很大的區別。

    APP測試流程

    測試預備條件

    在軟件測試中,測試預備條件是經常被忽略的方面,以至于很多測試都會在這里被阻塞。所以在APP測試中,因為牽扯的預備條件比傳統軟件更多些,更需要額外精力進行事先準備。

    在測試任務開始前,所具備的測試資源應該著重檢查,包括但不限于:功能需求文檔、功能需求說明、測試設備、測試方案、測試環境、測試人員等。

    測試范圍

    測試范圍是APP中一個比較重要,卻經常容易被忽略的方面。APP作為與移動平臺進行適配的軟件,是有針對平臺范圍和版本范圍的。

    當前移動平臺大體分為安卓、iOS和其他類型(例如Blackberry/Windows Phone/Symbian/…),其中安卓又分為原生系統、改造系統(EMUI/MIUI/Flyme/…)。這些不同的改造平臺與安卓原生系統存在著版本對應關系。而其他份額較小的系統類型,則存在自己的版本演進體系,針對這些系統的測試,需要花費一定的精力進行梳理版本脈絡。

    安卓系統本身還存在著版本演進,改造版本除了自身的版本演進之外,還和安卓原生版本存在著對應的關系,許多在原生系統中覆蓋的版本范圍,在改造系統中,并不是嚴格一一對應的。

    所以在APP測試中,要特別注意測試對象所覆蓋和針對的系統版本以及對應平臺,尤其是對于測試設備本身硬件的要求,要格外注意。

     

    APP測試點

    針對APP的特點,主要有以下四個方面是APP軟件的測試重點,分別是:功能測試、性能測試、界面/易用性測試和兼容性測試。這基本上已經涵蓋了APP測試中所要重點關注的指標,如下圖所示:

     

    這些測試點包括了我們針對APP進行測試的所有關鍵點。按照APP的架構來分,基本上分為前端和后端兩大部分。這兩大部分的項目中,有數項作為基礎覆蓋項,是需要在每次的測試中都必須進行測試的:安裝/卸載測試、UI測試、標稱功能測試、標稱性能測試、安全測試、兼容測試、升級更新測試、用戶體驗測試、硬件操作測試、接口測試和數據庫測試。

    在敏捷測試理論中,功能測試是往往被單一劃分出來的,軟件測試首先被劃分為功能測試和非功能測試兩大類,其余的測試內容都是從非功能測試中細分出來的。

    作為軟件測試工程師來說,再將測試內容劃分為前端和后端,再將這些測試種類分別對應到前后端中,再進行對應測試,是非常高效且可以杜絕測試漏項的方法。

    在早期的APP測試中,手工測試是用來進行APP測試的不二法門,軟件的手工測試極為重要。但隨著技術的不斷發展和自動化測試技術的不斷深入,之前采用的一些測試方法,已經可以采用自動化測試的辦法進行覆蓋和替代,大大降低了測試工程師的負載,也提高了效率,但是手工測試依然是不可替代的。

    因此,從手工測試開始了解和認知APP測試,是非常有必要且關鍵的。

    APP測試點分項

    對于APP來說,不同用途的APP所側重的測試方面也是非常不同的,另外,不同的用戶可能對于同一款APP的使用習慣也存在不同之處。

    對一款APP來說,可能用戶具體的使用場景會遠遠超過項目開發團隊的預想,所以在測試過程中,場景的完備考慮和多場景的交互以及有側重地進行測試是十分必要的。

    從一款APP被指定要被測試開始,我們就進入了測試準備階段,這就要求測試工程師在方案預想中,要盡可能多地考慮。

    安裝卸載測試

    對于APP的應用來說,最先進行的就是安裝及卸載測試,這是APP運營和測試的開始,并且針對不同的平臺,APP應該提供相應的版本以及適配版本說明。

    因為考慮產品版本更新迭代速度,產品都會向下兼容較為早期的版本,所以一般不會注明所支持的最初版本。這一點與一些更新并不頻繁的APP不同,需要注意,特別是經過魔改的安卓版本。

    在這一點上,需主要考慮的是不同的安裝途徑、不同的系統版本、不同的安裝方式(包括但不限于通過應用市場、APK文件卡載、藍牙分享)、不同的卸載方式等。

    安裝測試還會涉及到一個場景,就是升級。在項目中版本升級是一個極為重要的測試項,需要注意的是,每次版本的迭代都需要對升級進行檢測,去驗證升級之后主要功能是否正常。一般多用冒煙測試進行驗證。一般情況下,正常用戶升級自己的軟件通過三種途徑:

    1)根據APP彈出的升級提示框選擇升級

    2)自己到應用商店或者其他渠道下載升級

    3)強制升級,然而其本質都是:覆蓋安裝。

    具體則是將最新的APP下載到手機的內存上,然后安裝覆蓋掉舊版本的APP。而這些測試的主要測試點則集中在:

    1)正常版本升級

    2)跨主版本/次版本升級

    3)強制升級

    UI測試

    UI是APP呈現給用戶最直觀的方面,因此這里的檢查是最需要耐心和細致的,因為非常容易因為視覺疲勞而產生漏檢。

    檢查UI圖片、icon、文字、布局等UI元素與效果圖是否一致,以及在不同分辨率和橫豎屏顯示狀態下,是否存在變形、錯行、字符丟失等問題。

    一般UI方面不會存在特別嚴重的問題,這反而是非常容易被忽略的原因。

    功能測試

    功能測試是對APP的最主要的測試,每項新開發/升級/改動的功能都需要進行測試。

    測試時,測試工程師把APP當作“黑盒”一樣進行手動測試,看看提供的功能是否正確并如設計的一樣正常運作。而事實上,功能測試也往往就是以黑盒測試為基礎的。這里需要注意的是,在功能測試過程中,只要是和需求說明不一致的地方,都是缺陷,而不是只要能正常操作就是通過測試的。

    測試工程師除了手動測試之外,后期的自動化測試維護也是需要的。

    除了經典軟件測試,像點擊按鈕、提交訂單等等,也是需要進行覆蓋測試的。有關功能測試的內容和驗證點,需要和BA對需求進行細節的確認。

    測試中非常常見的回歸測試,也往往針對功能測試,所以功能測試是整個APP測試中的重中之重。在敏捷測試中,往往也將測試內容分為功能測試和非功能測試兩大類,由此可見功能測試的地位。

    性能測試

    APP應用是否優秀,不僅僅體現在功能性上,也包括性能。如果性能表現不夠穩定,則會在影響部分用戶的使用體驗。

    APP架構相關,這里的性能包括客戶端和服務端兩大部分,客戶端性能是關注APP在不同類型設備不同類型平臺上的性能表現。服務端性能測試其實和一般的服務端性能測試項目并無二致,都是為了考察項目或接口服務在大量用戶并發訪問下的服務端表現。

    性能測試基本上普遍的測試點包含:CPU/內存占用、界面切換流暢度、流量/電量消耗、啟動時間等。

    應用的流量消耗是用戶的一個重要關注點,一是節省用戶的使用成本,二是流量優化能帶來響應速度的優化,三是能清楚的知道每個場景需消耗的流量,確認是否有能優化的空間??蛻舳肆髁繙y試的測試點主要有以下幾點:

    1)首次啟動到全部加載完成耗流(冷啟動)

    2)非首次啟動到全部加載完成耗流(熱啟動)

    3)后臺運行耗流

    4)運行某個場景消耗的總流量

    有關服務器端的性能測試,則一般依賴JMeter或LoadRunner等。

    安全測試

    APP項目上線前,一般也會針對項目內容的不同,不同程度地展開反編譯性、數據安全、鍵盤安全、通信保密性及安全策略等方面的驗證。

    對于APP項目的安全測試,如果沒有特別的安全團隊,可以通過現有各大廠商提供的安全檢測平臺或者工具進行基礎或較高階位的安全測試。

    對于一般APP則主要是通過利用一些安全輔助平臺對被測應用進行測試,主要用到兩個安全輔助平臺:騰訊哈勃分析系統 和 VirusTotal(可疑文件分析服務的網站)以及drozer(安全測試工具)。

    1)將APP在 https://www.virustotal.com/ 掃描,獲取報告;

    2)將APP在 https://habo.qq.com/ 掃描,獲取報告。

    安全測試是一個和其他測試內容相對獨立的領域,一般而言,安全測試團隊會獨立于其他測試團隊進行設置,所以作為安全測試人員,可以在這一點做更深入和細致的了解。

    兼容測試

    兼容性測試主要是對APP在各種平臺各類機型上的兼容、適配等情況進行測試,所有最終是交付給用戶的APP,每次迭代,就會有若干版本在用戶中流轉,如果沒有強制在線升級,那么就會出現多個版本并存的局面。

    按照軟件開發原則,新版本的開發不應該影響到舊有版本,尤其是出現新版本改動比較大,或者重構應用的時候,對老版本進行回歸測試也是必不可少的測試點。

    當然并不是要測試到每個點,修改的部分需著重測試,可以和開發溝通了解可能影響的點,有針對性地測試,也可以采用冒煙測試,所以兼容性測試也是一個很重要的測試項。

    兼容性測試常見的是:設備型號, 移動端設備的系統版本、移動端APP的新舊版本、屏幕尺寸、屏幕分辨率、網絡類型及軟硬件兼容性等。

    針對個人開發者、初創公司,以及App比較單一的公司,沒有足夠多的測試機,是可以使用兼容性云測服務的。目前很多的公司,已經提供了兼容性云測服務,例如TestIn、TestBird。除此,大型公司也對外推出自己的測試工具,比如谷歌、騰訊WeTest、百度MTC、阿里MQC等等。

    用戶體驗測試

    用戶體驗測試是一個較為主觀的測試內容,從用戶使用角度出發,感知產品或服務的易用性,人機交互和人體工程學方面的測試。大致可以分為界面設計、功能易用、橫豎屏切換、系統功能響應等。細節方面甚至包括提示信息展示樣式、操作動線軌跡等等的測試。

    接口測試

    這是一個比較深度的測試內容,往往是在測試初始階段就要介入的,因為APP的數據交換成功與否,和接口能否實現正確調用息息相關。接口測試的主要內容是測試模塊或子系統組裝后,功能以及模塊間接口的調用是否正確,將模塊組裝起來,對與設計相關的APP體系結構的構造進行測試。在這里主要使用的工具是Postman和JMeter。

    數據庫測試

    數據庫測試其實主要是基于接口測試的結果,當接口測試成功通過之后,對數據庫進行數據查驗及確認,這里需要使用數據庫工具,具體則是在前端進行針對數據的增刪查改操作之后,到后端數據庫進行驗證。

    需要額外注意的是,如果是直接對數據庫進行操作測試,是存在將不符合業務邏輯的數據引入數據庫的可能,這會帶來不可知的風險。所以數據庫測試,尤其是增刪改這樣的操作,嚴禁隨意在生產/正式環境中進行。

    穩定性測試

    作為一款高使用度的APP,率先考慮的非功能性指標是穩定性。

    對于APP來說,如果是關注在線活躍度和用戶活躍時間的,那么穩定度也是一個非常需要關注的點。這個測試點的指標和認知是與產品定位高度相關的,作為測試工程師來說,這一點必須注意。

    穩定性測試是指對應用進行長時間的操作,檢測功能是否穩定。一般穩定性測試時間是 N*12小時。項目中穩定測試多采用Monkey,進行隨機測試。

    總結

    以上羅列出了APP的重要重點測試方法,一個版本的迭代到上線,最終要輸出測試通過的報告,才會sign off正式上線。測試報告中應包含了項目團隊這本次版本的所有內容。而測試工程師也恰恰會通過這個報告來對自己的測試內容進行查漏補缺。

    APP測試過程當中,除了本文提到的諸多測試內容之外,類似功耗測試、內存+CPU測試和內存泄漏測試等,也都是需要重點關注的。

    一個成熟的、推向市場的APP,必須經過各個方面的錘煉和檢驗,才能獲得用戶的認可,而這個認可的背后,就是測試工程師對于APP測試的把握。

     





    出去打工和儿子租房