天天看點

測試金字塔新解之移動無線應用測試

  首先我們先來看下經典金字塔,如下圖所示:

測試金字塔新解之移動無線應用測試

  這對于傳統網際網路的測試而言非常清晰的一個層次結構,但我相信對于很多移動網際網路的同學們而言也許就多少有些迷茫,這不單單是因為技術上的實作不同于以前,也有些是名詞定義問題。經過我思考之後,發現發現移動網際網路的應用測試角度出發可以從該圖上拆分出很多的東西,并且圖還有些小小的變化,如下圖所示:

測試金字塔新解之移動無線應用測試

  單從這個圖上來看的話的确是比較迷惑的,那麼我們接下來就一層一層來剝,以下内容很黃很暴力,大家做好準備了嗎?

  我們先來說第一層:ui層。ui層顧名思義就是使用者看到産品時候所長的樣子,從技術實作角度而言,那就是産品的一層皮。那麼ui層在移動無線應用的測試中分成哪些主要的部分呢?

  1.使用者體驗

  2.控件顯示

  3.功能互動

  4.代碼接口

  5.使用者體驗

  移動網際網路應用是一款産品,相對其他類型的産品而言,其使用者體驗已經到達了舉足輕重的地步,在我的新書《大話測試——移動網際網路應用測試指南》中有單獨闡述使用者體驗的一個章節,有興趣的朋友可以等出版之後仔細閱讀。

  現在各個公司也出現了大量的和使用者體驗相關的崗位,比如“産品體驗師”、“産品設計師”、“互動設計師”等,也越來越說明着使用者體驗對于移動無線應用的重要性。

測試金字塔新解之移動無線應用測試

<a href="http://www.51testing.com/batch.download.php?aid=45168" target="_blank"></a>

測試金字塔新解之移動無線應用測試

  碩大的logo,這個是什麼場景呢?現在支付寶和“喜士多”、“7-11”等多家便利店合作了,不但友善了大家的購物,同時也減少了零錢和假币的流通,的确是個大好事。便利店網絡不好的情況也尤其多,當我選擇好了很多商品,最後拿出支付寶,看到這個鳥樣,我心裡真的千萬隻草泥馬奔過。但此時想想沒有關系阿,我作為ios高大上的使用者可以殺程序,于是我熟練的殺掉支付寶的程序再次打開,事實證明我無法改變這個鳥樣。我真的很焦慮,我知道支付寶要聯網,但它不是一個網遊吧,為什麼沒有網你就不能讓我打開呢?我真的覺得讓我看到一個進入的界面或者設定一個短時間就逾時都比我看着一坨黑色上面有個“菊花”強數百倍吧,于是,我的手機真的被我摔壞了。

  控件顯示 現在往往很多測試說測ui了就是拿過來看看界面顯示對不對,所謂ui automation也就是模拟使用者的操作,但是真的僅僅隻是如此嗎?android的應用界面一切都是以view來構成:

測試金字塔新解之移動無線應用測試

  請問有多少工程師關心過這些所謂的界面上的控件顯示的到底對不對呢?像素值和比例與需求一緻嗎?我們一般可以通過三步來解決這個的問題。

  a. 先驗證每個界面顯示之後控件是否存在

  b. 再驗證這些控件具體的位置、大是否正确

  c. 最後驗證整體顯示是否正确

  其中b可以使用如下所示的這個類來驗證:

測試金字塔新解之移動無線應用測試

  而c的話我更偏向于自己去寫,而不是用monkeyrunner自帶的圖檔對比方法,其精準度不高,很難判斷圖檔是否真的有細小的差異性,我自己更偏愛用pil庫。ios的話xcode也自帶了inspector可做相關驗證。

  功能互動

  手動測試,自動化的話可用架構太多。robotium,instrumentation,appium,這裡不多做解釋。

  代碼接口

  某些應用往往邏輯很複雜,但界面卻很簡單明了。其複雜程度展現在它的邏輯和資料場景。這類情況對于測試工程師而言尤其的痛苦,那麼自然我們就可以跳過界面層來做功能代碼的接口測試。

測試金字塔新解之移動無線應用測試

<a href="http://www.51testing.com/batch.download.php?aid=45172" target="_blank"></a>

測試金字塔新解之移動無線應用測試

  這裡提到inner service這個概念就是為了和伺服器端的service差別開來。在這個金字塔中service被虛線所區分開,原因有兩個:

  service不再單純的指背景伺服器的service

  不是所有應用都有inner service或者service

  其中背景的服務service測試方法已經相對成熟,參考的資料也相對多,而inner service的測試相比困難很多,除了監聽service是否正确啟動以及回報之外,還有很多測試細節可挖掘。

  最後就是共同的unit了。其實我們撥開金字塔的上面幾層,到unit test的時候就已經和應用所在的平台的特性關系不大了。android使用junit test,ios使用xcode自帶的ocunit,wp使用windows phone toolkit test framework等。除了編寫測試用例的語言不同以外,其用例的設計方法等已經不再去考慮android、ios、wp等系統架構或其他特性上的差別了。

  我個人是認為移動無線應用的金字塔理念不僅僅适用于功能測試,更多的也适用于壓力、性能、自動化甚至安全等測試中。當我們需要加大測試顆粒度的時候,那麼借助分層的理念往往能夠讓我們豁然開朗,找到新的突破口。

最新内容請見作者的github頁:http://qaseven.github.io/

繼續閱讀