基于Python的智能家居自动化测试脚本设计及实现
2015-06-22范雨晓
沈 杰,潘 科,刘 昕,范雨晓
(工业和信息化部 电信研究院西部分院(重庆电信研究院),重庆401336)
基于Python的智能家居自动化测试脚本设计及实现
沈 杰,潘 科,刘 昕,范雨晓
(工业和信息化部 电信研究院西部分院(重庆电信研究院),重庆401336)
根据智能家居系统的特点和要求,详细介绍了所研发的自动化测试平台。在此平台基础上,通过Python脚本的设计,扩展了对智能家居业务的描述,设计了对测试脚本的架构方案,并且以门磁设备的测试用例为例,详细描述了脚本编写过程和方法及实现其功能的自动化测试。通过Python语法编写而成的测试方法,具有良好的描述能力,并且产生的测试方法易于维护,该方法对于开展智能家居自动化测试具有重要意义。
智能家居;脚本设计;自动化测试
利用脚本来描述测试用例,是具有标准语法、数据和指令的描述集合,在自动化测试过程中,通过脚本解释器来执行测试用例是一种非常有效的测试方法[1-2]。在测试系统中引入脚本技术,测试需求使用面向测试的脚本语言来编写测试计划,描述一个或多个测试用例的执行,可以大大提高测试效率。测试人员根据被测系统要求,通过对各种资源进行配置,驱动被测系统运行,对输入输出接口进行结果判定。
1 智能家居自动化测试平台
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 自动化测试脚本设计
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 自动化测试实现
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崩溃、数据丢包、运行响应速度变缓等产品可靠性、稳定性问题。
4 结束语
自动化测试凭借可重复性,测试效率高等特点得到了快速发展,对智能家居多设备系统来说,可靠性测试扮演着越来越重要的角色。针对传感设备的多样性,如何将自动化测试更好地融入智能家居,完善对传感设备接口的接入,形成自动化的激励和判别效果是开展对智能家居测试的关键环节。同时,在缺乏相关测试工具的情况下,目前建立智能家居可靠性测试,对产业发展、行业推广、政府示范工程验收等都具有重要意义。
[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).