驱动的自动化测试系统的开发与应用_第1页
驱动的自动化测试系统的开发与应用_第2页
驱动的自动化测试系统的开发与应用_第3页
驱动的自动化测试系统的开发与应用_第4页
驱动的自动化测试系统的开发与应用_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

word文档可自由复制编辑关键字驱动的自动化测试系统的开发与开用摘要在当今科学技术不断发展的社会,软件系统在商业用途和日常生活中扮演着越来越重要的角色,随着软件功能日益的复杂化和对系统性能要求的不断提升,软件的测试显得愈发的重要,它已经成为软件生命周期中必不可少的部分,软件测试是提升软件质量的必要手段。目前在大多数企业内,软件测试仍然主要以手动测试为主,自动化测试为辅。但是大多数自动化的程度不高,脚本与数据,业务三者耦合性太强,需要测试人员花费大量的精力去维护,不但没有提高测试效率,反而增加了测试的负担。为了提高自动化测试的效率,本文设计并实现一个关键字驱动的自动化测试系统,基于RobotFramework框架架构为平台的自动测试系统,实现界面驱动与非界面驱动相结合,所以本论文的研究内容如下:研究RobotFramework框架的系统架构,启动方式,相关语法的用法,测试流程,测试文件结构,从而设计测试用例来实现自动化测试。由于RobotFramework框架是基于python语言编写的,驱动关键字需要研究python技术。为了实现非界面层的驱动,需要在RobotFramework框架标准库和python基础模块上进行脚本开发,从而实现比如远程登录,上传文件等非界面操作的功能。研究自动化功能测试工具TestPartner,并利用该工具来录制/回放软件界面操作功能,并优化脚本。同时为了驱动界面操作的脚本,需要利用脚本语言设计和实现驱动的算法。最后利用该自动化测试系统对TD-LTE基站软件的功能方面进行自动化测试的实施,包括测试操作步骤的描述,用例的设计和实现,运行结果报表分析等,总结该自动化测试系统在应用方面的优点,以及不足之处等待改进。关键词:自动化测试,RobotFramework,python 浙江大学硕士学位论文Abstract错误!文档中没有指定样式的文字。PAGE4word文档可自由复制编辑基于Robot框架的关键字驱动的自动化测试系统的设计与实现自动化测试系统架构及功能论文所设计和开发的自动化测试系统是基于RobotFramework框架的关键字驱动为核心的系统[19],研发该自动化测试系统主要是用于移动通信网络中基站软件的自动化测试,并在实践中得到了应用,该系统的结构如图3.1所示:图3.SEQ图3.\*ARABIC1自动化测试系统架构RobotFramework框架是本自动化测试系统的平台,标准库是RobotFramework以及python自带的基础模块以及相关函数,主要用来被调用,实现相关功能。关键字扩展库,主要用来实现相关的功能,这里包括登陆远程主机,上传文件,执行远程操作,断电上电,调用第三方工具等等关键字的具体实现,可以引用标准库中已经定义好的相关模块和函数。这也是本论文开发自动化测试系的重点。测试文件,本文设计的测试文件是HTML格式,当执行自动化测试时,测试文件中的关键字通过调用关键字扩展库(KeywordsLibraries)来完成相关功能的实现。主要功能模块自动化测试系统包括以下几部分:一、关键字库命令驱动,进行关键字的具体实施细节,从而完成相应的功能。二、界面脚本驱动,通过驱动算法来执行界面脚本,完成对界面的操作。三、系统启动,该自动化测试系统是基于RobotFramework平台的,输入相关命令可以自动执行。四、生成日志。在后面的3.2和3.3这两小节将对关键字库命令驱动,界面脚本驱动这两大功能模块进行具体的设计与实现。RationalRobot介绍RobotFramework[21]是一款用python语言编写的关键字驱动的自动化测试框架,由诺基亚西门子通信开发和支持的开源软件。Robot是基于表驱动的核心思想[18],预先定义好关键字(关键字表示要执行的动作),然后根据关键字来执行相应的行为。RobotFramework具有如下的特点:一、测试用例可以用HTML格式保存,也可以保存文本文件。二、测试用例使用标签分类,并且测试报告和日志是HTML格式的,方便阅读。三、测试人员可以利用现有的关键字编写更高级的关键字。四、用户可以创建自定义的基于Python或者Java的测试库在库函数API的基础上。RobotFramework框架四层体系结构[19],如图3.2所示,可大大提高它的可扩展性。图3.SEQ图3.\*ARABIC2Robot四层架构图RobotFramework的源代码是用python编写的,在运行之前,必须按照python环境。测试库:一般包括两部分,测试框架的内建库Built-inLibrary和扩展库ExtendLibrary。测试数据文件,它的表现形式是表格,一般是超文本标记语言(HTML)或者制表符分隔值(TSV)格式来展现,必须通过命令行的形式执行测试文件,当运行时RobotFramework一般通过文件扩展名来选择相应的TestData解释器来执行测试用例。而测试文件的格式,有下面几部分构成:设置部分,主要用于引入相关的资源文件,使用标签为测试用例添加标记,还有就是设置测试用例或者测试套件执行前或者执行之后的动作,这样做的目的在于可以初始化环境变量,在测试执行失败的时候能够继续执行下一个测试用例或者恢复环境。变量部分,主要用来定义变量。用例部分,组合关键词创建测试用例,关键词主要来源内置关键词,导入的测试库的库关键词和使用同样表格语法创建的用户关键词这三种。测试的执行会产生相应的测试报告,有个三部分构成。测试结果概述:report.html,测试结果细节:log.html,和output.xml,容易与其他工具集成的测试结果。TestTools指的是相关的分析工具,主要用来帮助测试和对测试结果的进行分析的工具,一般常见的有网络封包分析工具Wireshark。最底层SystemUnderTest指的是被测的系统,被测系统跟核心框架没有直接的关联,它们之间通过测试库(TestLibraries)进行交互。由于RobotFramework是基于python语言开发的,以及关键字驱动的实现都需要python语言来编程实现,所以下一小节对python技术进行介绍。Python技术脚本语言也被成为动态语言,用于控制程序,脚本使用文本保存,通常在被调用时编译或者解释。脚本语言主要有Perl,Shell,Python,Ruby等等,其中Shell是应用于Linux,UNIX操作平台的脚本语言,是用户与系统交互的桥梁。而Python和Ruby是目前应用的最多的脚本语言。Python由GuidovanRossum创建,Python是一种解释型的、面向对象的、动态类型的脚本语言[22]。Python语法简单清晰,易读懂而且容易维护,而且拥有非常丰富的类库,深受程序员的欢迎和喜爱。Python运行速度较快,底层使用C语言实现,大部分标准库和第三方库也是通过C来实现。当你运用Python语言编写程序的时候根本无需关注底层的实现细节,因为它是开源的,因此它可以被移植到包括Linux、Windows等等这些平台上[23]。当程序被执行时,python解释器把.py文件中的源代码编译成字节码的中间形式,然后执行编译后的字节码文件通过虚拟机,这种机制跟Java相似,并不需要被编译成一个计算机识别的二进制代码。所以Python看起来更加简单,便于移植。Python支持面向过程的同时还支持面向对象的编程,并有一个非常大的标准库,使用标准库可以处理多种应用,如单元测试,数据库等。Python使用中通过强制缩进的形式令代码看起来清晰简洁,使代码具有更好的可读性。当然它也拥有自身的缺陷。例如,一个单独的语句,它采用缩进的方式会带来一些麻烦,有时与tab和空格混合会导致错误,但错误是很难分开。TestPartner介绍TestPartner[24]是一款Compuware开发的工具,主要用来进行自动化功能测试。它集合了VBA的功能,供测试人员调用来具体的测试。用户可以通过可视化脚本,自动向导来完成重复测试,也可以利用可视化导航器生成测试用例,非常的简便,对于初学者来说容易上手。测试可以显示为树状结构,方便用户观察测试的路径,TestPartner架构如图3.3所示。图3.SEQ图3.\*ARABIC3TestPartner架构图其工作流程如下:一、制定测试计划,由于TestPartner主要用于完成软件的功能测试,所以在测试计划阶段,首先要分析被测应用软件的特点是否适用于进行自动化测试,通常TestPartner工具用于软件界面相对稳定的回归测试中,通过适当的分析来确定特征点进行测试。二、创建脚本,当测试人员对被测软件进行功能操作的时候,TestPartner借着自动录制机制将详细描述每个步骤的操作的记录,并自动生成测试脚本。三、增强的脚本,完成脚本录制后,测试人员可以增加检查点,来验证软件的功能是正确的,也可以将固定的参数替换成变量来代替。四、运行测试,对修改的脚本运行,反复的调试直到脚本能够完成测试计划要求的功能为止。五、分析测试,系统会自动生成一个详细的测试结果完成的报告。TestPartner的脚本语言是VBA编写[23],简单易懂,通过录制TestPartner可以捕获用户的所有行为,包括点击鼠标,输入数据等等并生成对应的脚本。图3.4中展示的是录制的脚本包括cell_block,logon_sm等等。图3.SEQ图3.\*ARABIC4TestPartner工程图图3.SEQ图3.\*ARABIC5TestPartner脚本代码在录制好的脚本中含有固定的数值,通过编辑脚本,使得变量参数化。如图3.5所示对录制脚本进行编辑。通过命令行的形式来执行测试用例如图3.6:执行如下的命令"C:\ProgramFiles\Compuware\TestPartner\TP.exe"-dTest-in-a-Box-uAdmin-v-padmin-rCommon-sCaseName图3.SEQ图3.\*ARABIC6执行用例通过自动化开发和测试脚本执行,Testparnter帮助测试人员和质量管理人员更有效地开发测试,从而使软件更早的上线运行。TestPartner的缺点在于无法实现多个相对独立脚本的连续自动执行,而且数据与数据耦合性太高,需要进行脚本优化工作,否则脚本的重复使用率不高。关键字驱动的设计与实现关键字驱动[25]:利用可以被RobotFramework框架识别的python语言对标准库/python自带的模块或者函数进行二次封装生成类和函数,从而实现自动化测试系统的功能,比如连接远程主机,执行远程命令,上传文件,断电上电,连接TM500,操作第三方工具等等,下面主要设计与实现在自动化测试应用中比较常见的几种关键字。远程连接的关键字的设计与实现连接远程主机是使用最为频繁的命令,在自动化执行过程中需要不断的切换主机来完成相应的操作。通常登陆Linux系统或者Windows系统的命令封装在Telnet.py中。关键字connecttohost,用于登陆远程主机,通常默认使用Telnet方式连接主机。登陆远程主机,必须输入有效的参数,其中包括host主机名,port端口号,默认使用23。user,passwd:用户面和密码,默认是mpt默认为空,timeout超时时间,设置超时为120秒。输出信息:主机连接成功的状态。关键字connecttohost实现思路如下:defconnect_to_host(self,host,port=23,user="public",passwd="public", prompt="",timeout="120sec"):"""Thiskeywordopensatelnetconnectiontoaremotehostandlogsin."""判断prompt值是否等于None或者为空ifprompt==Noneorprompt=="":重新赋值给变量mypromptelse:把prompt赋值给mypromptif用户名为空:prompt非空时,得到Telnet主机的返回值conn=TelnetConnection(host,port,myprompt,timeout,"CR")else:prompt为空时,得到Telnet主机的返回值conn=TelnetConnection(host,port,"",timeout,"CR")if用户名非空:返回conn.login登陆信息给retelse:返回conn.login登陆信息给ret当返回的信息中含有"Microsoft",登陆的为Windowsifret.find("Microsoft")>=0:Windowselifret.find("[%s@"%user)>=0:Linuxelifret.find("openSUSE")>=0:Linuxelifret.find("FlexiTransportModule")>=0:Linuxelse:表示登陆到某设备上self._telnet_connections[conn]="Device"returnconn执行远程命令的关键字的设计与实现关键字executeshellcommand通常用于执行远程命令操作,在测试用例用例中也是使用比较多的一个关键字。executeshellcommand需要输入的参数:command为需要执行的命令,timeout超时时间设置为0秒,username用户名为root,password密码为空。输出信息:返回命令执行后的结果。关键字executeshellcommand实现思路如下:defexecute_shell_command_without_check(self,command,timeout="0",password="",username="root"):登陆linuxifself._telnet_connections[self._current]=="Linux"andpassword!=""andusername!="root":写入当前登陆的用户名self._current.write("su"+username)设置为新的提示符赋给origpromptorigprompt=self._current.set_prompt("Password:")读取输出结果直到为Noneself._current.read_until_prompt(None)self._current.write(password)将密码写入origprompt.append("%s@.*[\$|\#]"%username)再次读取输出结果直到提示为空将'echo$?'写入下一行中self._current.set_prompt(origprompt)self._current.read_until_prompt()self._current.write('echo$?')将读取的输出结果通过空格进行行分隔return_linesreturn_lines=self._current.read_until_prompt().splitlines()try:return_code=int(return_lines[0])exceptValueError:return_code=int(return_lines[1])ifreturn_code!=0:提示登陆失败raiseExecutionFailed,'CANNOTtochangeuser%swithpassword:%s.'%(username,password)self._current.write(command)try:执行命令,返回执行的结果exceptAssertionError,e:失败信息上传文件的关键字的设计与实现FileZilla,一个FTP客户端软件而且它属于开源不收费的软件,有客户端版本和服务器版本。客户端版本可以运行在Linux,window,MacOS上运行,该服务器可以在window系统中运行。基于该工具的关键字,主要用于上传和下载文件,它的实现封装在FTP.py文件中。下面展示的是上传文件的具体实现过程。设计思想:首先定义一个FTP_Client类,并在类中定义上传单个文件的函数和退出ftp服务器的函数。在类外面自定义一个ftp_upload函数调用类FTP_Client中的函数即可实现上传文件到ftp服务器的功能。具体实现的代码如下:classFTP_Client():def__init__(self,host,port,username,password):self.ftp=FTP()连接FTP服务器,输入参数(主机地址和端口号)try:self.ftp.connect(host,int(port))exceptException,e:连接异常,打印并输出异常信息try:进行登陆验证self.ftp.login(username,password)exceptException,e:登陆异常,输出异常信息printself.ftp.getwelcome()定义一个函数defftp_upload_single_file(self,local_file_dir,host_file_name,host_dir):try:登陆成功后,切换到host_dir目录self.ftp.cwd(host_dir)exceptException,e:切换到该目录失败,异常设置缓冲大小为10240bufsize=10240以二进制读模式('rb')打开local_file_dir,并返回结果file_handlertry:file_handler=open(local_file_dir,'rb')print"ftpopenlocalfile'%s'OK."%host_direxceptException,e:失败ftp_cmd='STOR'+host_file_nametry:进行文件上传self.ftp.storbinary(ftp_cmd,file_handler,bufsize)exceptException,e:异常关闭文件file_handler.close()类中定义退出FTP服务器函数defftp_quit(self):self.ftp.quit()关键字的实现过程只需要调用上面定义好的类中的函数即可。输入参数说明:host代表主机的地址,port即是端口号。实现代码如下:defftp_upload(host,port,username,password,local_file_dir,host_file_name,host_dir):"""Thiskeyworduseftpuploadfiletoftpserver."""cftp=FTP_Client(host,port,username,password)try:cftp.ftp_upload_single_file(local_file_dir,host_file_name,host_dir)finally:cftp.ftp_quit()执行第三方工具的关键字的设计与实现第三方工具主要用于辅助测试并对结果进行分析,这里主要介绍wireshark,wireshark是一个网络数据包分析软件,主要功能是拦截网络数据包并显示最详细的可能的网络数据包数据。关键字starttshark以命令行形式驱动wireshark软件,输出执行后的结果,输入参数说明:file_dir代表文件目录。interface表示以太网接口,默认为'eth0'。duration表示时间间隔。设计思想如下:分为两种连接方式,一种是telnet连接方式,另外是ssh。在两种不同连接方式下分别对Windows和Linux执行抓包命令。defstart_tshark(file_dir,interface='eth0',duration='',filte=None,login_type='telnet'):"""Thiskeywordstartwiresharkcaptureandsavethefileastextfile-new"""if'telnet'==login_type:connection_type=connections.get_current_connection_type()if时间间隔等于空'':option=''else:option='-aduration:%s'%durationif过滤条件为空:filte='ip'else:passif连接类型connection_type是Windows:command='psexec-i-dcmd/c\"tshark-i%s%s-R\"%s\"-V>%s\"'%(interface,option,filte,file_dir)ret=connections.execute_shell_command_without_check(command)elif连接类型connection_type是Linux或者Device:command='nohuptshark-i%s%s-R\"%s\"-V>%s&'%(interface,option,filte,file_dir)ret=connections.execute_shell_command_without_check(command)else:抛出异常,未知的类型elif'ssh'==login_type:ifduration=='':option=''else:option='-aduration:%s'%durationiffilte==None:filte='ip'else:passcommand='nohuptshark-i%s%s-R\"%s\"-V>%s&'%(interface,option,filte,file_dir)ret=connections.execute_ssh_command_without_check(command)通过对关键字的开发来操作相应的命令,包括上传文件,登陆远程主机,执行远程命令,以及对第三方工具的控制和操作,这里不再叙述其他关键字的驱动实现。界面驱动层的设计与实现为了实现对界面脚本[26]进行驱动的功能,需要利用python脚本开发驱动GUI算法。驱动界面脚本的分为两部分,实现的算法如下:第一部分,调用这个关键字可以为录制好的脚本输入需要的参数,这样做可以提高脚本利用率。设计思路如下:检索parameters的类型,一般的格式为name=value,将参数利用"="进行分割成数组类型,最后将name与value用"="连接起来赋给输入的参数parameter,并写入文件。defwrite_parameters_to_file_for_tp(parameters,file_path="C:\\parameters_tp.txt"):""hiskeywordwillremovethespecifyfileifitexist,andwriteparameters""file_path文件,如果存在删除ifos.path.exists(file_path):os.remove(file_path)通过追加的方式openfile_handle=open(file_path,"a")try:

判断参数parameters是否是list类型ifisinstance(parameters,list):forparameterinparameters:将每行参数用"="分隔成数组类型,结果赋给temptmp=parameter.split('=')name=tmp[0]value=tmp[1]len_tmp=len(tmp)如果长度大于2,value重新赋值if2<len_tmp:foriinxrange(len_tmp-2):value=value+"="+tmp[i+2]查询name中是否有空格,如果有将name中空格用"_"换后重新赋给nameifre.search('',name):name=name.replace('','_')将name与value用"="连接起来赋给输入的参数parameter,将获取的新参数parameter写入文件对象file_object并换行parameter='='.join([name,value])file_handle.write(parameter+"\n")elifparameters:操作同上面一样关闭文件对象file_handle.close()只要调用上述脚本就可以为录制的脚本输入其所需要的参数。第二部分,执行脚本,只需要输入录制好的脚本名称即可。实现算法如下:defrun_testpartner(script_name,TEST_LOG_DIRECTORY,sw_release=""):脚本转为小写字母script_name=script_name.lower()检索脚本是否存在空格ifre.search("\s",script_name):如果有空格,用"_"代替script_name=re.sub("\s+","_",script_name)执行其他相关操作,并读出结果执行脚本命令赋给一个命令变量cmdtestpartner_cmd="\"c:\ProgramFiles\MicroFocus\TestPartner\TP.exe\"-d\testpartner_lib_%s-uAdmin-v-padmin-rcommon-s%s"%(sw_release.lower(),script_name)ret=os.popen(testpartner_cmd).read()printret如果返回有ERROR或者Failed,则执行失败if('Failed'inret)or('ERROR'inret)or('error'inret):raiseException,"Testpartnerscript'%s'runfailed"%script_nameelse:returnTrue通过调用关键字runtestpartner,输入需要执行的脚本名称,如果脚本中有参数需要输入,只要调用上面的输入参数的关键字即可,最后就可以运行脚本来执行界面操作的动作。比如说登陆软件界面的关键字实现方式,其中logon_sm是录制并优化过的脚本名称。defsitemanager_logon():ret=run_testpartner('logon_sm')returnret启动系统命令设计的自动化测试系统是在RobotFramework框架上完成,所以执行以下命令行就可以执行自动化测试流程。命令形式:pybot–V"D:xxx.py""D:testcase.html"。说明:pybot是Robot在Python环境下的解释器,大写V表示引入变量文件的完全路径,最后是测试用例的文件名。本章小结本章详细介绍了自动化测试系统的设计与实现,包括GUI界面驱动和关键字驱动以及系统启动命令,主要用于下一章自动化测试系统的应用。PAGE4word文档可自由复制编辑自动化测试系统在基站软件测试中的应用LTE系统概述在使用蜂窝网络的传统的通信系统中,诸如1G,主要采用的技术是模拟和频分多址(FDMA)技术。到2G通信系统后,主要是GSM,采用了数字技术,使用FDM,TDM,CDMA等,供给了数字化式的语音业务,以及低速率的一般数据业务。当前3G时代的引领,3G带来各种服务,其中包括语音业务、高速率传输及宽带多媒体,满足了人们各种广泛的需求。目前3G标准有WCDMA、CDMA2000、TD-SCDMA等等,它的室内速率可以达到2Mbps,384kbps的户外速度。两大通信系统2G/3G移动蜂窝网络,如GSM、UMTS等已经深入到了大家的工作和生活里。虽然3G在通信系统历史上迈出了一大步,但是3G系统仍然存在种种缺陷,例如,用户面业务的时延超过30毫秒,资源分配时间超过了100毫秒,处理时间过长不能高效的处理业务,带来了极大的不便。而且3G终端的复杂度比较高,因此导致成本也高,接收机的性能也不太好,影响到了业务处理的性能。所以3GPP组织启动了长期演进项目(LongTermEvolution,LTE)[27],它要求以OFDM/FDMA为核心技术,具备100Mb/s的数据下载能力,已经得到了许多世界领先的运营商和设备制造商的支持,并决定采用LTE技术。目前全球移动通信产业对其充满信心,希望这种新型的技术提高移动通信行业的可持续发展潜力。LTE对比3G优势3GPP通过对系统的性能方面,业务支撑方面,系统的架构以及网络部署方面来具体的描述LTE:一、较高的传输速率,下行传输速率要求达到100Mbps,而上行链路传输要实现50Mbps。二、提高频谱资源的利用率,上行链路的数值为2.5(bit/s)/Hz,而下行链路为5(bit/s)/Hz。三、利用QoS来对系统的业务进行分级,用于保证那些实时性很强的业务的服务质量。四、灵活的系统部署,可以支持多种系统带宽分配。五、网络时延的降低,要求用户面(U-plan)时延小于五毫秒,而控制面(C-plan)时延小于一百毫秒。六、在基站不变化的前提下提高小区边界点的传输比特速率,且拥有向下兼容的功能。因此,与3G相比,LTE的优势概括起来就是高数据速率,低网络时延,分组传送,广覆盖面积,以及支持向下兼容。LTE网络架构LTE使用扁平化的无线接入网络结构,RNC节点被取代,从而简化设计,实现全网络中每个节点之间的路由和互联网一样,因此,网络结构趋于宽带网络结构[28]。图4.SEQ图4.\*ARABIC1EPS网络架构图LTE趋于无线接入网的演进(E-UTRAN),而系统架构演进(SAE)是致力于分组网络的演进(核心网EPC),两者构成了演进型分组系统(EPS)[28],网络体系结构如图4.1所示。eNodeB通过X2接口连接,构成E-UTRAN(接入网),eNodeB通过S1接口与EPC(CN)连接,UE通过LTE-Uu接口与eNodeB连接。eNB,演进NodeB,EUTRAN中定义的唯一一个网元,代替了3G网络中的NodeB和RNC组合。一个eNB负责处理数个cell小区,功能描述如下:小区间无线资源管理(RRM):切换,小区间负载平衡。无线承载控制:无线资源的建立,修改和释放。连接管理控制:UE状态管理,UE—MME连接。eNB测试收集和分析。对动态资源进行分配以及调度,UE附着时对移动性管理实体的选择,IP包头压缩和解压缩,等等功能。S—GW,P—GW,MME这三部分组成了核心网(EPC)。S—GW,也称作服务SAE网关,功能如下:S—GW负责数据的路由和传输,以及支持合法监听。P—GW,或者PDNSAE网关,主要功能:它负责为UE分配IP地址,计费和合法监听,针对每个用户的数据包进行分组过滤。MME称为移动性管理实体,具体功能如下:移动性管理实体负责对UE在空闲模式的定位,传呼过程,负责对信令进行处理,通过与HSS交互来验证用户,为用户分配一个临时ID,同时支持拦截,监听。基站为了实现扁平的网络结构,使用一个单一的eNodeB,通常也称为做基站或BTS。BTS包括射频拉远单元(RRU),基带处理单元(BBU)和天线。其中射频拉远单元(RRU)用来收发信号的,并进行光电转换。基带单元(BBU):它的作用用于对基带进行处理,包括编码,调制和扩频等等,还有就是监控eNodeB状态,上报出现的警告信息。BBU和RRU使用光纤相连,一个BBU可以对数个RRU支持,而RRU与天线之间使用馈线连接。基站的软件测试一般有基本功能测试,外部设备跟基站之间的接口测试,操作维护测试这几类。基站主要是商业用途,如此操作维护系统(视觉图形用户界面和改进操作手册)是必不可少的。一般接口主要用于UE,基站,核心网它们之间信息的传递,同时建立无线接入承载,并对用户上下文进行处理。同时也要对基站间的接口进行测试,以及基站与核心网的接口测试。基本功能测试主要有业务流程测试,相关各个层与层之间的测试以及性能测试等等。性能测试又包含系统吞吐量测试和用户面时延,控制面时延等等这些的测试。在本文中,自动化测试系统的研究实现主要用于自动化测试基站的软件功能。自动化测试系统的实施背景:系统在单位时间内处理的数据流量即是吞吐量,吞吐量是系统性能的一个重要指标。本章节设计的测试用例用来验证一个Cell小区内单UE的FTPthroughput。测试环境搭建在进行自动化测试实施之前,需要对系统的硬件环境进行配置,系统的测试环境如图4.2所示。其中PowerBreaker主要用来控制BTS和TM500的上电断电操作。PC主要分为BTSControlPC和TM500ControlPC,分别安装控制软件SiteManager(BTS控制软件)和TMA(连接TM500)。为了测试基站,UE可以是采用仿真设备,该项目中使用Aeroflex公司的TM500(UE仿真器)移动测试系统,TM500已经得到了行业内的认可,TM500具备移动终端性能高级测试功能。图4.SEQ图4.\*ARABIC2自动化测试系统环境其中程控衰减器(图4.2中的PA)通过射频线连接到RRU模块和TM500之间,主要用于衰减信号,模拟Uu接口上的无线衰减特性,可以通过控制模块来控制PA,从而控制信号的强度。开发环境如下:操作系统:Linux、WindowsXP开发工具:RobotFramework、TestPartner、Python、KompoZer、wxPython第三方工具:Wireshark、Au2测试用例设计该方案的设计主要是为了验证FTPthroughput在某小区内能否达到一定的值。步骤如下:一、需求分析,详细审阅测试用例的每一个步骤,使用自动化测试工具完成图形界面的功能测试,利用python编写关键字,合理设计用例脚本,要使脚本能够完成计划的要求,还要简洁易懂,以便于后期的维护。二、测试用例步骤操作步骤描述如下(包括预期结果):Step1:初始化连接到BTSControlPC,显示初始化连接成功。Step2:上传BTS参数配置文件,上传文件成功。Step3:重启BTS,重启完成。 Step4:初始化连接TM500,初始化连接成功。Step5:UEattach,attachsuccess。Step6:上行ThroughputStep7:检测抓取TM500中上行Throughput日志Step8:下行ThroughputStep9:检测抓取TM500中下行Throughput日志Step10:上行ThroughputStep11:断开连接,断开成功。上述操作中,登陆基站,重启基站是运用测试工具TestPartner录制测试脚本完成的,而其他连接,断开,做上下行业务等等都是利用关键字实现。结果上述测试用例操作步骤的描述,下一节将进行测试用例的具体实现。测试用例实现RobotFramework中测试文件是一个表格形式,可以是超文本标记语言(HTML),制表符分割值(TSV),纯文字或者其他格式[8]。RobotFramework利用解释器(对测试文件扩展名进行识别从而选择对应的测试数据解释器)来运行,这里我们选择最为简洁的HTML格式来进行测试用例。一般来说,测试文件主要有四部分构成,设置表格,变量表格,测试用例表格,关键字表格。而其中,测试用例主要是由每一步具体操作对应的关键字组成。关键字大致可以从三处地方引入得到,第一种是从测试函数库引入,第二种引入从资源文件中得到,第三种通过用户自定义关键字中得到。测试用例表具体格式:第一列表示测试用例名称,测试用例是从用例名称开始,直到下一个用例结束。需要注意的是,表头部分和测试用例之间不能写入其他无关的文字,否则会导致执行失败。第二列主要是写入关键字名称,表示需要操作的步骤,但是也存在一种特殊情况,可以写入变量,用来表示关键字执行结果的返回值,需要注意的是,当存在一个或多个变量来对关键字执行结果的返回值进行接收时,关键字一定要紧紧跟在变量名之后,而一般关键字后的列都用来表示该关键字所带的参数,理论上对参数个数不做限制。设置表格设计与实现设置表格(Settingtable)包括了以下几部分,下面将结合本测试用例进行具体的说明。[Documentation]:对相应的测试用例进行文档的说明和补充。文本可以显示在命令行输出,和测试结果报告中。如果文字描述太长,可以把它拆开分到每一个单元格中,文本中间使用空格来相连,也可以用超文本标记语言格式或者变量的形式,这样文档描述说明变得更加具体,易于相关人员理解。[Resource]:用来引入资源文件。本测试文件中主要引入两个资源文件,如表4.1所示,通常资源文件主要是包含一些变量的设置和组合关键字的调用来满足测试用例的设计。[Tags]:用于标记测试用例,通过运用标签来分类有助于不同测试用例之间的协调和管理,它是一个简单但功能强大的分类机制来区分用例。标签可以在测试执行结果的报告或者详细日志输出中显示,主要用途是用来统计测试用例,其中包括总共运行的测试用例、有多少测试用例通过的、执行失败的测试用例都可以利用标签来实现。还有可以通过标签来对需要执行的测试用例进行筛选,标签一般分为如下两类。ForceTags:表示强制标签,如果在设置表中设置了强制标签的话,测试文件中的测试用例都可以得到该标签。DefaultTags:表示默认标签,如果在设置表格这一栏中设置了默认标签的话,那些没有标签设置的测试用例,会使用该默认标签。[Setup]和[Teardown]:用来表示测试的创建和销毁。这里主要有四个选项,SuiteSetup和SuiteTeardown,TestSetup和TestTeardown。SuiteSetup表示比测试套件里的测试用例先执行,SuiteTeardown表示测试套件中的用例执行完之后再执行。TestSetup表示会早于测试用例之前来执行,一般可以用来初始化。TestTeardown表示测试用例执行完后进行恢复环境的操作,也可以在关键字执行失败后执行,这样当某一个测试用例执行失败后还可以继续执行下一个测试用例而不受影响。[Timeout]:用于设置测试用例超时。本测试用例中引入了两个资源文件BtsShell.html和resource.html,在这两个文件中主要提供了自定义的更高级别的关键字供调用。如果需要使用自己实现的库提供的关键词,库必须被启用,可以通过Setting表导入。表4.SEQ表4.\*ARABIC1测试用例setting部分SettingValueValuevalueValueDocumentationTD-LTEI&VCAPResourceBtsShell.htmlResource..${/}..${/}resources${/}CAPresource.htmlForceTagsrelease-RL45SuiteSetupCommonSuiteSetupTestSetupCommonTestSetupTestTeardownDisconnectAllConnectionsSuiteTeardownDisconnectAllHosts表4.1说明:在上述的Settingtable表中,ForceTags是强制使用的来说明目前进行自动化测试的软件版本是RL45。变量表格设计与实现变量表格(Variabletable),顾名思义主要用于定义变量的。RobotFramework有两种类型的变量,标量${SCALAR}和链表@{LIST},注意如果在测试数据中使用不存在的变量,关键字会执行失败。这里对变量没有严格的大小写要求,而空格和下划线都会被忽略。对于全局变量,基本使用所有字母大写,比如${PATH},如果只在当前测试用例或关键字有效的变量则使用小写${myVar}。变量名可以自花括号中间的任意字符,基本使用a-z的字母,数字,下划线和空格。除了用户自定义变量之外,也有一些内置的变量,如${TEMPDIR}和${/}在测试用例设计的过程中往往被使用到。这种变量表格最大的缺点是只能给其赋值字符串或者字符串链表。使用变量文件可以更加灵活的操作。表4.SEQ表4.\*ARABIC2测试用例的variable部分VariableValueValueValueValue${ftp_dir}C:${/}FTP${parameter_list}tddSpecSubfConf:5tddFrameConf:2maxNrSymPdcch:1prachConfIndex:3...dlMimoMode:DynamicOpenLoopMIMOprachFreqOff:10prachCS:12maxNumUeDlDwPTS:0...chBw:10MHz${log_types}DLSCHRXL1THROUGHPUTProtocolLogUEOVERVIEW...DLL1L2CONTROLL1DLRSPOWERULSCHTXCQIREPORTING...ULHARQTXULSRS表4.2说明:在上述Variabletable表格中,变量${ftp_dir}定义了进行上下行发包命令存放在C盘的文件夹FTP中。${parameter_list}则是定义了基本需要配置的参数。${log_types}则表示在进行上下行发包操作的时候TM500日志的类型,其中最为重要的配置参数是L1THROUGHPUT,用于检验上下行的传输速率。用例表格设计与实现这一部分主要是进行测试用例的描述以及关键字的设计,也是进行重点设计与实现的部分。测试用例表格(Testcasetable):第一列是测试用例的名称,测试用例的行中包含测试用例名称开始到下一个测试用例或表格的结束。第二列大多数都是关键字,会有例外,那就是关键字由返回值,那么在第二列可能就是变量名了,然后关键字跟在其后。测试人员可以使用内置的关键词,常见的内置关键词,如获得时间:GetTime和判断是否相等:ShouldBeEqual,这些关键词来自于BuiltIn测试库,要想了解这些内置关键词的具体实现方式可以查阅文档。表4.SEQ表4.\*ARABIC3测试用例的case部分TestCaseActionArgumentArgumentArgumentCPKPI_FTP_Throughput_10M_ULDL2_SSF5_1UE[Tags]_BTSOnAir20M_TxDiv${parameter_list}_UEAttachAnd

ThroughputCheckCAP2_5表4.3说明:首列里表示该case的名称,action表示要执行的关键字,这里有两个用户关键词_BTSOnAir和_UEAttachAndThroughputCheck组成,Argument表示关键词需要输入的参数,原则上不要数量限制。上述用例设计的总体思想:第一步先导入参数,重启基站。第二步骤UE附着进行FTP发包过程,检测上下行的传输速率是否达到要求。每一步骤具体实现的细节在下一小节进行详细的用户关键字的设计与实现,包括相关的语法。关键字表格设计与实现在设计和实现完成测试用例表过后,通常测试用例表格中定义的用户关键字需要在关键字表格里进行具体的实现。这一分部主要详细设计了上述测试用例表格中的两个用户关键字_BTSOnAir和_UEAttachAndThroughputCheck的具体实现过程,在设计实现之前首先对关键字表格进行大致说明。关键字表格(Keywordtable),在这里用户可以组装已有的关键字来创建一个更高级别的关键字,通常这类关键字也叫用户自定义关键字。通常位于第一列的是用户关键字名称,其后的语法跟测试用例相同,用户定义关键词是RobotFramework最有用的特性之一,用户定义关键词可以帮助测试人员在不同的环境下尽可能保持测试可读性和使用恰当的抽象级别。关键字_BTSOnAir的设计思路如下:首先需要初始化连接到BTSControlPC

。执行关键字SwitchHostConnection,该关键字的具体实现已在第三章中讨论过,因为配置参数的文件存放在BTS_CONTROL_PC上,所以需要连接到这台主机上,在测试用例设计中,经常会涉及到对不同主机之间的操作,一定要登陆到对应主机上,不然关键字会执行失败。接着把基站配置参数文件进行上传,而UploadSCFFile这个关键字的实现也已经在第三章分析过。最后重新启动基站,重启操作是通过测试工具Testpartner录制的脚本来完成,然后利用第三章设计的驱动测试工具算法来调用该录制好的脚本,最终实现_BTSOnAir这个步骤。具体实现如下表格4.4:表4.SEQ表4.\*ARABIC4测试用例的keyword部分KeywordActionArgumentArgumentArgument_BTSOnAir[Documentation]Modifyconfigurefile,thenonair.[Arguments]${bts_configured}${parameter_list}InitialConnectionWithBTSControlPC

AndTM500ControlPCSwitchHostConnection${BTS_CONTROL_PC_CONNECTION}UploadSCFFile${bts_configured}${parameter_list}RebootUntilOnAirBaseOnBTSOMModeWithTm500关键字_UEAttachAndThroughputCheck的设计思路如下:首先初始化连接到TM500,执行关键字SwitchHostConnection连接到TM500PC上,该关键字驱动实现已在上一章中描述过,接着选择相应的TM500版本以及开启日志记录功能,并通过驱动算法来调用录制好的脚本来实现界面驱动。接着分别进行_ThroughputUL和_ThroughputDL,注意的事项就是上下行不能同时进行,当执行完_ThroughputUL,必须通过关键字KillProcess来杀掉对应的FTP进程,从而进行_ThroughputDL。执行_CheckULLog进行数据传输速率的检查,这里传输数据检测应用到了第三方工具。最后断开所有连接,不管上述关键字是否执行成功,测试用例都会执行TestTeardown这个操作。整个执行流程的核心代码如下表4.5所示:表4.SEQ表4.\*ARABIC5上行数据流程KeywordActionArgumentArgumentArgument_ThroughputUlSwitchHostConnection${TM500_CONNECTION}Tm500StartLoggingSleep30secTM500LogStopandFetchTM500_UL500_CheckUlLogSwitchHostConnection${TM500_CONTROL_PC_CONNECTION}:For${in}InRange5KillProcessftp.exe其中关键字_ThroughputUl和_CheckUlLog的设计思想如下:执行SwitchHostConnection登陆到对应的PC上,执行关键字ExecuteShellCommandWithoutCheck来运行脚本FTP_UL.bat,_CheckUlLog利用引入的第三方工具对日志中传输速率进行分析。具体实现流程如表4.6所示:表4.SEQ表4.\*ARABIC6ThroughputUl具体实现KeywordActionArgumentArgumentArgument_ThroughputUl[Documentation]UplinkdatatransferSwitchHostConnection${TM500_CONTROL_PC_CONNECTION}ExecuteShellCommandWithoutCheck${ftp_dir}${/}FTP_UL.bat_CheckUlLogSwitchHostConnection${BTS_CONTROL_PC_CONNECTION}A2ALogCheckm${CURDIR}\\SUE_UL.ini配置文件配置项说明在上述测试用例设计完之后,还需要设置两个配置文件SUL_DL.ini和SUL_UL.ini主要用于对ULthroughput和DLthroughput的值进行检验。设计思想:当UE附着成功后,进行FTP发包操作,TM500日志会记录发包速率值,以及算出平均速率并保存在*L1THROUGHPUT*.csv的文件中,配置文件通过读取该文件的平均数值,并判断是否在CHECK_POINT规定的数值中来验证该基站的参数配置是否达到一定的上下行速率要求。配置文件代码如下:[Global]TM500LOG_TAG_1: TM500_DLDOMAIN:Default[Tm500Log_1CP_1]CHECK_TYPE: 0CHECK_FILE: *L1THROUGHPUT*.csvCHECK_POINT: DL-SCHThroughput(Kbps)=41000~44000RATIO:0.8 TM500LOG_TAG_1: TM500_ULDOMAIN:Default[Tm500Log_1CP_1]CHECK_TYPE: 0CHECK_FILE: *L1THROUGHPUT*.csvCHECK_POINT: UL-SCHThroughput(Kbps)=3700~5000RATIO:0.9 测试用例执行上面设计的测试用例是根据业务流程,RobotFramework框架按照顺序调用关键字来执行对于的操作。文件以.html格式保存。在命令行输入相应的命令即可进行自动化测试,命令如下:pybot–VBTSname.py“********.html”其中就引用到了变量文件BTSname,该文件中配置了BTS的常用固定变量,其中变量LOCAL_BTS_VAR中定义如下:'SW_RELEASE':'RL35''BTS_IP':'36''BTS_NAME':'BTS621''BTSLOG_DIR':'C:\\Temp\\BTSLogs\\'……包括软件的版本号,BTS的对应名字以及IP地址,BTS生成日志的对应目录等,再此不一一列举。测试用例执行完毕之后会生成相应的报告,report.html,log.html,output.xml。其中日志文件log.html可以显示执行的详细具体信息,包括测试用例执行的正确还是失败,失败的原因可以清晰的定位到哪一个步骤,有利于调试。测试结果分析测试用例执行结果如下图所示,通常情况我们一般会对一整个测试集进行执行,框架会从顶级的测试集开始执行,然后按照测试集中用例的顺序执行。如果测试用例中的某一个关键词执行失败就会停止执行该测试用例的下面关键字,转而继续执行下一个测试用例。测试执行完毕之后,点击log.html,可以看到图4.3中该测试集总共四十个测试用例,通过了23个,失败了17个,结果一目了然,还可以看到执行的时间。图4.SEQ图4.\*ARABIC3自动化测试报告统计还有标签分类功能,从图4.4可以看出10M的测试用例13个中pass的有10个。图4.SEQ图4.\*ARABIC4自动化测试标签分类这是某个套件中pass的测试用例,图4.5可以清晰的显示该测试用例执行的时间,执行关键字的顺序,可以点击某个关键字进行详细的执行步骤查阅。图4.SEQ图4.\*ARABIC5测试用例通过下面是图4.6中自动化执行过程中fail的测试用例,我们只要顺着红色字体去分析,可以快速的定位到错误的原因,下面列举的是自动化测试中常见的失败以及失败原因的分析。用户关键字有其他用户关键字组合而成,而TM500Disconnect是我们开发的关键字,图4.7中执行失败说明TM500设备连接不成功。图4.SEQ图4.\*ARABIC6测试执行失败图4.SEQ图4.\*ARABIC7TM500连接失败图4.8中执行关键字CheckDlLog是发生失败,通过对图4.9中DLthroughput数据的观测并没有达到配置文件中DLthroughput的范围之内。图4.SEQ图4.\*ARABIC8Au2检测图4.SEQ图4.\*ARABIC9DLThroughput值下面图4.10中关键字执行失败的原因主要对关键字的参数个数配置错误,该关键字RebootUntilOnAirBaseOnBTSOMModeWithTm500要求参数个数在0-3之间,而这里赋给了四个参数,超过了范围所以关键字执行错误。图4.SEQ图4.\*ARABIC10参数溢出自动化测试系统的优势该自动化测试系统比传统的自动化测试具有以下几点的优势:通常传统的自动化测试中,测试人员利用录制完的脚本进行编辑修改后,使用按钮的方式或者命令形式来对脚本进行执行操作,执行完某个脚本后再执行另外一个脚本,中间需要手工操作,比较麻烦,不是完全的自动化。而本自动化测试系统可以实现脚本的连续性自动执行,可以界面测试脚本和非界面操作的关键字自由组合执行,大大提高了自动化的效率。从自动化执行的时间上对比,该自动化测试系统执行时间更快,而且在执行期间保持稳定,不会受到外界干扰,适合回归测试。而且该自动化测试系测试过程简洁,只需要执行命令就可以立马执行,脚本的复用率高,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论