iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 24
0
Mobile Development

從0開始,全方面自動化測試Android App系列 第 24

[Day 24] End to End Test 介紹

End to End Test中文可以翻成端點對端點測試,使用者端對設備端的測試,屬於Intrumentation Test的一種。那它跟之前介紹的Integration Test整合測試有什麼不同?end to end test是模擬使用者操作Application行為。所使用的環境要跟真人使用者一樣,也就是連線到backend server不能用Mock data來取代,如果你在測試過程中使用mock data那就會被歸類為整合測試而非端點測試。

那聽起來好像end to end test比較好,因為end to end test用真實的資料,測試的結果應該會跟我們自己用人工點擊的測試方式類似,這個結論是肯定的,用真實資料去測試當然結果是可以吻合真實使用情況。但有好處必然也有壞處,壞處其實也不少,我把end to end的測試分析如下

  • 優點
    • 如果有用local或remote storage,測試會與實際使用狀況一致(例如login user)。
    • 不只有測試程式內部的邏輯,remote server當下有問題也會被測出(例如api失效)。
    • Regression test時如同QA做的重複性測試。
  • 缺點
    • 因為要模擬真實流程所以相當耗時,每個Test都必需從landing page開始執行,意即有login行為的話,你有100個test cases就要從頭login 100次。
    • 當測試發現問題時很難trace log,因為不知道是Local出問題還是Server出問題,程式只會跟你說哪行有問題,必須自己測試一次才容易找到問題。
    • 所有Storage data都必須小心reset,因為每次的測試用的data都會一樣,我們不會每測試一次就改一次測試程式引用的變數,如果沒處理storage由其是server data下次再測試可能因為已經有重複的data無法新增而讓測試失敗。

講完缺點後,大家會不會又覺得好像end to end test又沒那麼好,說實話不論現實世界或是程式世界都沒有完美的solution,都必須依當下的目的選擇較好的solution。我們把Integration Test跟End to End Test做一個示意流程,假設我們要測試一個UI操作的test case在Page C,前面還有Login Page,Page A跟Page C,每個Page各自都有Api要呼叫,兩者差別如下。

https://ithelp.ithome.com.tw/upload/images/20191008/2012097514fbyDljCp.png
利用Integration Test的方式我們可以直接把跟Page C有關的前置資料mock起來直接測試Page C,而利用End to End Test的方式就要從頭到尾測試,包含remote serverc連線時間以及reset data流程(例如:刪除新增的user data)。

結論

我們可以把各自適合使用的情況歸納如下:

  • Integration Test
    • 快速驗證UI模組的正確性,例如Pull Reqeust時驗證code的相關內容。
  • End to End Test
    • 秏費時間大規模測試使用者行為,例如public release前把關的regression Test。

那End to End Test該用什麼套件來開發?我們可以直接使用Espresso或是更方便的Appium,下一個章節將會繼續說明。


上一篇
[Day 23] Android Integration Test in Jenkins
下一篇
[Day 25] Mobile測試架構 Appium 介紹
系列文
從0開始,全方面自動化測試Android App30

尚未有邦友留言

立即登入留言