APP下载

基于python的软件测试平台研究与应用

2020-12-14文婷何中全

软件导刊 2020年9期
关键词:软件测试网络通信

文婷 何中全

摘  要: 计算机技术的快速发展,使软件在通信、交通、电子以及军工等各个领域都发挥着越来越重要的作用,软件测试作为保障软件质量的重要手段,也引起了各领域广泛的关注。本文针对军用软件测试过程中的测试环境局限性、测试效率低等问题,提出一种基于python的软件测试平台实现方法,实现被测软件与外部对象的网络通信模拟、接口数据自动生成及解析、测试结果自动判定等功能,能够降低对测试环境的依懒性,提高测试效率及充分性,有效保障测试质量。

关键词: 软件测试;python;测试平台;网络通信

中图分类号: TP3    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.09.042

【Abstract】: With the rapid development of computer technology, software is playing an increasingly important role in various fields such as communications, transportation, electronics, and military industry. Software testing is important to ensure software quality, and it has aroused widespread concern in various fields. In order to solve the problems of the limitation of the test environment and the lower test efficiency in the software testing process, this paper proposes a python-based software testing platform implementation method. It has realized functions such as simulation of network communication between software and external objects, automatic generation and analysis of interface data, and automatic determination of test results. The testing platform based on python can reduce dependence on the test environment, improve test efficiency and adequacy, and ensure test quality.

【Key words】: Software test; Python; Testing platform; Network communication

0  引言

随着计算机技术的迅猛发展,在人们的工作、生活等各个领域都承载着各种软件,软件在人们生活、工作中发挥着越来越重要的作用。同样,在我国的军工行业,软件的规模以及覆盖范围也与日俱增[1]。随着软件的广泛应用,软件质量也引起了广泛的关注。软件测试作为控制软件质量的重要手段,也成为当前的研究热点之一[2-5]。在军用软件测试过程中,动态测试通常以人工测试为主,测试效率较低[6]。同时会受测试环境的限制,比如软件测试相关的硬件设备不齐套、技术状态不稳定、异常数据产生困难等限制,进一步降低软件测试效率,甚至影响软件测试效果。为解析测试效率低、测试环境限制等问题,本文提出一种基于python的软件测试平台实现方法,能够模拟外部对象与被测软件间的网络通信,向被测软件提供测试数据,以支撑对被测软件的功能、性能、接口、强度等类型的测试,有效摆脱测试环境的限制。同时与其他外部通信对象模拟软件(如:网络调试工具等)相比[7],本平台除了对外部通信对象的模拟,还能够自动生成测试数据,并支持测试结果自动判定,能够有效提高测试效率,保障测试质量。

1  基于python的软件测试平台概述

python是一种面向对象、解释型的脚本语言,同时也是一种功能强大而完善的通用型语言,其提供了通信、文件操作、文件I/O等许多功能强大的类库,能够支持测试平台的实现[8-9]。本文基于python内置的socket、struct、csv等模塊,构建软件测平台,向用户提供网络通信接口模拟、接口数据生成、接口数据解析、测试结果自动判定相关接口。使用户能够摆脱测试环境的限制,按照测试要求,快速模拟外部对象与被测软件的网络通信,实现对被测软件的功能、性能、接口等类型的测试。该平台由网络通信模块、接口数据生成模块、接口数据解析模块、测试结果自动判定模块四大功能模块组成,如图1所示。各模块主要功能见表1。

2  基于python的软件测试平台实现过程

2.1  网络通信模块

TCP/IP协议是最常见的网络通信协议之一,传输控制协议(TCP)和用户数据报协议(UDP)是TCP/IP协议的核心[10]。python 内置socket模块中提供了大量TCP、UDP通信相关的函数接口可实现TCP、UDP通信[11]。本平台基于socket,实现网络通信模块,向用

(1)TCP通信接口模拟

考虑到被测软件与外部对象进行TCP通信时,可能作为服务端,也可能作为客户端,所以本平台基于python socket,分别构建Tcp_client、Tcp_Server两个类,向用户提供链路初始化、启动链路、连接处理、发送数据等接口,实现被测软件与外部对象的TCP通信模拟。并结合实际场景加入异常保护、线程处理以及接收回调函数机制,以提高程序的稳定性,并支持链路数据同发同收以及多链路收发等复杂测试场景。Tcp_client、Tcp_Server提供的主要接口及描述如下,接口的使用方法如图2所示。

(2)UDP通信接口模拟

经分析,被测软件与外部对象进行UDP通信时,通信方式包括UDP组播以及UDP点对点通信,本平台基于python socket,分别构建UDP_MultiCast、UDP_Unicast两个类,向用户提供链路初始化、接收数据、发送数据等接口,实现被测软件与外部对象的UDP通信模拟。同时,与TCP通信类似,也加入异常保护、线程处理以及接收回调函数机制,提高程序的稳定性,且适应复杂的测试场景。UDP_MultiCast、UDP_Unicast提供的主要接口及其描述如下,接口的使用方法与Tcp_client、Tcp_Server类似,包含数据接收函数定义、链路初始化及启动,发送数据等步骤,此处不再赘述。

a)Init:获取配置的UDP组播、点对点通信初始化信息,创建并绑定socket;

b)SendData:调用sendto函数进行数据发送,并对发送异常进行检测及处理;

c)ReadData:调用recvfrom函数进行数据接收,并对发送异常进行检测及处理。

2.2  接口数据生成模块

为实现按照用户定义的数据结构,快速生成接口数据,本平台基于python内置的csv、struct等模块,实现数据接口文件的读取及处理,并基于数据接口文件中定义的数据结构自动生成数据打包的代码,用户以自动生成的数据打包代码为模板,可快速生成符合测试场景的接口数据。具体的实现流程如图3所示。

2.3  接口数据解析模块

为实现按照用户定义的数据结构,对被测软件输出的接口数据进行解析,本平台基于python内置的csv、struct模块,实现数据接口文件的读取及处理,并按照读取的数据结构完成对被测软件输出的接口数据的解析,具体的实现流程如图4所示。

2.4  测试结果自动判定模块

完成接口数据解析后,本平台可按照人工设置的判断准则,对接口的数据正确性进行检查,并显示检查结果,具体实现流程如下。

3  平台应用及效果

3.1  被测软件概述

选取某军用设备系统控制软件基于本平台开展配置项测试,该系统控制软件主要功能为与各设备建立通信连接(通信方式包括TCP,UDP通信),向各设备发送控制指令,控制各设备完成自检、校准、数据处理等各项任务,并实时接收设备工作状态、处理结果等设备上报数据进行展示,其基本信息如表2所示。

1 系统控制软件 C/C++ Win7-64 TCP、UDP 120

3.2  测试过程概述

基于本平台对被测软件开展配置项测试的流程与基于实装环境的测试流程基本一致,都包含測试需求分析及策划、测试用例设计、测试环境搭建、测试用例执行及测试总结5个阶段,如图6所示。其中测试需求分析及策划、测试用例设计、测试总结阶段的活动二者完全相同,在测试环境搭建、测试用例执行阶段二者有所不同,具体区别在于:

a)测试环境搭建阶段:基于实装的测试需要获取所有与被测软件通信的设备,而基于本平台的测试则不需要提供任何设备,但需编写脚本调用本平台提供的接口模拟与被测软件通信的外部对象以及自动生成测试数据,可大大降低对测试环境依赖性。

b)测试执行阶段:基于实装的测试需要人工解析被测软件输出数据,以及对测试结果进行人工判断,而基于本平台的测试可编写脚本调用相应接口实现被测软件输出数据的自动解析及测试结果自动判定,可提高测试执行效率。

3.3  测试结果及分析

基于本平台可支持对被测软件的功能、接口、性能、强度等类型的测试,相比实装环境,基于本平台可更加便捷、高效的生成正常、异常、边界等各类测试数据,提高测试效率、充分性及测试深度,以发现更多的软件缺陷。对基于本平台的测试与同类型软件在实装环境下的测试结果数据进行比较,可发现:

a)测试用例执行方面:基于实装的测试时会受限于设备状态(如:设备无法产生部分异常数据、设备不齐套),导致部分用例无法执行,用例执行无法达到100%;而基于本平台的测试可支持用户按测试场景构造任何测试数据,测试执行率可达到100%;

b)测试效率方面:基于实装的测试时会受限于设备状态(如:设备状态不稳定或者出现故障),且测试数据准备及测试执行以人工操作为主,测试效率较低;而基于本平台的测试虽然编制测试脚本会占用一定时间,但由于本平台提供数据打包代码自动生成、测试结果自动判定等自动化手段,其测试效率也优于实装测试(测试周期缩短约20%);

c)缺陷发现方面:基于本平台的测试可生成更加丰富的测试数据,提高测试充分性及深度,相比实装测试,能够发现更多的软件问题(软件问题增加约为15%)。

4  结论与展望

本平台基于python内置的socket、csv、struct等模块,实现网络通信接口模拟、接口数据自动生成、接口数据自动解析以及测试结果自动判定功能,能够有效解决软件测试过程中测试效率低、测试环境限制等问题,提高测试效率及质量。但本平台也具有一定局限性,如:本平台目前仅支持对TCP、UDP类型网络通信的模拟,在后续应对通信类型进行拓展。同时,本平台在测试结果自动判定方面仅支持对输出类接口的自动判定,自动化程度较低,在后续也可以进一步优化,提高测试的自动化程度。

参考文献

[1]刘国栋, 王艳, 庞澜, 等. 集成与敏捷开发在军用光电系统软件开发中的应用[J]. 计算机应用与软件, 2020, 37(06): 9-13.

[2]张琪. 大数据背景下软件测试的挑战与展望[J]. 软件, 2018, 39(6): 181-183.

[3]尹榕慧, 冯轶华. 信息软件自动化性能测试方法关键技术研究[J]. 电子世界, 2020(12): 208-209.

[4]薛岩, 姜鑫, 陈坤乔. 指挥信息系统软件测试研究[J]. 工业控制计算机, 2020, 33(06): 25-27.

[5]杨燕, 刘钊, 蔡久涛. 基于探索性测试的软件测试研究与实践[J]. 计算机应用与软件, 2020, 37(06): 29-33.

[6]许禛, 王勇利. 浅谈装备软件测试[J]. 甘肃科技, 2015, 31(14): 11-13.

[7]刘飞. 航空电子系统MIL-STD-1553通信网络接口验证测试[J]. 航空电子技术, 2006(02): 31-37.

[8]Lutz M. Programming Python[M]. 3rd ed. New York, USA:  O'Reilly Press, 2006.

[9]王聪颖. 基于Python的自动化测试框架的分析与设计[D]. 北京邮电大学, 2017: 7-8.

[10]杨小凡. TCP/IP相关协议及其应用[J]. 通讯世界, 2019, 26(01): 27-28.

[11]王丽. 运用Python进行网络编程[J]. 电脑编程技巧与维护, 2010(12): 86-87.

猜你喜欢

软件测试网络通信
基于OBE的软件测试课程教学改革探索
基于网络通信的智能照明系统设计
EXCEL和VBA实现软件测试记录管理
网络通信中信息隐藏技术的应用
基于网络通信的校园智能音箱设计
关于软件测试技术应用与发展趋势研究
谈计算机网络通信常见问题及技术发展
软件测试工程化模型及应用研究