客戶端SDK測試思路

本文來自網易云社區

作者:萬春艷

是什么

客戶端SDK是為第三方開發者提供的軟件開發工具包,包括SDK接口、開發文檔和Demo示例等。SDK和應用之間是什么關系呢?以云信即時消息服務為例,如下圖所示,應用客戶端通過調用云信SDK接口,進行消息等數據查詢存儲等操作,或通過協議與云信服務器間進行通信。

201808311230527f09b10e-3cd6-4bd8-91de-d8d070c9a7c8.png

測什么

1. 客戶端SDK測試的對象

客戶端SDK測試,就是對提供給開發者的工具包里面的內容進行測試,因此測試的主要內容有:

  • SDK接口和文檔
    SDK接口是測試的主要對象,也是核心的內容。

  • SDK日志
    對開發者來說,SDK接口里面的具體實現是透明的,當上層調用時遇到問題,只能依賴SDK打印的日志來定位分析。所以SDK日志是否完備,是否有助于解決問題,對應用開發者和SDK提供方來說都很重要。

  • Demo或行業解決方案
    Demo是SDK提供方用來示例如何調用接口實現具體的功能,也可以作為開發者直觀感受SDK接入效果。行業解決方案類似Demo,但是,比Demo更加像一個產品,具有比較完整和典型的行業應用場景。可以讓行業開發者比較明確知道,接入這個SDK做出來的產品效果如何。

  • 其他周邊
    比如UIkit等,可能只是在SDK開發中的附帶輸出,但對有的開發者來說能極大降低接入成本。

2. 客戶端SDK接口測試類型

客戶端SDK根據需求和開發平臺不同,可能需要選擇不同的測試類型對SDK接口進行測試,常見的測試類型有:

  • 功能測試
    保證SDK接口功能正確性和完備性。客戶端SDK接口測試跟服務端接口測試類似,包括場景覆蓋和接口參數覆蓋。主要測試各種參數組合下的返回值,考慮數據是否緩存與存儲,是否有回調,對于請求成功或失敗都能按預期進行處理。

  • 性能測試
    保證SDK接口滿足特定的性能需求,比如資源占用、移動設備耗電量等。在云信IM登錄的場景,登錄時可能收到大量同步數據包和離線消息包,那么對這些數據包的解析以及本地儲存的性能就要進行保證,否則可能出現登錄響應很慢甚至卡住的問題,所以測試時就需要考慮這個場景的性能。

  • 兼容性測試
    保證SDK兼容特定的設備平臺,并與其他軟件兼容。兼容設備平臺的工作量通常是比較大的,先根據產品需求和市場現狀對需要適配的設備平臺做分析,再根據需要覆蓋的機型、系統版本、分辨率等進行優先覆蓋排序。移動端SDK兼容性測試需要考慮下對模擬器的支持,因為很多開發者可能就是先在模擬器上開發。客戶端SDK覆蓋多平臺設備的,還要考慮多端消息數據包的互通。

  • 穩定性測試
    考察業務場景在一定壓力下,持續運行一段時間,接口功能和設備資源占用有無異常。比如云信實時音視頻通話場景中,要保證多人長時間通話且不斷有人進出時的接口功能和設備資源占用無異常。

  • 網絡相關測試
    保證在不同網絡類型,不同網絡環境下,SDK接口都能較好的處理。在涉及到多媒體資源或音視頻通信,弱網下測試的需求較多,并且弱網下的處理通常需要反復優化和對比,不僅是新老版本效果對比,還包括競品的效果對比測試。

  • 安全性測試 對隱私數據保護,訪問權限的控制,用戶服務鑒權等,SDK接口的安全性問題也是比較突出。安全性很多是在架構設計和開發設計中就考慮進去,但是最好還是有專門的安全性測試。

功能怎么測

上述諸多測試類型中,功能測試先行。在進行客戶端SDK測試前,需要全面的了解測試對象的細節:

  • 了解業務流程,結合API接口文檔和開發指南,理順接口的使用場景和調用關系;

  • 了解SDK協議,理解協議中字段的意義以及服務器端的處理邏輯;

  • 了解各接口或協議返回碼,分析對應的場景;

  • 了解開發實現細節,可以繪制成圖,便于測試分析和分層驗證。

對客戶端SDK進行測試,可以采用的分層測試方式由上至下依次有:基于Demo和解決方案->基于接口調用->基于代碼。

基于Demo和解決方案的測試

大多客戶端SDK在提測時,都會有對應的Demo或者解決方案提交給測試,因此可以覆蓋到該Demo或解決方案對應的接口或業務場景。而且測試人員可以比較直觀的看到界面表現,上手快,所以在客戶端SDK測試中比較常用,也是比較有效的。
但這種測試方式的缺點也很多,Demo對接口和業務場景覆蓋比較有限,對接口的輸入輸出參數不能全覆蓋,發現問題時定位復雜度增加。精心設計的Demo以及多解決方案的形式或許可以最大程度滿足測試需要,但是需要較大的Demo開發測試投入,也使得問題暴露的時間大大滯后。 基于Demo和解決方案的測試,可以是手工的也可以是UI層自動化測試。

基于接口調用的自動化測試

基于接口調用的測試,包括對單個接口的測試,也包括業務場景的覆蓋。這種測試方式直接有效,需要一定開發基礎,可以參考下KS上之前其他同學關于AOS和iOS SDK接口自動化測試實踐的經驗總結。目前,我所在項目組的同事也有一些實踐,以云信iOS SDK測試為例,最小回歸測試對應接口也已經自動化,測試工程基本結構如下:

20180831123115eb23da9b-a425-4da2-a1f8-74d1cd6fc37e.png

基于接口調用的自動化測試,需要有有產品的思路、開發的知識和測試的思維,做起來有難度。但是因為SDK接口通常比較穩定,所以一旦實現并投入使用,測試效率和質量的收益都很大,值得擁有。

基于代碼的單元測試

單元測試是為開發代碼質量保駕護航的一個重要環節,在測試左移推進的道路上,大家越來越意識到單元測試的重要價值。特別是在一些核心業務上,值得開發同學投入精力去做。

其他測試類型的展開,跟應用層測試類似,杭研QA白皮書介紹的方法、工具基本能滿足測試需求,就不再重復了。


網易云大禮包:https://www.163yun.com/gift

本文來自網易云社區,經作者萬春艷授權發布。


相關文章:
【推薦】?網易蜂巢(現已更名為網易云計算基礎服務)用了什么技術?
【推薦】?大數據技術在金融行業的應用前景
【推薦】?微服務化不同階段 Kubernetes 的不同玩法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537950.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx could not build the server_names_hash 解決方法

原文地址:http://www.jb51.net/article/26412.htm ------------------------------------------------------- nginx “nginx could not build the server_names_hash”解決方法 給一個服務器下增加了一些站點別名,差不多有20多個。 重啟nginx時候&#…

java 使用fusioncharts_fusioncharts同一頁面顯示2個儀表盤,且以java字符串作為xml數據...

fusioncharts同一頁面顯示2個儀表盤,且以java字符串作為xml數據String path request.getContextPath();%>String xml "";%>FusionCharts - Multiple Charts on one Pagevar contextpath "";var xml ;body {font-family: Arial, Helve…

排名前16的Java工具類

原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源于Github上隨機選取的5萬個開源項目源碼…

VS2012(Visual Studio 2012)官方免費中文旗艦版下載(含激活密鑰)

原文路徑:http://www.nocang.com/visual-studio-ultimate-2012/ vs2012旗艦版安裝激活教程 1、下載到的是ISO格式文件,直接解壓縮或用虛擬光驅加載運行;2、無所不藏推薦直接解壓縮安裝即可,雙擊“vs_ultimate.exe”進行安裝&#…

magic square java_測試Magic Square Java的.txt文件

我不想問,但我無法弄清楚這個任務,當我尋求幫助時,助教也不會。我必須從文本文件中獲取輸入,將文件中的整數輸入到數組列表中,然后測試它是否是anxn幻方。n等于數組列表長度的平方根。如果不是理想的正方形&#xff0c…

字符串拼串 能緩解我們的開發難度→!←(ε=(′ο`*)))唉,又是一個不知道該怎么寫題目的隨筆啊,頭疼)...

簡單描述:今天看我同事提交的代碼,發現一個東西,讓我有了一點小想法,是這樣的,他利用一個‘’無關緊要‘’的標簽屬性,(哈哈哈,也不能說人家是無關緊要的屬性了,暫時是無關緊要的屬性…

SQL中使用DISTINCT顯示多個字段的方法(不使用DISTINCT了)

原文連接: https://www.cnblogs.com/alanliu/archive/2008/02/25/1080626.html --------------------------------- 效果是DISTINCT CUS_NO,并且同時顯示CUS_NAME.SELECTCUS_NO,MIN(CUS_NAME) ASCUS1 FROMdbo.CUS GROUPBYCUS_NO

java 注釋快捷打出時間_Java快捷---自動注釋時間作者。。。

在使用Eclipse 編寫Java代碼時,自動生成的注釋信息都是按照預先設置好的格式生成的。修改作者、日期注釋格式:打開Windows->Preferences->Java->Code Style->Code Templates,點擊右邊窗口中的Comments,可以看到有很多…

016 pickle

英文也是泡菜的意思。 學完了,還是感覺這個模塊是蠻不錯的,對多數據保存到文件中,然后在使用的時候,再讀取出來,讓程序閑的更加優雅,簡潔。 一:介紹 1.為什么使用 在開篇已經介紹了,…

centos7與centos6區別

原文連接:https://www.cnblogs.com/bethal/p/5945026.html ---------------------------------------------------------------- CentOS 7 vs CentOS 6的不同 (1)桌面系統[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(GNOME Shell)(2)文件系統[…

用java編寫日歷添加窗口一角_Java 實訓4 編寫一個窗體程序顯示日歷

實訓要求:1.使用BorderLayout 進行總體布局2.在North 位置放置包含兩個按鈕( 上月和下月)的Panel3.在South 位置放置一個Label 用于顯示當前年份和月份4.在Center 位置放置一個顯示日歷的Panel5.顯示日歷的Panel 設置7 行7 列的GridLayout 布局,其中第1行…

ER圖轉換成關系模式集的規則

轉自己博客園文章 A與B1:1 在A表里把B表的主鍵和關系的屬性加入到A表中 或B表里把A表的主鍵和關系的屬性加入到B表中 舉例 男人表身份證號姓名年齡女人身份證號登記日期女人表身份證號姓名年齡 A與B1:N 在A表中加入B表的主鍵與關系的屬性 小米公司納稅號公司全稱…

Grafana文檔(在Centos / Redhat上安裝)

在基于RPM的Linux上安裝(CentOS,Fedora,OpenSuse,RedHat) 描述下載CentOS / Fedora / OpenSuse / Redhat Linux穩定版本x86-64CentOS / Fedora / OpenSuse / Redhat Linux穩定版本ARM64CentOS / Fedora / OpenSuse / R…

python3數字類型分為_Python初學3——數字類型及操作

一、數1.1 整數類型( 十、二、八、十六進制 )python中整數類型與數學中的整數概念一致,有正有負,取值任意。整數的表示形式:整數類型表示形式舉例十進制34,163,210二進制0b1101 或 0B1101八進制0o357 或 0O357十六進制0x45ac 或 0X45ac1.2 浮…

idea 2018.1 創建springboot開啟找回Run Dashboard

原文連接&#xff1a;https://www.cnblogs.com/yangtianle/p/8818255.html ---------------------------------------------------------------------------------配置方法首先找到項目中.idea文件下的workspace.xml開打接下來找到<component name"RunDashboard"&…

wepack構建工具

神TMc css重要性 程序猿 感嘆

php獲取藍湊云文件列表,php調用藍奏云下載接口

/*** package Lanzou* author Filmy* version 1.2.1* link https://mlooc.cn*/header(Access-Control-Allow-Origin:*);header(Content-Type:application/json; charsetutf-8);$url isset($_GET[url]) ? $_GET[url] : "";$pwd isset($_GET[pwd]) ? $_GET[pwd] : …

微信支付-服務端-bug排查記錄

微信支付服務端需要對微信官方的統一下單接口發送請求獲取prepayId作為app端調用支付的憑證&#xff0c;如果返回簽名錯誤&#xff0c;首先排查代碼層面的錯誤。 方法&#xff1a;使用微信官方的簽名算法檢驗。 地址&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/jsapi.…

.Net Core+mySqlSugar的一些稍復雜操作

介紹一些我嘗試的mysqlSugar的數據庫操作 修改密碼 var status db.Update<Users>(new { password user.password }, it > it.username user.username); 更新數據&#xff08;防止空值一起更新&#xff09; 首先封裝一個函數&#xff08;判斷是否為空或者數值為0&a…

nginx一個server多個servername

nginx server_name 多個的話&#xff0c;空格隔開就行