基于Python的数据定制软件在系统测试中的应用

2022-05-30 08:53李丹霞刘舒婷董欣
中国新通信 2022年12期

李丹霞 刘舒婷 董欣

摘要:系统测试中测试数据构造阶段,人工构造尤其是需要批量构造时过程往往重复且烦琐,遇到需要大量测试数据时工作量更加巨大,为了提升测试效率,开发基于Python语言的数据定制软件(Data Customization Software,DCS)。DCS支持不同系统中多种常见类型的数据定制自动批量生成,并支持写入到结果文件和可视化展示,图形用户界面开发基于wxPython包,界面简洁友好,使用方法简单。可应用于不同类型的系统测试,尤其在性能測试参数化数据准备阶段,极大地提升了相关测试人员的数据准备工作效率。

关键词:Python;wxPython;自动批量;数据定制

一、引言

移动互联网的飞速发展,促进了各类系统或软件的广泛应用,保证系统质量显得尤为重要,系统测试则是质量保证的重要手段。由于系统开发中接口设计场景化、请求参数复杂化、服务端数据动态化[1]等趋势愈发明显,针对不同系统或软件的特点定制相应的数据进行测试,是系统测试中必不可少的重要环节。系统测试在程序执行的方式上可分为人工测试和自动化测试[2],人工测试中手动构造测试数据过程往往重复烦琐,遇到需要大量测试数据时工作量更加巨大,必然会导致测试效率不高,且存在构造有误影响整个系统测试结果的风险。自动化测试将以人驱动的测试行为转化为机器执行[3],节省测试时间和人力成本。若系统测试中数据构造尤其是需要批量构造的手动行为转为数据自动构造按需生成,将大大提高系统测试效率。

为此,本文设计开发了DCS数据定制软件,基于Python语言的DCS支持不同系统中多种常见类型的数据定制自动批量生成,并写入到结果文件中进行可视化展示,图形用户界面开发基于wxPython包,界面简洁友好,使用方法简单。DCS可应用于不同类型的系统测试,尤其是应用于性能测试参数化数据准备阶段,极大地方便了相关测试人员的数据准备工作。利用Pyinstaller将程序打包成可执行程序,打包后的程序可在32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X等主流系统上运行[4],即使没有安装Python相关的依赖包或没有Python环境也可以运行DCS。

二、数据构造方式介绍

测试人员在进行系统功能测试时,往往需要针对接口进行单独测试,每个接口参数的校验规则不尽相同,且不一定有规律,为覆盖不同的处理逻辑,需要构造不同的测试数据。性能测试中,为模拟高并发及高负载场景,也时常需要构造大规模的参数化数据。目前主要可通过手工或者工具两种方式来完成测试数据的构造,以下针对两种不同的数据构造方式进行简要介绍和对比。

(一)手工构造方式

对于性能测试中需要批量构造的数据,传统的手工构造方式一般是利用文本工具比如notepad++对数据进行复制再修改操作,如果要求每条数据都不能重复,简单的复制操作则达不到测试要求,每条逐个修改还存在易失误或遗漏的风险,若涉及千万级别以上的数据则涉及庞大冗余的重复工作,更要耗费大量时间和人力成本。

(二)工具构造方式

通过梳理主流数据类型,归纳系统测试中各项数据类型共同点和不同点,基于Python开发的DCS运行后,输入需要产生的数据相关配置,DCS可根据用户输入配置信息灵活生成指定数目和类型的数据,极大节省构造时间和人力成本,方便测试人员提升系统测试效率。

在性能测试中经常会对某个接口的输入参数进行参数化处理,并发和压力测试等也通常需要一次性输入大批量的数据来验证预期结果,如果涉及查重校验,简单的数据复制不能满足性能测试的要求,此时通过DCS定制并一键生成性能测试所需的大批量不重复数据,即可满足查重校验和数据快速生成的双项要求,令性能测试的参数化准备工作事半功倍。

三、软件代码结构及打包流程

DCS采用开发语言基于Python,适用性高,可跨平台使用和部署。DCS的图形用户界面(GUI)开发基于wxPython,wxPython作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给开发者[5],支持大多数操作系统,具有较高的适配性和可移植性。本文使用Python3.8版本在Eclipse中编写程序,代码目录结构如图1所示。

图1    代码目录结构图

DCS.py是可视化图形界面具体代码实现,Pro_Random.py是具体后台处理逻辑功能实现,result目录存放每次生成指定数据的结果文件,按不同数据类型进行编号和时间组合命名,整体功能架构图如图2所示。

图2    整体功能架构图

DCS开发及打包主要步骤如下:

1.安装开发DCS主要用到的包,对应功能在表1中列出。

2.软件开发,设计DCS可视化界面各种控件,涉及单选框、文本框、按钮等控件,设置按钮响应事件,实现各类型数据灵活定制生成等具体功能。

3.软件打包,使用Pyinstaller相关命令将程序打包成可执行程序,打包后生成的DCS.exe文件可在无Python环境运行。

四、软件实现与应用

(一)软件实现流程

在系统测试中经常涉及大小写字母、特殊字符、数字、标点符号、手机号、邮箱等类型的数据,上面提到这些数据类型根据有无规律可归类为随机数、有序数两大类。大多数情况下有序数是数字加一递增的,大小写字母、特殊字符、数字和标点符号等可归类为随机数,可定长或非定长,手机号根据中国手机号码格式固定为十一位数字,邮箱的后缀也不尽相同,可以设置不同的后缀范围。对于有序数主要针对需要递增的序列数生成,本质也是字符串,可以是字符和数字的组合,也可以是纯数字,有序数根据用户配置有序数开头生成以配置字符串开头的用数字0补齐的递增序列数,长度和开头均可配置,实现纯数字或字符与数字的灵活组合。每种数据对应的配置项如图3所示。

DCS数据定制软件主要功能模块包含:读取配置信息、字符串格式随机数构造、邮箱格式随机数构造、手机号格式随机数构造、字符串有序数构造、生成指定格式数据结果文件,针对不同规范要求各类数据规则,保留扩展接口,支持独立开发新的数据格式,实现功能快速扩展,满足不同业务系统或软件的多种类型的测试数据构造需求。DCS实现的处理流程如图4所示。

1.选择随机数再选择字符类型时,用户只需编辑随机数位数范围和字符范围两项配置,随机位数范围默认是全闭区间,表示非定长随机数,用户只需填写区间最小值和最大值,用逗号隔开即可,也可以是定长,当该配置项只填单独一位数字表示生成随机数长度为填写数字的定长。字符范围默认是数字0至9和英文字母大小写的集合,用户可以根据实际测试需要随意修改范围适配。

2.选择随机数再选择邮箱类型时,邮箱格式@符号前面的字符对应在字符范围配置项编辑,邮箱类型不包括后缀的长度,长度和字符类型一样在位数范围配置项编辑,邮箱后缀范围填写实际需要的邮箱后缀,多个邮箱后缀之间用逗号分隔。

3.选择随机数再选择手机类型时,默认为11位数字,位数范围配置对该类型数据无效,用户可以指定手机号码开头,号码开头不限位数,多个号码开头之间用逗号分隔,手机号码开头后面的数字为随机数字生成,位数为11减去号码开头的位数。

4.选择有序数时,编辑有序数开头和有序数字长度,有序数开头不限位数,可以是任意字符和数字的自由组合,有序数字长度包含有序数开头的位数,生成的有序数加1递增,不足位数的用0自动补齐。

(二)可视化界面设计

为了达到更好的用户交互体验,设计了可视化图形用户界面[6],为用户提供数据定制配置窗口,用户只需根据提示填好需要生成的数据类型,即可一键生成所需数据,操作方便快捷。

运行打包后的可执行程序DCS.exe,软件主界面设计如图5所示。

DCS主界面总体结构分为左右两个面板,左面板主要放置各项数据配置对应控件,提供给用户灵活配置,实现个性化定制数据。右面板主要是展示生成数据结果,默认不可编辑,可以复制,主要作为结果直观展示,同时把生成的数据写入到结果文件方便测试人员后续根据需要灵活处理使用。

DCS初始界面默认选择随机数,用户可自由切换数据类型。个数是指生成定制数据的总量,默认100,用户可以根据实际需要的数量大小灵活调整。

选择随机数时,有序数相关的有序数开头和有序数长度置灰,不可编辑。选择有序数时,只有个数、有序数开头和有序数长度可编辑,其他配置项置灰,不可编辑。根据用户选择动态变化界面需要編辑的配置项,防止用户误会,从根源上减少操作冗余。例如选择随机数字符类型数据生成时,软件执行结果界面如图6所示,可视化定制数据结果的同时会在指定result目录下生成相同定制内容的结果文件,方便测试人员直接使用或进行个性化二次处理。

(三)软件在性能测试中的应用

1.有序数构造的应用

在进行虚拟运营商计费系统的性能测试时,需要构造大批量话单对计费系统进行并发测试和压力测试[7],计费话单每条记录均有查重校验,如果每条记录相同,则不能准确地测试系统的正向计费能力,因此需要对每条话单进行个性处理。

进行计费系统并发测试时,根据计费系统不同类型的话单规范,话单的最后一个字段为查重字段,并且可以是数字格式,保证最后一个字段不同即可。应用DCS可以快速构造符合要求的话单,为了便于测试,将每条话单记录该字段取值设置为递增有序数,每个有序数与行号一一对应,方便测试人员性能测试后对结果进行查看和问题定位。比如对于国际流量话单构造的配置项如图7所示,只需输入单条话单长度和最后一个字段之前的数据,即可自动批量生成指定条数10000条记录的话单,数据定制生成结果在右面板以文本可视化展示,同时在结果目录生成按时间戳命名的结果文件,文件内容和可视化界面展示的定制内容一致。

进行计费系统压力测试时,根据需求文档得知,为了保证话单文件能被正常的接收处理,要求单个文件大小不能超过200M(200 x 1024 x 1024 bytes),否则文件无法处理。所以需要构造一个200M的话单文件验证系统处理能力,按照一条记录133字节计算,向上取整,200M的话单需要构造1576807条记录,对于百万级别的话单记录,每条话单对应的号码需要在计费系统中有对应用户资料,根据客户敏感数据保护要求,不能在测试环境直接使用现有生产系统的真实话单,此时人工构造可行性极低并且会耗费大量时间和人力成本。基于此,应用DCS可以一键生成满足压力测试要求的话单,自动化批量快速构造话单极大地提高了性能测试效率。

2.随机数构造的应用

开展区块链业务数据加解密[8]的不同加解密算法的性能测试中,需要对ECC、AES+ECC两种加密方式进行性能摸底,分别制定三种业务场景模拟生产业务交易,对加解密SDK分别做基线测试[9]、负载测试、并发测试。基于这三种类型的性能测试,均需要构造满足不同要求的待加密数据。

在进行基线测试时,经过前期需求调研,加密数据方式分为两种,单个请求多个字段的加密(所有字段的总大小不超过2KB)、文件加密(一个文件中包含多条记录,一般不超过20K,预估不超过1MB级别),分析设计三个基线场景(单字段加解密、普通文件加解密、超大文件加解密),对于单字段加解密,最大不超过2KB,此场景可通过512B、1KB、2KB的字段加解密处理时间体现性能;对于普通文件加解密,则是10KB、20KB、30KB;对于超大文件加解密则是512KB、1MB。不同系统待加密数据字段要求不同,待测的加解密算法不会对字段做校验,性能测试时需要对待加密的数据做参数化处理,采用构造不同大小的字符串类型的随机数即可满足基线测试需求,应用DCS分别构造512B、1KB、2KB、10KB、20KB、30KB、512KB、1MB不同大小的数据。

例如构造1MB的随机数,配置项设置如图8所示,1MB对应1048576字节长度的数据,一个字符等于一个字节,字符范围可以不修改,保持默认的数字和大小写英文字母的范围,其他手机号开头或邮箱后缀不涉及,维持默认值即可,无需修改,对生成结果无影响,其他数据大小的随机数只需修改长度即可构造满足数据大小要求的数据。

在进行负载测试和并发测试时,需要验证5分钟是否能达到预计的12.5万笔加解密或仅加密操作,还需验证以一定的梯度递增并发数,获取到不同加解密算法加解密或仅加密的性能指标。以上性能测试均需要大批量构造测试数据,需要达到10万级别以上的数据,应用DCS快速批量定制待加密的测试数据,构造方式简单快捷,满足不同并发量和负载量的批量定制,自动化一键生成测试数据和文件,有力支撑大数据量的负载测试和并发测试,经过验证DCS运行结果满足性能测试需求。

基于ECC或AES+ECC两种加密方式的并发测试中,一开始以1千的递增并发量构造生成测试数据,通过监控系统资源使用情况发现未达到瓶颈,逐步加大至1万的递增并发量,探测性能曲线,此时系统资源仍未消耗过多,将递增并发量设置到10万,在此次性能并发测试中,最大验证到30万的并发量,满足不同并发量测试要求。DCS支持各个数量级的数据定制自动化批量生成,为性能测试参数化数据准备提供了有效的强力支撑。

五、结束语

本文基于wxPython工具包,使用Python语言开发的轻量级数据定制生成软件DCS,能够方便快捷地实现系统主流类型数据的灵活配置和一键生成,有序数和随机数构造功能在计费系统和区块链系统性能测试中得到了广泛的应用,大大提升了性能测试效率。并且该软件在接口测试、自动化测试等不同类型的测试中也具有較高的普适性。同时,DCS被打包成通用的可执行程序,降低了对环境和库包的依赖,可以快速实现跨平台迁移和部署,能够为测试人员在系统测试的数据构造环节提供极大的便利。

参  考  文  献

[1]刘国庆,汪兴轩.基于Charles录制会话的HTTP接口自动化测试框架设计与实现[J].计算机应用与软件,2019,36(6):8.

[2]路晓丽,葛玮,龚晓庆,等.软件测试技术[M].北京:机械工业出版社,2009:112-113.

[3]王大伟.基于Python的Web API自动化测试方法研究[J].电子科学技术,2015,2(5):573-581.

[4]吴春波,陈伟,赵振华,等.基于PyQt的SHPB试验数据处理程序开发[J].计算机应用与软件,2021,38(12):12.

[5]贺平.软件测试教程[M].3版.北京:电子工业出版社,2014:63-65.

[6]刘卫国.Python语言程序设计[M].北京:电子工业出版社,2016:45-53.

[7]张永清.软件性能测试、分析与调优实践之路[M].北京:清华大学出版社,2020:54-63.

[8]李悦,李玮,曹艳琴,等.几种轻量级分组密码算法的性能分析[J].计算机应用与软件,2016,33(10):320.

[9]胡通.大话性能测试JMeter实战[M].北京:人民邮电出版社,2021:124-127.

作者单位:李丹霞    刘舒婷    董欣    中移信息技术有限公司

李丹霞(1986-),女,汉族,河南周口,硕士,软件测试工程师,研究方向:区块链技术、自动化测试技术等;

刘舒婷(1993-),女,汉族,广东兴宁,学士,软件测试工程师,研究方向:测试开发技术、自动化测试技术等;

董欣(1981-),女,汉族,山西平遥,硕士,中级工程师,研究方向:移动通信,软件测试,项目管理等。