2016中國(南京)軟件開發者大會(以下簡稱 NJSD CHINA 2016)于 2016 年4月16日在南京軟件谷楚翹城召開。NJSD-CHINA大會由民間技術社區志愿者發起并組織,遵循“技術為先”的理念,探討全球最新軟件技術,努力打造技術交流、思想碰撞的中國公益性技術盛會。其中『無線測試技術』專題論壇由Testerhome主要創始人之一陳曄(Monkey)組織和主持,為我們帶來了一場無線測試技術的干貨分享盛宴。
會議主要由五個議題組成:
- 滬江無線持續集成的解決方案(主講人:滬江教育科技資深測試工程師黃偉東)
- 無線應用兼容性全套方案(主講人:Testin眾測測試總監李毅)
- iOS 自動化測試框架選型(主講人:阿里巴巴高級測試工程師陳恒捷)
- 安全專項測試(主講人:58趕集高級測試開發工程師錢輝)
- 云化環境中可靠性測試的自動化技術分享(主講人:華為技術規劃工程師王朝金)
由于第五個議題不屬于無線測試的范疇,這里我將為大家介紹前面四個議題的核心內容。
黃偉東:滬江無線持續集成的解決方案
滬江無線有多款無線應用,面臨很多質量問題,比如線上奔潰率高,開發提測質量差,測試回歸耗費時間長等問題。為了提高測試質量和測試效率,大東所在團隊搭建了一套持續集成的質量保障體系。本次大東老師為我們介紹這套體系包括哪些解決方案以及落地實施的情況。
什么是持續集成?
持續集成是指通過自動化等手段高頻率地去獲取產品反饋并響應反饋的過程
集成什么?
- 編譯,自動化拉取代碼編譯
- 單元測試,滬江的單元測試全部由開發來完成
- 打包,同時提供Debug包和Release包
- 自動化測試作為冒煙和回歸測試
持續集成可以發現哪些問題
- 編譯問題,比如代碼無法編譯成功,提醒開發及時修復
- 安裝問題,打出來的包無法安裝,應該直接打回
- App頁面可達性,關鍵業務都無法跑通,也應該直接打回
- 專項指標,包括性能,穩定性等
持續集成流程
- 自動構建
- Apk掃描
- 自動化測試
- 專項掃描
- 報告聚合及產品交付
持續集成的實現方案
編譯打包
- Android采用Gradle方式編譯,通過Maven進行包依賴管理,同時產出Debug-apk和Release-apk
- iOS采用Xcode編譯,用Cocoapods進行包依賴管理,同時產出Debug-ipa和Release-ipa、Debug-app
Apk掃描
- 靜態掃描:反編譯、字符串掃描
- 包大小檢查:包大小信息、歷史包大小對比、與其他產品包大小對比
自動化測試(選取Appium)
自動化框架的特性:
- 兼容多類App(Android,iOS,H5)
- 兼容多類設備
- 支持并發測試
自動化測試流程:
專項指標測試
測試哪些專項指標:
- Apk包大小檢測
- 啟動時間
- 穩定性測試
- 產品對比
- 性能測試:通過AOP埋點的方式實現程序內部性能數據的收集,并隨BI數據一起上報,平臺根據數據進行性能分析
李毅:無線應用兼容性全套方案
我們的測試人員在線下已經盡可能去覆蓋所有功能點,但上線之后還是經常會遇到一些令人頭疼的問題,比如迭代速度緩慢,線上故障嚴重,測試資源不足,用戶投訴頻繁。這些問題其實歸根到底都是兼容性的問題,兼容性問題主要體現在手機種類多樣化和用戶場景多樣化兩大方面。
傳統的兼容性測試是獨立的個體,我們的測試人員只是憑靠個人的力量去覆蓋一些網絡、終端、地域、軟件、數據、體驗等類型的兼容性。這當然是有局限性的,應用上線后也無法滿足所有用戶的需求。因此,現階段我們提出了實施全面兼容的方案。主要從兩大方面去實現:主動式覆蓋和被動式覆蓋。主動式兼容性測試的手段包括灰度發布和眾測等,被動式兼容性測試的手段包括應用埋點,APM等。
主動式測試
我們先介紹下主動式測試的實現方案,分為三部曲:測試籌劃,測試執行和測試分析。這主動式測試三部曲的實施步驟是怎樣的呢?
其中測試籌劃的主要步驟是:
- 規劃被測試場景,比如要覆蓋哪些網絡,覆蓋哪些地點,針對哪些功能
- 確認測試策略,確定好是要進行用戶體驗測試呢,還是進行終端兼容性測試,甚至是給產品找茬
- 開啟人群劃分,要確定好測試人數要求,測試人群的類型
接下來測試執行的主要步驟是:
- 測試任務發布,比如確定好任務時間周期,系統要求和任務描述
- 測試結果收集,一般是通過問題報告,日志數據,截圖或者視頻的方式收集
- 測試任務把控,這個環節比較靈活,可以是通過問題溝通或者進度匯報的方式來把控。
最后是測試分析:
測試分析是基于測試執行收集的測試結果,主要分析的類型有:硬件性能,頁面,瀏覽器,應用服務器,網絡等。
被動式測試
那么被動式測試的實現方案又是怎樣的呢,也可以分為三部曲:網絡監控,性能分析,奔潰&異常。
首先我們介紹下被動式網絡監測,主要監測的數據有:響應時間,HTTP錯誤率,RPM,數據量,運營商,機型,URL等,從而跟蹤HTTP連接,發現第三方SDK和API,跟蹤網絡響應趨勢。
然后我們看下性能分析要關注哪些點,主要是I/O,網絡響應時間,Webview,CPU,內存等,通過這些數據來跟蹤真實用戶性能體驗,精確分析性能瓶頸,追蹤慢交互。
最后是奔潰&異常,Android奔潰可以通過UncaughtExceptionHandler來捕獲,要注意的是,Android的奔潰日志只能被捕獲一次,如果你的應用中有多個收集線程,可能只有一個會生效。iOS也有類似的捕獲機制,NSSetUncaughtExceptionHandler這個類可以實現奔潰日志的捕獲。
具體實施方案
- 自研兼容性測試平臺
- 引入第三方服務
- 內部&外部灰度測試
陳恒捷:iOS 自動化測試框架選型
自動化一直被認為是測試人員的一項基本素質,但真正要做好自動化測試并不是一件簡單的事情。恒捷先講述了自動化測試的目的,然后對iOS常用測試框架進行了對比分析,最后結合實例講述如何進行選型。
自動化測試的目的
我們引入自動化測試的目的當然是為了降低成本,但自動化測試本身也是有成本的:用例編寫成本,用例維護成本,腳本調試成本,查錯成本。如果自動化測試的成本要大于不引入自動化測試的成本,那么我們完全沒必要去做自動化測試。因此,我們做自動化測試的第一步是要科學降低成本。通過經典的測試金字塔,我們可以看到理想的測試分為三個階段,從下到上分別是:單元測試,模塊級測試,UI測試。我們可以根據具體的測試點來選擇最佳的測試方式。比如對于適合最單元測試的場景,我們就需要選擇一個單元測試框架來做自動化。
iOS有哪些自動化測試框架
- UIAutomation,最早點,蘋果官方推出的針對UI的自動化測試工具,相關框架有Tuneup和Appium
- XCTest/XCUITest,蘋果在Xcode5加入的單元測試框架,XCUITest是Xcode7推出的基于XCTest的UI自動化測試框架,其他相關框架有基于私有API的KIF,Google最近推出的EarlGrey
- 注入編譯型,通過在應用中插碼控制應用操作。添加到應用功能的部分多以agent形式存在。相關框架有calabash-ios和Frank
- 另類方法,比如坐標系+圖像識別的方式,相關框架有TouchElf(觸摸精靈),不過該框架需要越獄
各測試階段適合哪些框架
- 單元測試:XCTest
- 客戶端功能測試:KIF,XCUITest,Earlgrey
- 冒煙測試:Appium和Calabash-ios
- 回歸測試:同上
錢輝:安全專項測試
安全測試是測試過程中的一個重要環節,隨著移動互聯網的發展,移動端安全問題也越來越多地暴露出來,尤其是對于Android這樣一個開源系統而言,安全問題更加容易出現。因此,我需要有特定的測試手段來提前發現應用中的安全風險,并采取措施規避。錢輝的講座主要介紹了四個方面的內容:App有哪些安全漏洞,如何檢測安全漏洞,漏洞有什么危害,如何修復這些漏洞。
App有哪些安全漏洞
- 反編譯,一般的攻擊方式是使用apktool工具來反編譯出源碼文件,篡改后重新打包,偽裝Apk。因此一般的檢測點有:是否可以被反編譯,二次打包,重新安裝。
- 權限掃描,主要是掃描出所有的權限的使用情況,然后定位出使用權限的代碼
- 應用組件掃描,檢測點有:Activity安全,Service安全,Broadcast Receiver安全,Content Provider安全,Intent安全等
- 本地數據存儲,檢測點有:本地數據敏感信息,本地數據防篡改。
- Logcat日志風險控制,主要檢測調試信息和敏感信息
- Xposed獲取用戶信息,是否存在Xposed組件獲取用戶名和密碼的風險
- 配置信息風險,主要有兩個:allowBackup和debuggable
檢測方式
- 開放平臺檢測
- 安全團隊人工審計
安全團隊要做的事情:一個測試點的確定要經過反復的論證,實踐,要不斷的學習了解新興的漏洞,及時補充你的測試點。