沈 杰,潘 科,劉 昕,范雨曉
(工業(yè)和信息化部 電信研究院西部分院(重慶電信研究院),重慶401336)
基于Python的智能家居自動(dòng)化測(cè)試腳本設(shè)計(jì)及實(shí)現(xiàn)
沈 杰,潘 科,劉 昕,范雨曉
(工業(yè)和信息化部 電信研究院西部分院(重慶電信研究院),重慶401336)
根據(jù)智能家居系統(tǒng)的特點(diǎn)和要求,詳細(xì)介紹了所研發(fā)的自動(dòng)化測(cè)試平臺(tái)。在此平臺(tái)基礎(chǔ)上,通過(guò)Python腳本的設(shè)計(jì),擴(kuò)展了對(duì)智能家居業(yè)務(wù)的描述,設(shè)計(jì)了對(duì)測(cè)試腳本的架構(gòu)方案,并且以門(mén)磁設(shè)備的測(cè)試用例為例,詳細(xì)描述了腳本編寫(xiě)過(guò)程和方法及實(shí)現(xiàn)其功能的自動(dòng)化測(cè)試。通過(guò)Python語(yǔ)法編寫(xiě)而成的測(cè)試方法,具有良好的描述能力,并且產(chǎn)生的測(cè)試方法易于維護(hù),該方法對(duì)于開(kāi)展智能家居自動(dòng)化測(cè)試具有重要意義。
智能家居;腳本設(shè)計(jì);自動(dòng)化測(cè)試
利用腳本來(lái)描述測(cè)試用例,是具有標(biāo)準(zhǔn)語(yǔ)法、數(shù)據(jù)和指令的描述集合,在自動(dòng)化測(cè)試過(guò)程中,通過(guò)腳本解釋器來(lái)執(zhí)行測(cè)試用例是一種非常有效的測(cè)試方法[1-2]。在測(cè)試系統(tǒng)中引入腳本技術(shù),測(cè)試需求使用面向測(cè)試的腳本語(yǔ)言來(lái)編寫(xiě)測(cè)試計(jì)劃,描述一個(gè)或多個(gè)測(cè)試用例的執(zhí)行,可以大大提高測(cè)試效率。測(cè)試人員根據(jù)被測(cè)系統(tǒng)要求,通過(guò)對(duì)各種資源進(jìn)行配置,驅(qū)動(dòng)被測(cè)系統(tǒng)運(yùn)行,對(duì)輸入輸出接口進(jìn)行結(jié)果判定。
1.1 測(cè)試原理
智能家居作為物聯(lián)網(wǎng)典型應(yīng)用,其結(jié)構(gòu)也遵從三層結(jié)構(gòu)模型。在應(yīng)用層端呈現(xiàn)出的是移動(dòng)智能終端(如手機(jī)、平板)或者Web網(wǎng)頁(yè)等,在傳感層端呈現(xiàn)出的是各種感知設(shè)備或執(zhí)行設(shè)備。因此,將智能家居系統(tǒng)業(yè)務(wù)應(yīng)用看成一個(gè)“類黑盒”的產(chǎn)品,研究端到端的方法來(lái)開(kāi)展自動(dòng)化測(cè)試。為了達(dá)到自動(dòng)化測(cè)試的目的,把智能家居系統(tǒng)手機(jī)端和傳感端都分別看成一個(gè)輸入輸出接口,通過(guò)測(cè)試系統(tǒng)進(jìn)行測(cè)試激勵(lì)和數(shù)據(jù)采集。在APP端,把手機(jī)連入測(cè)試系統(tǒng),在手機(jī)中嵌入一個(gè)上測(cè)試代理Agent文件,該Agent文件封裝了手機(jī)系統(tǒng)API接口及其部分控件,架起測(cè)試系統(tǒng)與手機(jī)通信的橋梁。在傳感設(shè)備端,需要對(duì)傳感設(shè)備模擬不同傳感信號(hào),以便使傳感器產(chǎn)生報(bào)警信息,那么就需要一個(gè)信號(hào)模擬器,負(fù)責(zé)模擬輸入傳感元件發(fā)出的電信號(hào);對(duì)于在傳感端是受控設(shè)備來(lái)說(shuō),就需要采集受控設(shè)備收到控制命令后的執(zhí)行動(dòng)作,因此需要一個(gè)信號(hào)采集器,負(fù)責(zé)采集識(shí)別受控節(jié)點(diǎn)接收到的控制信息。筆者開(kāi)發(fā)的信號(hào)仿真測(cè)試儀,適配各種傳感端設(shè)備,架起了測(cè)試系統(tǒng)與傳感端通信橋梁,最后形成一個(gè)智能家居系統(tǒng)業(yè)務(wù)功能自動(dòng)化閉環(huán)測(cè)試。
1.2 測(cè)試平臺(tái)結(jié)構(gòu)
基于ISO/IEC9646分布式測(cè)試方法模型,虛擬化了測(cè)試系統(tǒng)中的下測(cè)試器LTA(Lower Testing Agent)和被測(cè)系統(tǒng)中的上測(cè)試器UTA(Upper Testing Agent),設(shè)計(jì)了智能家居的測(cè)試結(jié)構(gòu),如圖1所示。測(cè)試系統(tǒng)和被測(cè)系統(tǒng)分別屬于不同的兩個(gè)實(shí)體,對(duì)被測(cè)系統(tǒng)來(lái)說(shuō),通過(guò)對(duì)應(yīng)用端的手機(jī)APP和感知延伸端的開(kāi)關(guān)、門(mén)磁、煙感等執(zhí)行設(shè)備和感知設(shè)備進(jìn)行抽象化,提供系統(tǒng)服務(wù)層接口,進(jìn)行數(shù)據(jù)單元的信息交互。在測(cè)試系統(tǒng)中,測(cè)試集成開(kāi)發(fā)環(huán)境軟件(Integrated Development Environment,IDE)是整個(gè)測(cè)試系統(tǒng)的核心,協(xié)調(diào)管理后臺(tái)處理的各個(gè)資源模塊,并提供測(cè)試腳本開(kāi)發(fā)的編程及運(yùn)行環(huán)境。下測(cè)試器LTA通過(guò)信號(hào)仿真測(cè)試儀來(lái)實(shí)現(xiàn)電信號(hào)接口,執(zhí)行測(cè)試IDE中的信號(hào)激勵(lì)或者采集被測(cè)系統(tǒng)感知延伸端的響應(yīng)。上測(cè)試器UTA直接和測(cè)試IDE相連,接收測(cè)試命令,產(chǎn)生對(duì)被測(cè)系統(tǒng)的激勵(lì),同時(shí)作為應(yīng)用輸出,監(jiān)測(cè)系統(tǒng)響應(yīng)動(dòng)作,最后都通過(guò)測(cè)試系統(tǒng)來(lái)判斷測(cè)試結(jié)果。
圖1 測(cè)試平臺(tái)結(jié)構(gòu)
2.1 Python腳本描述擴(kuò)展
Python語(yǔ)言是一種面向?qū)ο?、解釋型、跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。本文基于Python語(yǔ)言特點(diǎn),結(jié)合本項(xiàng)目中已經(jīng)開(kāi)發(fā)的IDE軟件,開(kāi)發(fā)針對(duì)智能家居產(chǎn)品的測(cè)試腳本技術(shù),并在實(shí)際的系統(tǒng)測(cè)試中對(duì)其進(jìn)行驗(yàn)證[3-4]。
根據(jù)智能家居端到端的測(cè)試特性,擴(kuò)展了Python腳本在測(cè)試系統(tǒng)中對(duì)智能家居業(yè)務(wù)的描述特性,包括測(cè)試配置和測(cè)試策略,分別如下:
1)測(cè)試配置
(1)參數(shù)配置——被測(cè)系統(tǒng)各種應(yīng)用參數(shù)設(shè)置;
(2)環(huán)境配置——對(duì)被測(cè)系統(tǒng)環(huán)境設(shè)置。
2)測(cè)試策略
(1)激勵(lì)信息——對(duì)被測(cè)系統(tǒng)施加的各種激勵(lì);
(2)采集信息——獲取各種輸出信息;
(3)驗(yàn)證點(diǎn)比對(duì)——比較什么,和誰(shuí)比較以及如何比較;
(4)執(zhí)行策略——對(duì)測(cè)試次數(shù)、測(cè)試步驟等策略信息何時(shí)進(jìn)行操作,以什么樣的規(guī)律進(jìn)行。
2.2 腳本層次化
鑒于智能家居業(yè)務(wù)是以開(kāi)展平均無(wú)故障時(shí)間(Mean Time Between Failure,MTBF)測(cè)試,需要長(zhǎng)時(shí)間持續(xù)進(jìn)行,這就需要測(cè)試系統(tǒng)具備自動(dòng)化測(cè)試能力[5-6]。然而,考慮到智能家居系統(tǒng)業(yè)務(wù)的復(fù)雜樣和多樣性,測(cè)試時(shí)需要包含不同的測(cè)試控制功能,使用不同類型的測(cè)試公共函數(shù)。因此,把測(cè)試腳本按樹(shù)形結(jié)構(gòu)進(jìn)行層級(jí)分級(jí)設(shè)計(jì)。一方面便測(cè)試人員對(duì)數(shù)據(jù)的配置和選擇,另一方面有利于測(cè)試腳本的維護(hù)和管理。
按層級(jí)來(lái)對(duì)每個(gè)設(shè)備分別實(shí)現(xiàn)獨(dú)立的測(cè)試模塊,即測(cè)試用例TestCase、測(cè)試套件TestSuite及測(cè)試任務(wù)TestTask。
測(cè)試用例TestCase:確定執(zhí)行前所需要的測(cè)試環(huán)境、先決條件,確定所要測(cè)試的目標(biāo),確定對(duì)輸入數(shù)據(jù)的要求和期望的輸出。
測(cè)試套件TestSuite:封裝基本功能,對(duì)復(fù)用函數(shù)提供API接口(如APP登錄/登出流程,手機(jī)屏幕滑動(dòng)等函數(shù)模塊),在腳本編寫(xiě)時(shí)直接調(diào)用模塊,以此加強(qiáng)測(cè)試套件的通用性,方便于測(cè)試人員二次開(kāi)發(fā)。
測(cè)試任務(wù)TestTask:執(zhí)行被測(cè)系統(tǒng)的業(yè)務(wù)用戶操作,為測(cè)試用例的具體實(shí)現(xiàn)。
2.3 腳本架構(gòu)設(shè)計(jì)
根據(jù)智能家居所提供業(yè)務(wù)來(lái)說(shuō),在測(cè)試系統(tǒng)的IDE中,通過(guò)對(duì)測(cè)試腳本架構(gòu)和測(cè)試數(shù)據(jù)分離的設(shè)計(jì)思路,可以對(duì)該部分進(jìn)行封裝接口,形成共用結(jié)構(gòu)的套件。該套件由系統(tǒng)時(shí)間、日志記錄、數(shù)據(jù)對(duì)象庫(kù)、文件列表、測(cè)試資源管理共5部分形成一個(gè)測(cè)試腳本架構(gòu)。功能分別如下:
1)系統(tǒng)時(shí)間:測(cè)試系統(tǒng)提供時(shí)間標(biāo)記或系統(tǒng)同步功能;
2)日志記錄:測(cè)試人員可自編程日志打印和存儲(chǔ)記錄;
3)資源對(duì)象庫(kù)包含:測(cè)試設(shè)備資源和驗(yàn)證點(diǎn)圖片資源,包括對(duì)不同被測(cè)設(shè)備接入的設(shè)備管理和測(cè)試策略中各個(gè)驗(yàn)證點(diǎn)管理;
4)文件列表:可導(dǎo)入/導(dǎo)出不同相關(guān)聯(lián)數(shù)據(jù);
5)測(cè)試資源管理:對(duì)測(cè)試設(shè)備、測(cè)試腳本的資源調(diào)度管理,以達(dá)到對(duì)測(cè)試任務(wù)管理、測(cè)試狀態(tài)監(jiān)控、測(cè)試報(bào)告的全部測(cè)試流程。
每一個(gè)TestCase即為一個(gè)測(cè)試用例,它由不同的UserCodeModule組合而成,在本架構(gòu)中為了更加方便、人性化地設(shè)計(jì)測(cè)試腳本,TestCase之間采用可以互相嵌套的策略,即TestCase不僅可以包含UsercodeModule,也能包含TestCase。因此,在進(jìn)行某一個(gè)測(cè)試用例的編寫(xiě)來(lái)說(shuō),直接調(diào)用測(cè)試套件快速生成一個(gè)框架,通過(guò)對(duì)相類似的測(cè)試用例使用關(guān)鍵字驅(qū)動(dòng)、屬性修改、數(shù)據(jù)源中進(jìn)行存放、編輯等方式加載在測(cè)試Modules中,然后根據(jù)具體的測(cè)試用例實(shí)現(xiàn),編輯被測(cè)業(yè)務(wù)的具體操作,從而能快速生成測(cè)試腳本。自動(dòng)化測(cè)試腳本的架構(gòu)圖如圖2所示。
在測(cè)試腳本的運(yùn)行程序中,需要設(shè)置腳本程序的啟動(dòng)項(xiàng)。啟動(dòng)項(xiàng)就是項(xiàng)目運(yùn)行后首先執(zhí)行調(diào)用的腳本。然后在執(zhí)行啟動(dòng)項(xiàng)腳本的過(guò)程中,將其他腳本通過(guò)“from import *”調(diào)用文件的相對(duì)路徑的格式引用進(jìn)來(lái),這樣在其他腳本中定義的方法或者對(duì)象就可以在啟動(dòng)項(xiàng)腳本中直接調(diào)用了。
根據(jù)腳本層次化的分級(jí),使得接口模塊化,將共用的腳本調(diào)用直接生成,根據(jù)業(yè)務(wù)應(yīng)用類型就可以直接組合生成不同的測(cè)試用例集,不需要針對(duì)每個(gè)功能開(kāi)發(fā)腳本。由此,就可以在測(cè)試用例生成的時(shí)候自動(dòng)寫(xiě)出腳本的基本架構(gòu),只需修改具體實(shí)現(xiàn)的部分代碼,大大減少了代碼編寫(xiě)的工作量,提高腳本的維護(hù)便捷性。
圖2 腳本架構(gòu)
3.1 平臺(tái)搭建
在智能家居系統(tǒng)中,通常是集成了移動(dòng)智能終端(如手機(jī)APP)、服務(wù)器(或云平臺(tái))、家居傳感設(shè)備或執(zhí)行設(shè)備(如智能插座、智能開(kāi)關(guān)、門(mén)磁感應(yīng)設(shè)備、煙霧感應(yīng)設(shè)備等)的一個(gè)多層級(jí)、多設(shè)備的網(wǎng)絡(luò)系統(tǒng),并被視為一個(gè)整體為人們提供產(chǎn)品服務(wù)。如圖3所示,根據(jù)測(cè)試平臺(tái)接口結(jié)構(gòu),把手機(jī)直接通過(guò)USB和測(cè)試系統(tǒng)相連,通過(guò)對(duì)手機(jī)端嵌入上測(cè)試代理,執(zhí)行對(duì)手機(jī)的操作控制。傳感設(shè)備或者執(zhí)行設(shè)備通過(guò)物聯(lián)網(wǎng)仿真測(cè)試儀直接相連。
圖3 智能家居業(yè)務(wù)測(cè)試示意圖
3.2 腳本測(cè)試實(shí)例
根據(jù)典型智能家居應(yīng)用中,選取門(mén)磁感應(yīng)器進(jìn)行測(cè)試用例的編寫(xiě)描述。測(cè)試用例的輸入、輸出,結(jié)果比對(duì)部分如下:
1)手機(jī)返回到主界面(預(yù)防異常);
2)登錄智能家居APP;
3)開(kāi)啟安防監(jiān)測(cè)狀態(tài);
4)物聯(lián)網(wǎng)仿真測(cè)試儀模擬電信號(hào)發(fā)送測(cè)試命令,激勵(lì)門(mén)磁感應(yīng)設(shè)備中產(chǎn)生報(bào)警信息;
5)在等待時(shí)間2 s內(nèi),手機(jī)APP接收到門(mén)磁感應(yīng)器報(bào)警信息,如果未接收到該報(bào)警信息或者等待超時(shí),判斷該次失敗,這樣就完成一次門(mén)磁感應(yīng)設(shè)備的業(yè)務(wù)功能測(cè)試。
門(mén)磁感應(yīng)器測(cè)試用例MagneticTestCase函數(shù)模塊如表1所示。
表1 函數(shù)模塊接口
在本測(cè)試用例中,可以直接調(diào)用生成測(cè)試套件中的公共函數(shù)模塊即返回模塊、登錄功能模塊、退出模塊,而對(duì)具體的測(cè)試策略,需要根據(jù)業(yè)務(wù)需求進(jìn)行測(cè)試步驟、運(yùn)行順序安排。限于篇幅,下面只描述了測(cè)試腳本中需要編寫(xiě)執(zhí)行策略模塊,測(cè)試腳本如下:
import time
from Commons.CommonFunctions import * #導(dǎo)入測(cè)試腳本庫(kù)
class SmokeAlarm:
def __init__(self):#初始化
self.parent=""
self.devicePath = ""
self.deviceIOTPath = ""
pass
defSetPropertyValue(self,properName,properValue):#屬性設(shè)置
setattr(self,properName,properValue)
def Run(self):#啟動(dòng)項(xiàng)
devicePath = self.devicePath#路徑
deviceIOTPath = self.deviceIOTPath
device = KJRepository.GetDeviceByName(devicePath)
deviceIOT = KJRepository.GetDeviceByName(deviceIOTPath)
bflag = False
device.Click(180,808)#進(jìn)入安防報(bào)警區(qū)域
time.sleep(2)
tempBflag = deviceIOT.IO_Output(0,deviceIOT.IO_Low)#激勵(lì)煙霧傳感器報(bào)警"
deviceIOT.Wait(1000)
result = deviceIOT.GetResult(tempBflag)
if result[0]==0:
print "開(kāi)啟煙霧傳感器成功"
else:
print "開(kāi)啟煙霧傳感器失敗"
if(CommonFunctions().WaitForCheckPoint("SmokeAlarm.HasNewMessage.HasNewMessage",devicePath,20000)):#驗(yàn)證是否收到報(bào)警信號(hào)
if(KJRepository.DoVerify("SmokeAlarm.SmokeAlarmSuccess1.SmokeAlarmSuccess1",devicePath):#判斷報(bào)警信號(hào)是否成功
bflag = True
tempBflag = deviceIOT.IO_Output(0,deviceIOT.IO_High)#關(guān)閉煙霧傳感器報(bào)警
result = deviceIOT.GetResult(tempBflag)
if result[0]==0:
print "關(guān)閉煙霧傳感器成功"
else:
print "關(guān)閉煙霧傳感器失敗"
returnbflag
為了提高編寫(xiě)腳本效率,可以在其他測(cè)試用例中,直接調(diào)用已封裝的腳本模塊,特別是在需要開(kāi)展功能可靠性測(cè)試方面,需要連續(xù)操作幾千次到幾萬(wàn)次,通過(guò)腳本把腳本結(jié)構(gòu)和測(cè)試數(shù)據(jù)進(jìn)行分離,方便測(cè)試人員開(kāi)展系統(tǒng)屬性設(shè)置,進(jìn)行自動(dòng)化測(cè)試,能較好地實(shí)現(xiàn)判斷的準(zhǔn)確性、測(cè)試的重復(fù)性。
3.3 測(cè)試分析
在該測(cè)試平臺(tái)中,對(duì)應(yīng)用端來(lái)說(shuō),把移動(dòng)智能終端接入測(cè)試IDE,可以直接操作APP或Web。對(duì)傳感端來(lái)說(shuō),開(kāi)發(fā)測(cè)試仿真測(cè)試儀直接提供各種嵌入式接口,如IO接口、AD接口、DA接口、PWM接口、時(shí)序接口等各種接口,直接與被測(cè)設(shè)備相連,解決了智能家居硬件接入測(cè)試IDE。然后,通過(guò)腳本的強(qiáng)大描述能力,模擬操作各個(gè)激勵(lì)和結(jié)果比對(duì),形成閉環(huán)測(cè)試,實(shí)現(xiàn)了智能家居測(cè)試的自動(dòng)化。
現(xiàn)在已經(jīng)把智能開(kāi)關(guān)、智能插座通過(guò)信號(hào)仿真測(cè)試儀IO接口接入系統(tǒng),煙霧傳感器、紅外探測(cè)器、門(mén)磁感應(yīng)器通過(guò)DA接口接入系統(tǒng),分別開(kāi)展了手機(jī)APP與執(zhí)行設(shè)備或傳感設(shè)備的業(yè)務(wù)可靠性測(cè)試,發(fā)現(xiàn)在持續(xù)運(yùn)行下存在手機(jī)APP崩潰、數(shù)據(jù)丟包、運(yùn)行響應(yīng)速度變緩等產(chǎn)品可靠性、穩(wěn)定性問(wèn)題。
自動(dòng)化測(cè)試憑借可重復(fù)性,測(cè)試效率高等特點(diǎn)得到了快速發(fā)展,對(duì)智能家居多設(shè)備系統(tǒng)來(lái)說(shuō),可靠性測(cè)試扮演著越來(lái)越重要的角色。針對(duì)傳感設(shè)備的多樣性,如何將自動(dòng)化測(cè)試更好地融入智能家居,完善對(duì)傳感設(shè)備接口的接入,形成自動(dòng)化的激勵(lì)和判別效果是開(kāi)展對(duì)智能家居測(cè)試的關(guān)鍵環(huán)節(jié)。同時(shí),在缺乏相關(guān)測(cè)試工具的情況下,目前建立智能家居可靠性測(cè)試,對(duì)產(chǎn)業(yè)發(fā)展、行業(yè)推廣、政府示范工程驗(yàn)收等都具有重要意義。
[1]CHEN Jixi,JIANG Lihong.A method and implementation of test automation for software functional[J].The Computer Engineering,2004,30(12):168-169.
[2]鞠秀娟,趙明.軟件自動(dòng)化測(cè)試概述及應(yīng)用工具分析[J].計(jì)算機(jī)應(yīng)用,2007(27):317-321.
[3]彭樹(shù)林.Python在嵌入式項(xiàng)目中的輔助開(kāi)發(fā)[J].信息系統(tǒng)工程,2010(7):21-31.
[4]孫強(qiáng),李建華,李生紅.基于Python的文本分類系統(tǒng)開(kāi)發(fā)研究[J]. 計(jì)算機(jī)應(yīng)用與軟件,2011(3):13-14.
[5]趙敏. 手機(jī)應(yīng)用層軟件測(cè)試及故障分析[J]. 質(zhì)量技術(shù)監(jiān)督研究,2009(3):57-60.
[6]高巍. Android操作系統(tǒng)軟件自動(dòng)化測(cè)試方案的設(shè)計(jì)與實(shí)施[D]. 北京:北京郵電大學(xué),2012.
沈 杰,碩士生,主研物聯(lián)網(wǎng)應(yīng)用測(cè)試、自動(dòng)化測(cè)試等;
潘 科,博士生,主研物聯(lián)網(wǎng)應(yīng)用測(cè)試、自動(dòng)化測(cè)試等;
劉 昕,碩士生,主研物聯(lián)網(wǎng)應(yīng)用測(cè)試、自動(dòng)化測(cè)試等;
范雨曉,碩士生,主研物聯(lián)網(wǎng)應(yīng)用測(cè)試、自動(dòng)化測(cè)試等。
責(zé)任編輯:閆雯雯
Python Script Based on Smart Home Automatic Testing Design and Implementation
SHEN Jie,PAN Ke,LIU Xin, FAN Yuxiao
(WestInstituteofCATRofMIIT(ChongqingInstituteofTelecommunications),Chongqing401336,China)
According to the characteristics of the smart home system and requirements,the development of smart home automation test platform is introduced.In this platform, it takes an example of door magnetic equipment,the Python script writing process and methods is described in detail. Then,the function of automatic testing is implemented. The testing method which is programmed by Python has a good ability of description and easy to maintain,so it has great significance for implementing intelligent automated testing.
smart home; script design; automated testing
2013年重慶市科技人才培養(yǎng)計(jì)劃項(xiàng)目(新產(chǎn)品創(chuàng)新青年科技人才培養(yǎng)項(xiàng)目)(cstc 2013 kjrc-qnrc40007)
TP391.76
A
10.16280/j.videoe.2015.05.029
2014-11-09
【本文獻(xiàn)信息】沈杰,潘科,劉昕,等.基于Python的智能家居自動(dòng)化測(cè)試腳本設(shè)計(jì)及實(shí)現(xiàn)[J].電視技術(shù),2015,39(5).