物聯(lián)網(wǎng)產(chǎn)品測試框架——物聯(lián)網(wǎng)測試地圖
物聯(lián)網(wǎng)的出現(xiàn),給測試帶來了很多有意思的挑戰(zhàn),使得眾多QA開始重新思考傳統(tǒng)的測試過程。
例如,我最近測試了一個(gè)產(chǎn)品,在這個(gè)產(chǎn)品中的移動(dòng)APP會(huì)跟連接的機(jī)器產(chǎn)生會(huì)話。這兩個(gè)設(shè)備各種各樣的狀態(tài)給測試場景的設(shè)計(jì)帶來了特別大的挑戰(zhàn)。下面給大家介紹一個(gè)很有用的物聯(lián)網(wǎng)產(chǎn)品測試框架——物聯(lián)網(wǎng)測試地圖,它可以幫助我們管理物聯(lián)網(wǎng)設(shè)備多種排列的復(fù)雜狀態(tài)。
物聯(lián)網(wǎng)測試因素
當(dāng)我們測試簡單的web應(yīng)用時(shí),通常要考慮的狀態(tài)有:
- 服務(wù)器宕機(jī)
- HTTP請(qǐng)求超時(shí)
- 網(wǎng)速慢
- 授權(quán)和認(rèn)證錯(cuò)誤
測試任何互聯(lián)網(wǎng)應(yīng)用的時(shí)候,需要警惕這四種狀態(tài)。對(duì)于移動(dòng)應(yīng)用,操作的是移動(dòng)環(huán)境,需要關(guān)注額外的幾種情況:
- 離線模式
- 在線模式
- 殺掉Activity
- 后臺(tái)行為
- 語言
- 地理位置
我們?cè)倏?ldquo;連接的機(jī)器”所帶來的狀態(tài)多樣性,通常還有:
- 機(jī)器WiFi斷開
- 機(jī)器WiFi連接
- 機(jī)器繁忙
- 機(jī)器休眠
這意味著即使只有上述給定的狀態(tài)集,整個(gè)系統(tǒng)在任何時(shí)間點(diǎn)上可能會(huì)有96(4x6x4)種狀態(tài)。
由于系統(tǒng)中狀態(tài)轉(zhuǎn)換會(huì)引入附加的約束,這些狀態(tài)都不能當(dāng)做獨(dú)立的實(shí)體。例如,狀態(tài)從“離線”變成“在線”很可能觸發(fā)一系列的事件。
上述因素還僅僅是冰山一角。隨著對(duì)規(guī)范的深入了解,把不同的狀態(tài)跟邏輯場景結(jié)合起來將會(huì)更加的復(fù)雜。
對(duì)于靜態(tài)系統(tǒng)的可變數(shù)據(jù)集,已有的web測試技術(shù)可以很好的用來抽取測試場景,比如all pairs(開源的配對(duì)測試工具)、等價(jià)類劃分、邊界值分析法等。這些技術(shù)通過淘汰的邏輯來優(yōu)化測試數(shù)據(jù)集。
例如,all pairs技術(shù)會(huì)淘汰重復(fù)的數(shù)據(jù)配對(duì)組合。但是,對(duì)系統(tǒng)的可變狀態(tài)設(shè)計(jì)測試場景時(shí),這些技術(shù)是不可靠的,廢棄的系統(tǒng)狀態(tài)會(huì)使得系統(tǒng)通訊不暢。當(dāng)然,這些技術(shù)對(duì)于物聯(lián)網(wǎng)系統(tǒng)中的單個(gè)單元還是很適用的。
因此,非常有必要搞一個(gè)物聯(lián)網(wǎng)測試地圖。
可視化地圖
大家肯定都在地理課上看過地圖。但我這里所說的地圖是針對(duì)測試場景的,它列出所有潛在的系統(tǒng)因素,在測試某個(gè)特性時(shí)可以從中抽取必要的測試場景。
產(chǎn)品的每個(gè)系統(tǒng)的n種狀態(tài)在同一個(gè)可轉(zhuǎn)動(dòng)的圓環(huán)中列出,邏輯上相鄰的狀態(tài)在環(huán)中相互挨著。非功能需求(NFR)在測試復(fù)雜集成的時(shí)候很容易被忽略掉,于是把它們?cè)谝粋€(gè)環(huán)中單獨(dú)列出。
下圖就是我所說的物聯(lián)網(wǎng)測試地圖:
下面以一個(gè)例子介紹地圖的使用場景,該例子僅涉及移動(dòng)設(shè)備和機(jī)器交互部分,需要關(guān)注的環(huán)是設(shè)備、機(jī)器和網(wǎng)絡(luò)。
把移動(dòng)設(shè)備和機(jī)器固定在WiFi連接的狀態(tài),轉(zhuǎn)動(dòng)網(wǎng)絡(luò)環(huán),可以得到下面這些場景:
- 未授權(quán)用戶嘗試訪問機(jī)器會(huì)在App上觸發(fā)“訪問被拒絕”的錯(cuò)誤消息
- 服務(wù)器宕機(jī)和服務(wù)器錯(cuò)誤會(huì)觸發(fā)相應(yīng)的業(yè)務(wù)錯(cuò)誤消息——“程序出錯(cuò),請(qǐng)稍后重試”
- 響應(yīng)超時(shí)可能有兩種情形:重發(fā)同一個(gè)請(qǐng)求并顯示“正在加載”圖示,或者顯示上面那樣相似的錯(cuò)誤消息
- 非法請(qǐng)求會(huì)觸發(fā)消息“請(qǐng)更新你的App”
繼續(xù)保持移動(dòng)設(shè)備的WiFi為連接狀態(tài),轉(zhuǎn)動(dòng)機(jī)器環(huán):
- 當(dāng)機(jī)器是離線模式的時(shí)候,App應(yīng)該顯示“請(qǐng)檢查機(jī)器的網(wǎng)絡(luò)連接”
- 當(dāng)機(jī)器繁忙的時(shí)候,彈出警告“機(jī)器繁忙,無法完成請(qǐng)求”
- 當(dāng)機(jī)器休眠或者在另一個(gè)網(wǎng)絡(luò)上的時(shí)候,應(yīng)該顯示“沒找到機(jī)器”等類似的消息
- 然后,機(jī)器調(diào)到正確的網(wǎng)絡(luò),應(yīng)該恢復(fù)移動(dòng)設(shè)備和機(jī)器的連接
切換機(jī)器環(huán)為WiFi連接,轉(zhuǎn)動(dòng)移動(dòng)設(shè)備環(huán):
- 當(dāng)移動(dòng)設(shè)備離線時(shí),應(yīng)該彈出對(duì)應(yīng)的消息或者禁掉操作按鈕
- 當(dāng)移動(dòng)設(shè)備恢復(fù)在線模式時(shí),App應(yīng)該發(fā)送相應(yīng)的請(qǐng)求去連接機(jī)器
- 當(dāng)移動(dòng)設(shè)備的網(wǎng)絡(luò)從WiFi切換到3G,應(yīng)該有什么樣的行為?
- 當(dāng)用戶正在試圖連接物聯(lián)網(wǎng)設(shè)備的時(shí)候突然接到電話,將App置于后臺(tái)運(yùn)行,這時(shí)候還能收到完整的請(qǐng)求還是需要從頭開始發(fā)送請(qǐng)求?
- 安卓設(shè)備殺掉一個(gè)在后臺(tái)運(yùn)行了一段時(shí)間的App,用戶的***屏幕狀態(tài)還會(huì)保存嗎?
- 有本地化需求的App要在每個(gè)場景層面進(jìn)行驗(yàn)證
就這樣,多次旋轉(zhuǎn)地圖可以擴(kuò)展產(chǎn)生多個(gè)場景。盡管有些場景可能不適合當(dāng)前的特性,有些甚至跟業(yè)務(wù)需求無關(guān),這個(gè)測試地圖還是非常詳盡的。
在實(shí)踐層面,對(duì)于有多個(gè)QA在測試同一個(gè)物聯(lián)網(wǎng)產(chǎn)品的團(tuán)隊(duì),地圖可以作為大家共同參考的手冊(cè)。這個(gè)地圖把工具、設(shè)備、場景和協(xié)議的排列以易于理解的方式呈現(xiàn)出來,覆蓋了測試場景設(shè)計(jì)這個(gè)獨(dú)特的需求,是一種非常高效的合作方式。
【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號(hào):思特沃克,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】