Android CTS - 讓 Report 說話
接著來談談當初在負責 CTS 時遇到的最大困難,以及最後解決的方法。
什麼是 CTS?
Android 雖然是 Open Source Project,即任何的廠商都可以自行生產手機,但 如果想在出廠時內建 Google Play 等 Google 所提供的 APP,就必須與 Google 簽合約,即每一款生產的手機都需要通過 CTS 測試。
CTS 測試包含上萬筆測項,能否順利通過將影響手機是否能正式出貨,因此對各系 統廠而言,這都會是一個相當重要的任務。通過 CTS 的方式,是由廠商自行執行 Google 提供的 CTS 程式,並產生一份通過所有測試的 Report,Google 審核無誤 後,這樣就算大功告成了。
然而,即使是同一款手機,每一次執行 CTS 都不見得能得到完全相同的結果。這 部份有可能是手機本身的軟、硬體不穩定,也有可能是來自於 CTS 的 bug。
困難點
由於每次執行 CTS 得到的結果都不同,而只要成功產生一次全部通過的 Report 就可以提交,那麼是不是可以準備很多台電腦、很多台手機,每天二十四小時的跑 ,只要任何一次 ALL PASS 就好?
是的,這樣確實沒有問題。於是公司安排了一部分的測試人力負責運行 CTS,早期 是一天產出一份,後來不知道怎麼搞的,變成兩組人馬在做,有時候一天會產生近 十份報表。
如果是問題已經被解決的差不多的階段,這樣做確實很合理;但如果有些測試尚未 被解決,百分百會失敗,這樣做就不是很有意義了。而每一份報告送來給我時,通 常還會附上測試者自己的觀察,例如:「某個測試最近失敗的機率好像變高了」、 「同個型號的 A 手機一直失敗、但 B 手機就沒問題」、「晚上再開始跑好像比較 容易成功」。這些猜測有時正確、有時錯誤,然而因為 Report 實在太多,我也實 在沒辦法從中學到什麼。於是這些數不清的 Report,消耗了大量的人力與資源 ,卻什麼忙也沒幫上。
突破口
其實不難發覺,關鍵就在這些 Report 上。大部分需要的資訊,這些 Report 上都 有,只是太多了、太零散了,沒有辦法馬上調出我需要的資訊,例如:「X 測項最 近一週的失敗率是否比上週高」、「A 測試者跑 Y 測項時是否比較容易失敗」?
而解決的方法也就更簡單了,我花了三天時間寫了一個網頁,提供一個界面讓測試 者上傳 Report。程式收到 Report 後,就會擷取所有重要資訊,包含手機名稱與 識別碼、測試者的名字、執行時間和所有發生失敗的測試,並將這些資料統統丟進 資料庫。
突然之間,所有的問題都獲得了解答。我們利用這個方式發現各家電信業者在執行 傳簡訊相關的測試的成功率,從此規定以後都用成功率最高的業者的 SIM 卡 ;也發現了某測試者因為操作不正確,所以他所負責的報告經常會有額外的狀況。
所以,重點是?
其實重點就是,我要把這支程式的關鍵部份放出來。gist 連接在此。
至於為什麼不放整個網站出來?單純只是因為我的前端寫太爛,不好意思放出來讓 大家見笑。事實上,這個網站其實非常的簡單,甚至我放出的部份也沒有任何難度 ,只是單純的 parsing XML 並存進資料庫而已,真要說有難度的地方,也只是 parsing 時比較費工而已。所以我放出 parsing 的部份,希望有需要的人可以在 略做修改的情況下就能夠使用,如果在使用上有遭遇什麼困難,也歡迎與我聯繫。