您好, 访客   登录/注册

一种进程间通信的自动化测试技术的实现与应用

来源:用户上传      作者:

  摘要:随着应用系统及软件技术的发展, 手工测试已不能满足软件测试的要求, 软件测试自动化越来越成为一种发展趋势。在自动化测试平台的构建过程中,围绕功能自动化核心问题的解决,提出了基于进程间通信技术实现自动化测试的思路,采用python语言开发相关工具,并经过测试实践,验证了工具良好的应用价值,为功能自动化测试的实现提供了重要的思路和实践参考。
  关键词:进程间通信;接口测试;自动化测试
  中图分类号:TP311.53 文献标识码:A 文章编号:1007-9416(2019)11-0012-04
  0 引言
  随着应用系统与软件技术的飞速发展,软件及系统的产品化测试越来越成为,科研设计、产品化能力的重要方面;持续提高软件产品的质量,开发的效率,提高测试的效率和精准度的需求日益迫切。
  传统手工测试,在测试需求分析、用例设计的基础上,依赖人工执行过程,无法完全解决测试过程重入的问题;同时软件产品开发需解决研发迭代过程与发布周期的矛盾,通过引入自动化测试缩短测试周期,提高测试精准度,达到快速迭代开发,满足发布周期的需求[1]。
  软件测试自动化越来越成为软件的发展趋势。在软件系统产品的自动化测试平台构建的过程中,围绕解决功能自动化测试,提出一种基于进程通信接口进行功能自动化测试的方法,开发了相应的测试工具,并引入实践应用。
  1 自动化测试需求
  1.1 功能自动化测试研究情况
  自动化测试的本质是按照测试设计的输入构建测试条件、注入被测对象,并获取输出进行对比的过程,采用程序的方式实现用例过程的自动驱动与执行,减少手工测试的主观影响,同时解决测试过程重复执行的高效率实现。
  建立自动化测试平台,一般涉及持续集成平台的建立、用例驱动的实现、功能/性能自动化实现,测试工具集成与驱动等问题。
  相关问题的研究发展非常迅猛,而其中,功能自动化实现是核心问题之一。功能自动化的研究更多着力于界面元素多变问题的解决。当前的研究方法包括如下几种:
  (1)通过测试工具实现基于界面的录制与回放:典型方法是录制第一次执行测试用例时的鼠标和键盘操作,需要执行時回放。测试工具主要功能是,记录和回放。(2)基于数据驱动实现测试过程的重入:将测试用到的输入和输出值存储于数据文件中,测试执行时读取并载入,不同测试用例对应各自的数据文件及控制信息。(3)关键字驱动:通过将测试用例抽象为对象、控制、数据,通过封装关键字(特定的测试功能脚本),实现界面控件与测试内部对象名的分离,使测试脚本、测试数据、测试用例的更新和维护更加容易实施。
  目前关键字驱动,越来越成为功能自动化测试的主流技术,通过对应相关产品系统的业务特征,开发基于业务流程的关键字集,实现脚本与用例分离,已经能比较好的解决界面元素变化以及后续开发维护,扩展的问题。
  在此基础上,进一步提高功能测试深度与效果是功能成为功能自动化测试的重要方面。
  1.2 功能自动化测试构建思路
  考察一般的软件产品的模型架构如图1,可以将软件功能分为界面层、功能层、数据层。传统的软件功能测试,通常在最上层构建相关的数据及操作,通过Web界面、本地命令行等形式进行输入,驱动覆盖相关的软件逻辑分支[2]。由于接口、分支的耦合性、关联性,通过界面能够构造的输入是一种受限输入,无法覆盖实现中的所有分支,被测对象分支覆盖不完整,在某些极端、特殊条件下,遗留缺陷,对产品质量形成隐患。
  基于这种情况,我们提出将界面层剥离,将功能层模块的逻辑分支作为测试对象,通过在功能层,直接构造测试输入,覆盖相关分支的方法来进行深入的功能测试。
  采用本地进程间通信接口来进行测试驱动,包括socket、进程间管道、FIFO等接口,设计开发相关测试工具,将所有后台的功能逻辑过程,抽象、统一为一种本地协议的方式进行测试的思路,如图2所示。
  进程间通信功能自动化测试工具主要解决中如下问题:
  (1)通过将测试用例,抽象为本地协议的方式,解决界面元素多变的问题;(2)通过进程间通信接口的方式,实现测试输入构造,提升测试覆盖度及测试深度,覆盖驱动被动对象更多的分支;(3)提供socket通信、管道、共享内存等形式的进程间通信接口,具有灵活、扩展性,适应多种本地功能自动化测试。
  2 主要开发与设计技术
  2.1 Python与自动化
  Python是一种面向对象的脚步语言,具有良好的开发、迭代的效率,通过内嵌应用层编程功能库,支撑灵活的开发和三方扩展。python脚本可实现灵活的上层应用程序通信,支持多种平台和语言,包括c/c++、Java等。Python程序编译器实现,考虑了不同平台的字节码的适应,能够方便的跨平台使用,是当前自动化测试中应用最广的语言之一。进程间通信自动化测试工具采用跨平台python语言作为开发语言进行开发,兼顾了工具应用的适应性,以及工具集成到自动化平台的可实施性。
  2.2 用例驱动
  工具设计基于用例驱动的原理进行。
  用例驱动设计原则包括2个方面:(1)测试人员根据用例模板进行测试用例设计,独立用例操作和用例数据,由测试工具根据用例数据进行接口识别,参数识别和封装,测试人员不用关心测试脚本的调用和执行;(2)工具接口除了实现自身功能之外,还可实现相关的典型业务测试,与其他接口存在上下文关系,可组合成各种业务测试的逻辑,实现较为复杂的功能测试过程。
  2.3 本地协议表示
  将本地测试调用的多种形式,抽象为本地协议表示,提供通用的协议模板定制,实现协议数据包生成,并以此为基础实现工具的主要数据输入、控制输入,输出对比功能。   协议动态测试由通信双方实体(一端用测试工具模拟测试端,一端作为被测端)和控制端构成,测试控制端根据用例控制测试端与被测端实施动态测试业务,并统计结果形成测试报告,模型见图3。
  2.4 进程间通信技术与测试接口
  操作系统的进程间通信方式通常有7种:COM/DCOM、File Mapping文件映射方式、系统消息方式、Pipe管道方式、Mailslots邮件槽、RPC远程过程调用方式和Windows Sockets网络套接字方式[3]。
  Pipe管道是一种以先进先出的方式保存一定数量数据的特殊文件。Pipe通信是高层的、基于内存的通信系统;通信中,由系统提供再执行写操作和读操作的进程之间的同步。在默认情况下,如果一个进程试图写入一个已填满的管道,系统会自动阻塞该进程,直到管道能够接收数据;如果试图读一个空管道,进程会阻塞,直到有可读数据出现为止;如果一个进程以读方式打开一个管道,而没有另外的进程以写方式打开该管道,则同样会造成该进程阻塞。
  网络套接字是一种网络通信、进程间通信的端口抽象标识,是通用操作系统中基本的通信实现技术。套接字的要素包括地址簇、套接字类型、协议,socket在应用程序中串接,通过昂顶与网络驱动建立关系,并基于接口,实现数据的方式。
  在功能测试中,进程间通信,提供了一种有效的测试注入接口,实现测试驱动。从测试驱动的角度,socket套接字、共享内存、是更加理想有效的驱动方式。在本文的xxx工具设计中,重点以socket套接字实现测试接口。后续进一步扩展其他方式的测试驱动。
  2.5 实现与设计
  2.5.1 功能框架
  进程间通讯接口测试需要适应各类进程通讯方式,如socket、共享内存、管道、FIFO等,在通讯方式适应上应有足够的可扩展性。进程间接口交互多为产品实现需要而定义,接口相对简单实用,在协议数据格式方面存在多样性,如XML格式、二进制、十六进制、字符等数据类型,要求工具要能适应不同数据类型,按协议数据要求收发和处理数据。工具功能框图如图4。
  2.5.2 典型流程实现
  主要流程实现实例:
  (1)读取Excel中的用例,获取报文模板,通信流程,报文内容的边界值定义以及验收标准等相关信息;
  (2)读取报文模板;
  head.xml
  body.xml
  (3)构造报文并根据报文内容边界值进行判断,调用函数buildPacket进行报文构造,传入bsid=769表明要修改的字段,构造的报文如下:
  (4)发送报文;调用函数sendPacket进行报文发送。
  (5)接收并处理报文;调用函数recvPacket进行报文接收,然后调用函数writeRecv进行接收报文处理。接收并被处理后的报文如下:
  (6)结果分析;调用函数verify进行对接收报文的分析,传入rst=0表示要检查的字段,检查结果显示如下:
  (7)根据用例中的定义,如果有多个通信交互流程并且满足继续执行的则继续执行;
  (8)完成整流流程,用例执行完毕,回写测试用例执行结果;
  (9)日志记录;
  整个测试过程的日志记录如下:
  测试发送/接收的报文存储如图5。
  3 应用效果
  将本工具应用于xx管理系统本地管理模块的功能测试过程,定制本地管理协议模板,設计测试用例进行功能测试及稳定性测试。基于本地管理协议接口设计用例,提高了用例分支覆盖度,与手工测试阶段相比,测试过程捕获16项严重问题,3项致命缺陷。取得良好的测试效果。与手工测试执行对比图表如图6、表1。
  4 结语
  本文分析当前主流的自动化平台构建的思路和主要思路,研究了功能自动化测试方法,基于提升测试效率和深度,提出了一种基于进程间通信技术实现功能自动化测试的方法,用python语言实现了进程间通信自动化测试工具,该工具在实际项目中,进行了应用,在测试效率的提高和测试成本的降低方面,取得了良好的效果,是自动化平台建设,核心功能自动化测试解决方案的有益探索。
  参考文献
  [1] 吴振宇,顾晓明,李翔.协议可扩展的软件接口测试工具的研究与实现[J].数字技术与应用,2017(12):58-60.
  [2] 王军,孟凡鹏.基于关键字驱动的自动化测试研究与实现[J].计算机工程与设计,2012(9):3653-3655.
  [3] 袁鸿,刘浩,廖文和.进程间通信技术在系统集成中的应用[J].重庆大学学报,2008(4):436-441.
转载注明来源:https://www.xzbu.com/8/view-15115549.htm