沈 杰,潘 科,劉 昕,范雨曉
(工業和信息化部 電信研究院西部分院(重慶電信研究院),重慶401336)

基于Python的智能家居自動化測試腳本設計及實現
沈 杰,潘 科,劉 昕,范雨曉
(工業和信息化部 電信研究院西部分院(重慶電信研究院),重慶401336)
根據智能家居系統的特點和要求,詳細介紹了所研發的自動化測試平臺。在此平臺基礎上,通過Python腳本的設計,擴展了對智能家居業務的描述,設計了對測試腳本的架構方案,并且以門磁設備的測試用例為例,詳細描述了腳本編寫過程和方法及實現其功能的自動化測試。通過Python語法編寫而成的測試方法,具有良好的描述能力,并且產生的測試方法易于維護,該方法對于開展智能家居自動化測試具有重要意義。
智能家居;腳本設計;自動化測試
利用腳本來描述測試用例,是具有標準語法、數據和指令的描述集合,在自動化測試過程中,通過腳本解釋器來執行測試用例是一種非常有效的測試方法[1-2]。在測試系統中引入腳本技術,測試需求使用面向測試的腳本語言來編寫測試計劃,描述一個或多個測試用例的執行,可以大大提高測試效率。測試人員根據被測系統要求,通過對各種資源進行配置,驅動被測系統運行,對輸入輸出接口進行結果判定。
1.1 測試原理
智能家居作為物聯網典型應用,其結構也遵從三層結構模型。在應用層端呈現出的是移動智能終端(如手機、平板)或者Web網頁等,在傳感層端呈現出的是各種感知設備或執行設備。因此,將智能家居系統業務應用看成一個“類黑盒”的產品,研究端到端的方法來開展自動化測試。為了達到自動化測試的目的,把智能家居系統手機端和傳感端都分別看成一個輸入輸出接口,通過測試系統進行測試激勵和數據采集。在APP端,把手機連入測試系統,在手機中嵌入一個上測試代理Agent文件,該Agent文件封裝了手機系統API接口及其部分控件,架起測試系統與手機通信的橋梁。在傳感設備端,需要對傳感設備模擬不同傳感信號,以便使傳感器產生報警信息,那么就需要一個信號模擬器,負責模擬輸入傳感元件發出的電信號;對于在傳感端是受控設備來說,就需要采集受控設備收到控制命令后的執行動作,因此需要一個信號采集器,負責采集識別受控節點接收到的控制信息。筆者開發的信號仿真測試儀,適配各種傳感端設備,架起了測試系統與傳感端通信橋梁,最后形成一個智能家居系統業務功能自動化閉環測試。
1.2 測試平臺結構
基于ISO/IEC9646分布式測試方法模型,虛擬化了測試系統中的下測試器LTA(Lower Testing Agent)和被測系統中的上測試器UTA(Upper Testing Agent),設計了智能家居的測試結構,如圖1所示。測試系統和被測系統分別屬于不同的兩個實體,對被測系統來說,通過對應用端的手機APP和感知延伸端的開關、門磁、煙感等執行設備和感知設備進行抽象化,提供系統服務層接口,進行數據單元的信息交互。在測試系統中,測試集成開發環境軟件(Integrated Development Environment,IDE)是整個測試系統的核心,協調管理后臺處理的各個資源模塊,并提供測試腳本開發的編程及運行環境。下測試器LTA通過信號仿真測試儀來實現電信號接口,執行測試IDE中的信號激勵或者采集被測系統感知延伸端的響應。上測試器UTA直接和測試IDE相連,接收測試命令,產生對被測系統的激勵,同時作為應用輸出,監測系統響應動作,最后都通過測試系統來判斷測試結果。

圖1 測試平臺結構
2.1 Python腳本描述擴展
Python語言是一種面向對象、解釋型、跨平臺的計算機程序設計語言。本文基于Python語言特點,結合本項目中已經開發的IDE軟件,開發針對智能家居產品的測試腳本技術,并在實際的系統測試中對其進行驗證[3-4]。
根據智能家居端到端的測試特性,擴展了Python腳本在測試系統中對智能家居業務的描述特性,包括測試配置和測試策略,分別如下:
1)測試配置
(1)參數配置——被測系統各種應用參數設置;
(2)環境配置——對被測系統環境設置。
2)測試策略
(1)激勵信息——對被測系統施加的各種激勵;
(2)采集信息——獲取各種輸出信息;
(3)驗證點比對——比較什么,和誰比較以及如何比較;
(4)執行策略——對測試次數、測試步驟等策略信息何時進行操作,以什么樣的規律進行。
2.2 腳本層次化
鑒于智能家居業務是以開展平均無故障時間(Mean Time Between Failure,MTBF)測試,需要長時間持續進行,這就需要測試系統具備自動化測試能力[5-6]。然而,考慮到智能家居系統業務的復雜樣和多樣性,測試時需要包含不同的測試控制功能,使用不同類型的測試公共函數。因此,把測試腳本按樹形結構進行層級分級設計。一方面便測試人員對數據的配置和選擇,另一方面有利于測試腳本的維護和管理。
按層級來對每個設備分別實現獨立的測試模塊,即測試用例TestCase、測試套件TestSuite及測試任務TestTask。
測試用例TestCase:確定執行前所需要的測試環境、先決條件,確定所要測試的目標,確定對輸入數據的要求和期望的輸出。
測試套件TestSuite:封裝基本功能,對復用函數提供API接口(如APP登錄/登出流程,手機屏幕滑動等函數模塊),在腳本編寫時直接調用模塊,以此加強測試套件的通用性,方便于測試人員二次開發。
測試任務TestTask:執行被測系統的業務用戶操作,為測試用例的具體實現。
2.3 腳本架構設計
根據智能家居所提供業務來說,在測試系統的IDE中,通過對測試腳本架構和測試數據分離的設計思路,可以對該部分進行封裝接口,形成共用結構的套件。該套件由系統時間、日志記錄、數據對象庫、文件列表、測試資源管理共5部分形成一個測試腳本架構。功能分別如下:
1)系統時間:測試系統提供時間標記或系統同步功能;
2)日志記錄:測試人員可自編程日志打印和存儲記錄;
3)資源對象庫包含:測試設備資源和驗證點圖片資源,包括對不同被測設備接入的設備管理和測試策略中各個驗證點管理;
4)文件列表:可導入/導出不同相關聯數據;
5)測試資源管理:對測試設備、測試腳本的資源調度管理,以達到對測試任務管理、測試狀態監控、測試報告的全部測試流程。
每一個TestCase即為一個測試用例,它由不同的UserCodeModule組合而成,在本架構中為了更加方便、人性化地設計測試腳本,TestCase之間采用可以互相嵌套的策略,即TestCase不僅可以包含UsercodeModule,也能包含TestCase。因此,在進行某一個測試用例的編寫來說,直接調用測試套件快速生成一個框架,通過對相類似的測試用例使用關鍵字驅動、屬性修改、數據源中進行存放、編輯等方式加載在測試Modules中,然后根據具體的測試用例實現,編輯被測業務的具體操作,從而能快速生成測試腳本。自動化測試腳本的架構圖如圖2所示。
在測試腳本的運行程序中,需要設置腳本程序的啟動項。啟動項就是項目運行后首先執行調用的腳本。然后在執行啟動項腳本的過程中,將其他腳本通過“from import *”調用文件的相對路徑的格式引用進來,這樣在其他腳本中定義的方法或者對象就可以在啟動項腳本中直接調用了。
根據腳本層次化的分級,使得接口模塊化,將共用的腳本調用直接生成,根據業務應用類型就可以直接組合生成不同的測試用例集,不需要針對每個功能開發腳本。由此,就可以在測試用例生成的時候自動寫出腳本的基本架構,只需修改具體實現的部分代碼,大大減少了代碼編寫的工作量,提高腳本的維護便捷性。

圖2 腳本架構
3.1 平臺搭建
在智能家居系統中,通常是集成了移動智能終端(如手機APP)、服務器(或云平臺)、家居傳感設備或執行設備(如智能插座、智能開關、門磁感應設備、煙霧感應設備等)的一個多層級、多設備的網絡系統,并被視為一個整體為人們提供產品服務。如圖3所示,根據測試平臺接口結構,把手機直接通過USB和測試系統相連,通過對手機端嵌入上測試代理,執行對手機的操作控制。傳感設備或者執行設備通過物聯網仿真測試儀直接相連。

圖3 智能家居業務測試示意圖
3.2 腳本測試實例
根據典型智能家居應用中,選取門磁感應器進行測試用例的編寫描述。測試用例的輸入、輸出,結果比對部分如下:
1)手機返回到主界面(預防異常);
2)登錄智能家居APP;
3)開啟安防監測狀態;
4)物聯網仿真測試儀模擬電信號發送測試命令,激勵門磁感應設備中產生報警信息;
5)在等待時間2 s內,手機APP接收到門磁感應器報警信息,如果未接收到該報警信息或者等待超時,判斷該次失敗,這樣就完成一次門磁感應設備的業務功能測試。
門磁感應器測試用例MagneticTestCase函數模塊如表1所示。

表1 函數模塊接口
在本測試用例中,可以直接調用生成測試套件中的公共函數模塊即返回模塊、登錄功能模塊、退出模塊,而對具體的測試策略,需要根據業務需求進行測試步驟、運行順序安排。限于篇幅,下面只描述了測試腳本中需要編寫執行策略模塊,測試腳本如下:
import time
from Commons.CommonFunctions import * #導入測試腳本庫
class SmokeAlarm:
def __init__(self):#初始化
self.parent=""
self.devicePath = ""
self.deviceIOTPath = ""
pass
defSetPropertyValue(self,properName,properValue):#屬性設置
setattr(self,properName,properValue)
def Run(self):#啟動項
devicePath = self.devicePath#路徑
deviceIOTPath = self.deviceIOTPath
device = KJRepository.GetDeviceByName(devicePath)
deviceIOT = KJRepository.GetDeviceByName(deviceIOTPath)
bflag = False
device.Click(180,808)#進入安防報警區域
time.sleep(2)
tempBflag = deviceIOT.IO_Output(0,deviceIOT.IO_Low)#激勵煙霧傳感器報警"
deviceIOT.Wait(1000)
result = deviceIOT.GetResult(tempBflag)
if result[0]==0:
print "開啟煙霧傳感器成功"
else:
print "開啟煙霧傳感器失敗"
if(CommonFunctions().WaitForCheckPoint("SmokeAlarm.HasNewMessage.HasNewMessage",devicePath,20000)):#驗證是否收到報警信號
if(KJRepository.DoVerify("SmokeAlarm.SmokeAlarmSuccess1.SmokeAlarmSuccess1",devicePath):#判斷報警信號是否成功
bflag = True
tempBflag = deviceIOT.IO_Output(0,deviceIOT.IO_High)#關閉煙霧傳感器報警
result = deviceIOT.GetResult(tempBflag)
if result[0]==0:
print "關閉煙霧傳感器成功"
else:
print "關閉煙霧傳感器失敗"
returnbflag
為了提高編寫腳本效率,可以在其他測試用例中,直接調用已封裝的腳本模塊,特別是在需要開展功能可靠性測試方面,需要連續操作幾千次到幾萬次,通過腳本把腳本結構和測試數據進行分離,方便測試人員開展系統屬性設置,進行自動化測試,能較好地實現判斷的準確性、測試的重復性。
3.3 測試分析
在該測試平臺中,對應用端來說,把移動智能終端接入測試IDE,可以直接操作APP或Web。對傳感端來說,開發測試仿真測試儀直接提供各種嵌入式接口,如IO接口、AD接口、DA接口、PWM接口、時序接口等各種接口,直接與被測設備相連,解決了智能家居硬件接入測試IDE。然后,通過腳本的強大描述能力,模擬操作各個激勵和結果比對,形成閉環測試,實現了智能家居測試的自動化。
現在已經把智能開關、智能插座通過信號仿真測試儀IO接口接入系統,煙霧傳感器、紅外探測器、門磁感應器通過DA接口接入系統,分別開展了手機APP與執行設備或傳感設備的業務可靠性測試,發現在持續運行下存在手機APP崩潰、數據丟包、運行響應速度變緩等產品可靠性、穩定性問題。
自動化測試憑借可重復性,測試效率高等特點得到了快速發展,對智能家居多設備系統來說,可靠性測試扮演著越來越重要的角色。針對傳感設備的多樣性,如何將自動化測試更好地融入智能家居,完善對傳感設備接口的接入,形成自動化的激勵和判別效果是開展對智能家居測試的關鍵環節。同時,在缺乏相關測試工具的情況下,目前建立智能家居可靠性測試,對產業發展、行業推廣、政府示范工程驗收等都具有重要意義。
[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]鞠秀娟,趙明.軟件自動化測試概述及應用工具分析[J].計算機應用,2007(27):317-321.
[3]彭樹林.Python在嵌入式項目中的輔助開發[J].信息系統工程,2010(7):21-31.
[4]孫強,李建華,李生紅.基于Python的文本分類系統開發研究[J]. 計算機應用與軟件,2011(3):13-14.
[5]趙敏. 手機應用層軟件測試及故障分析[J]. 質量技術監督研究,2009(3):57-60.
[6]高巍. Android操作系統軟件自動化測試方案的設計與實施[D]. 北京:北京郵電大學,2012.
沈 杰,碩士生,主研物聯網應用測試、自動化測試等;
潘 科,博士生,主研物聯網應用測試、自動化測試等;
劉 昕,碩士生,主研物聯網應用測試、自動化測試等;
范雨曉,碩士生,主研物聯網應用測試、自動化測試等。
責任編輯:閆雯雯
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年重慶市科技人才培養計劃項目(新產品創新青年科技人才培養項目)(cstc 2013 kjrc-qnrc40007)
TP391.76
A
10.16280/j.videoe.2015.05.029
2014-11-09
【本文獻信息】沈杰,潘科,劉昕,等.基于Python的智能家居自動化測試腳本設計及實現[J].電視技術,2015,39(5).