JavaScript API自动化测试方案的管理设计与实现
2016-09-14张令芬
张令芬
(河海大学 商学院,江苏 南京 211000)
JavaScript API自动化测试方案的管理设计与实现
张令芬
(河海大学 商学院,江苏 南京211000)
在持续集成的软件开发过程中,企业管理者需要对每个软件版本的JavaScript API进行自动化测试。基于Robotium框架的测试程序,通过采用捕获被测程序的Logcat信息,之后通过解析Logcat并写入,最终写成方案并测试,在应用程序中,JavaScript API作为连接程序与web页面的桥梁,扩展了内嵌web页面的JavaScript的能力,为web应用带来更好的体验。所以本文使用本方案,测试人员编写了26条测试用例,共测试了26个API,除去用例编写的问题以及一些不适合使用自动化来测试的API,方案的准确性达到100%。结果方案的实施结果证明了本方案是可行的。这为以后的研究奠定了坚实的基础。
应用程序;JavaScript API;自动化测试;接口
在现阶段的测试中,测试人员需要在测试页面上逐一地手动触发每个测试用例,根据返回值来判断功能是否正常。随着API种类的增多,加上版本迭代速度很快,手工测试变的繁琐,浪费了很多人力物力。为代替人工测试,最终实现的工具须能够自动化地完成以下功能:调用API、判断返回值、计算调用耗时、判断用例是否通过、发送邮件。
首先,测试页面通过通用JavaScript对象调用API,回调函数等待接收返回值。返回值获取后,判断返回值是否正确,记录下判断结果与API从调用到获得返回值之间的耗时。所有API测试完成后,将结果统一汇总并发送邮件到API相关责任人。
为实现上述功能,需要用到与相关的一些组件工具和框架。终端设备与PC之间的通信时通过Debug Bridge(ADB)来完成的。自动化测试要想顺利实施则少不了Instrument工具,而Instrument的封装则Robotium来完成,这就大大的方便了测试的进行。
1)ADB;ADB作为一种具有多种用途的命令行工具,它的运作可以借助模拟器实例或连接设备进行通讯。它是一个客户端-服务器程序,包含3个部分:
客户端,它运行在开发机器中。用户通过发出的ADB命令从shell中调用客户端。对于除此之外的工具就像ADT插件和DDMS,也有类似的功能。
服务端,在开发机器上作为后台进程运行。服务端主要功能就是对客户端进行管理和通信。
守护进程,它扮演的主要角色则是作为模拟器后台进程运行。
ADB提供了一系列命令,在测试程序中可以通过命令行的方式调用。
2)Robotium:工具Robotium作为一个自动化测试的框架,它的功能很广泛,可以全面支持混合和原生的应用。Robotium由于自身功能强大,所以可以很容易地编写应用程和黑盒的UI测试。通过借助Robotium,测试的开发人员可以借此编写功能、系统和验收测试的方案,从而实现跨越多个Activity的功能。
由于本工具涉及到测试程序与被测程序之间的数据交换,而基于Robotium的测试程序能够与被测程序处于同一进程中,为测试程序获取被测程序的数据提供了有利条件。
1 系统设计
有关系统架构如图1所示。
图1 系统架构Fig.1 System architecture
控制模块总控其他模块的执行,并监测系统的运行情况,捕获产生的异常。控制模块控制整体流程,从检查安装包的版本、检查测试程序与被测程序的安装情况,到控制测试页面中测试用例的自动执行等。工具在控制模块的控制下完成一系列操作。
web模块包含web页面以及应用程序内嵌的web浏览器。web模块初始化自动化测试用例中用到的JavaScript对象,定义测试用例执行的顺序、时间间隔等参数。与之相关联的测试用例模块是该模块的子模块,测试用例模块包含需要进行测试的API的用例。每个用例包含以下参数:
[用例名][用例功能描述][返回值][测试结果]
API调用耗时由工具自动计算出,不包含在用例中。测试人员需要手动在此模块添加测试用例。
数据统计模块负责获取每个API的用例参数(如上述)、计算API的调用耗时,并判断用例是否通过。最终将获得的数据写入html文件。
邮件发送模块负责发送邮件。
根据系统架构可以梳理出本工具的系统流程。如图2所示。
图2 系统流程Fig.2 System flow
自动化测试启动后,执行程序检查测试程序、被测程序等一系列测试前的准备工作,一切就绪后,测试程序启动。测试程序通过Robotium提供的方法操作被测程序加载测试页面。测试页面是本地的,通过代理的方式载入被测程序的webView中。测试程序在测试页面载入之后开始捕获Logcat,并解析出相应字段,以html的格式写入文件中。测试完毕后,将html以邮件的形式发送给相关人。
1.1测试程序
1.1.1基于Robotium框架的测试程序
Robotium作为一种工具,主要是建立在一个基于应用程序的自动化黑盒基础之上。它使测试用例的编写得到了大大的简化,并且能够编写出黑盒测试程序用例,这种工具使得编写出来的这种应用功能强大、健壮性很强。通过对Robotium应用,测试人员能够编写测试用例,系统测试,验收测试方案等。
新建一个 Test Project,将测试工程指向设置为 this project,建立完成后引入Robotium需要使用的jar包。
由于内置浏览器所在Activity非启动Activity,而应用程序也不支持直接唤起内置浏览器,所以在进行测试的过程中需要通过被测程序的内置浏览器加载测试页面,故采用点击界面元素跳转的方法,借助Robotium实现界面跳转。Robotium中的Solo类提供了一系列对Activity中的界面元素进行操作的方法,通过识别Activity中的控件树来识别指定的元素。
1.1.2捕获被测程序的Logcat信息
测试页面、测试程序、被测程序之间没有相互通信的媒介,测试页面中的测试用例执行后产生的结果如何获取是一个难点。Logcat作为平台提供的系统功能能够解决这一问题。日志系统提作为一种系统,为收集和对系统调试过程中出现的问题进行检查提供了可能。这样一来循环的缓冲区中就收集了各个系统的应用日志,如果需要对这些日志进行查看和过滤则需要借助logcat的命令可以实现这种功能。测试页面中打出的log可以被Logcat收集,而根据单元测试原理,测试程序与被测程序是处于同一进程中的,这为测试程序获取被测程序的Logcat提供了很大便利。
1.1.3解析Logcat并写入
工具自定义的Logcat中测试页面的log元数据结构如下:
#[标记]:[内容]
每条log的数据结构如下:
[时间]#[标记1]:[内容]#[标记2]:[内容]……#[标记n]:[内容]
根据定义的以上结构,在测试程序中解析出相应字段。
在测试程序中将获得的结果写入文件中,格式为html,便于邮件的发送与展示。
1.1.4签名
系统要求所安装的应用程序被相应的开发者签名。它主要是作为识别应用程序的作者和建立应用程序之间的信任关系的一种手段。所以在进行测试的过程中,程序必须保持和被测程序的签名保持一致。
使用如下方法为测试程序签名:
jarsigner-verbose-keystore-release-key.keystore-storepass luozhifan@tencent-2010-keypass luozhifan@tencent-2010-digestalg SHA1-sigalg MD5withRSA-signedjar QQJsApiTest-release-signed.apk QQJsApiTest-release-unsigned.apk releasekey
其中各参数说明如表1。
1.2测试页面
测试页面由被测程序的内置浏览器加载,页面中写入需要测试的API接口的测试用例。当页面加载完成后触发onload方法时,页面自动执行测试用例,将获得的接口返回值以相应的格式打入Logcat,从而被测试程序捕获。
表1 jarsigner参数说明Tab.1 Jarsigner parameter description
2 方案实施
测试人员首先在测试页面下按照格式编写测试用例。然后将终端设备通过数据线与计算机连接。计算机需要安装并配置SDK。执行测试需要配置环境,即HTTP代理。使用HTTP协议调试代理工具fiddler将测试程序中的url对应的返回结果替换为本地的测试页面。测试设备与PC须处于同一无线局域网中。同时将测试设备的Wifi代理配置为所连PC的无线局域网的IP地址。
方案的执行流程如图3所示。
图3 执行流程Fig.3 Implementation process
执行过程的界面如图4所示。
执行程序入口脚本test.py后,测试启动。测试完成后,给出测试信息,“.”代表通过的测试用例,“Time”给出完成测试的时间,单位是“秒”。测试完成后给出测试完成的信息。最后将测试报告导入计算机,并发送邮件。
最终生成并发送的测试报告如图5所示。
图4 界面Fig.4 Interface
图5 测试报告Fig.5 Test Report
报告首部给出本次测试的通过率,包含接口总数、通过接口数、不通过接口数、通过率几项。测试用例详情给出了每个测试用例的用例名称、功能描述、返回值、耗时和是否通过几项。耗时的单位为毫秒,不通过的用例用红色标记显示。
为了验证自动化测试工具返回的耗时是否准确,统计各API单独执行返回的时间,进行比较,结果现实第2、3、4、6、 8、9、10、11、12、13、14、15、16、17个案例此时结果所用的自动化耗时与单独耗时的时间是相同的,可以得出自动化测试所得耗时是很准确的。
3 结 论
使用本方案,测试人员编写了26条测试用例,共测试了26个API,除去用例编写的问题以及一些不适合使用自动化来测试的API,方案的准确性达到100%。
方案的实施结果证明了本方案是可行的。但是在局部的设计上还存在一些不足。主要体现在需要配置较为复杂的测试环境,例如使用代理的方式替换测试页面在实施过程中会较为繁琐。其次,使用界面跳转方式调出内置浏览器,对UI的依赖较强,不具有扩展性。因此,研究优化测试页面的替换策略将是未来需要解决的重要问题。
[1]肖冬平,李玲琳.软件系统中性能测试方案的设计与实现[J].企业技术开发,2014(13):21-22.
[2]蔡增柱.基于移动平台测试相关技术研究[D].广州:华南理工大学,2012.
[3]何伟.基于移动平台的应用软件性能优化技术研究[J].计算机光盘软件与应用,2014(12):87-90,98.
[4]刘博.平台上针对UI控件的测试工具的设计与实现[D].哈尔滨:哈尔滨工业大学,2013.
[5]刘鑫正,陈玉华,黄利,等.智能终端功耗自动化测试系统的研究与设计[J].电子测量技术,2014(9):79-82,97.
[6]祝犇.基于爬虫的Web测试生成系统的设计与实现[J].苏州科技学院学报:自然科学版,2014(3):56-62.
[7]陈玉华,刘鑫正,蔡成亮,等.射频全自动化测试系统的设计与实现[J].电子测量技术,2013(9):9-13.
[8]陈江勇,许力,张辉,等.Web自动化测试框架的设计与实现[J].福建师范大学学报:自然科学版,2013(4):39-45.
JavaScript API management design and implementation of automated testing program
ZHANG Ling-fen
(Hohai University Business School,Nanjing 211000,China)
In the continuous integration of the software development process,companies′s management need automated testing of each software version of JavaScript API.Robotium framework based on test procedures,test procedures by capturing Logcat information Logcat after parsing and writing the final written plan and test the application,JavaScript API with a web page as a connecting bridge program extends the embedded web ability of JavaScript page,for a better experience web application.So this use of the program,testers prepared the 26 test cases were tested 26 API,removing the problem and use cases that are not prepared for the use of automation to test the API,the program reaches 100%accuracy.Results prove that the implementation of this scheme is feasible.This has laid a solid foundation for future research.
applications;JavaScript API;automated testing;interface
TN31
A
1674-6236(2016)02-0035-03
2015-03-11稿件编号:201503155
张令芬(1986—),女,山东滕州人,硕士研究生。研究方向:财务管理。