近年来随着各类新技术、新架构、新开发模式(如DevOps、敏捷开发、Paas云平台等)大规模的研究和应用,测试工作面临着更高的质量要求和更短的时间挑战。尤其DevOps要求代码库每次更新都需进行测试并保存测试结果。因此,推进自动化测试迫在眉睫。近年来,我行在功能测试自动化方面取得了很大的进展,已经从组织级层面完成了功能自动化测试平台的建设,自动化测试案例的积累和定期回归。但在性能测试方面,部分任务还依赖于手工开展各项工作。当前业内关于性能测试自动化的研究较少,仅局限于自动化发起与执行测试脚本。
本文尝试对性能测试自动化成熟度进行分层定义,用于指导性能测试自动化的实施推进。本文将通过剖析性能测试的各个工作环节,详细分析性能测试各环节自动化可行性并给出可实践方案。根据自动化程度划分等级,形成一套针对性能测试自动化成熟度的评估模型,用于评估各系统性能测试的自动化程度。最后通过分析我行性能测试自动化的现有实践,给出未来的发展方向。
一、工作流程
整个工作流程:需求分析->测试模型设计->性能测试脚本开发->性能场景配置->测试执行与数据采集->结果分析与性能优化->测试模型优化。
1. 需求分析
通过分析系统性能需求,圈定性能测试的范围,确定系统各项性能指标。如:TPS、并发数、资源使用率、响应时间等。
2. 测试模型设计
性能测试模型设计工作包含:设计性能测试用例和设计性能测试场景设计。用例设计主要决定哪些功能参与测试,如何参与;场景设计主要确定如何组织测试用例,如按业务分布、业务量、业务时段、业务角色来综合配置并发用户数、执行时间、比例等。
3. 性能测试脚本开发
根据测试模型,生成性能测试脚本。测试脚本可以通过工具录制生成,也可通过编码生成。脚本用于模拟系统功能,是整个性能测试执行的基础。
4. 测试场景配置
根据所采用的工具,通过设置测试活动,实现测试模型中的场景。
5. 测试执行与数据采集
执行设置好的场景和测试脚本,并在运行过程中采集脚本执行结果和资源消耗情况的数据。包括:响应时间、吞吐量、TPS、事务成功率、CPU、内存、存储、网络、数据库、中间件、缓存、JVM的相关数据。
6. 结果分析与性能调优
根据采集的数据,开展性能分析。本步骤一般需要由团队完成,需要测试人员、开发人员、运维人员、数据库管理人员一起协作完成。对于遇到的问题进行分类,协助开发团队完成问题定位与分析调优。
7. 测试模型优化
本步骤是可选环节,本环节是根据最终性能测试的执行结果,反向调整测试模型,以便支持性能问题的更好发现。比如调整测试场景设计及场景中各典型交易的占比。
二、自动化分层
自动化测试是指使用工具或者程序来代替人工完成预先定义的测试活动。性能测试可自动化的环节有:需求分析、测试模型设计、性能测试脚本开发、测试场景配置、测试执行和数据采集、测试模型优化。
参考功能测试自动化实现的层级,性能测试按自动化测试成熟度可以分为五个级别:
无人值守的测试框架
——测试执行和数据采集的自动化
1.自动化测试的最低级别。
2.人工进行性能需求分析。
3.人工进行模型设计,包括性能用例的编写和场景设计。
4.性能测试脚本通过人工录制生成或是由测试人员在项目早期根据需求完成设计和编写程序实现。
5.人工进行场景配置。
6.采用CI技术实现自动化测试执行和数据采集。
7.人工根据性能测试结果对测试模型进行优化。
8.人工进行结果分析和性能调优。
级别2
数据驱动的测试框架
——测试脚本参数化
1.人工进行性能需求分析。
2.人工进行模型设计,包括性能用例的编写和场景设计。
3.性能测试脚本通过人工录制生成或是由测试人员在项目早期根据需求完成设计和编写程序实现。性能测试脚本中的测试数据和测试操作分离,输入数据的地方采用参数代替,将测试输入数据写入配置文件。测试数据变动无需人工重新开发测试脚本,只需修改配置文件。
4.人工进行性能场景配置。
5.采用CI技术实现自动化测试执行和数据采集。
6.人工根据性能测试结果对测试模型进行优化。
7.人工进行结果分析和性能调优。
级别3
关键字驱动的测试框架
——性能测试脚本和场景配置自动化
1.人工进行性能需求分析。
2.人工进行模型设计,包括性能用例的编写和场景设计。将性能测试用例按照关键字进行分解,形成用例数据文件。主要关键字包括:被操作对象(Item)、操作(Operation)和值(Value)。将场景设计按照关键字进行分解,形成场景配置文件。
3.性能测试脚本通过测试框架生成,测试框架可根据用例数据文件生成大量的不同功能的性能测试脚本。
4.测试框架还可根据场景配置文件完成场景配置。
5.采用CI技术实现自动化测试执行和数据采集。
6.人工根据性能测试结果对测试模型进行优化。
7.人工进行结果分析和性能调优。
级别4
结果驱动的测试框架
——测试模型优化的自动优化
1.人工进行性能需求分析。
2.人工进行模型设计,包括性能用例的编写和场景设计。将性能测试用例按照关键字进行分解,形成用例数据文件。主要关键字包括:被操作对象(Item)、操作(Operation)和值(Value)。将场景设计按照关键字进行分解,形成场景配置文件。
3.性能测试脚本通过测试框架生成,测试框架可根据用例数据文件生成大量的不同功能的性能测试脚本。
4.测试框架还可根据场景配置文件完成场景配置。
5.采用CI技术实现自动化测试执行和数据采集。
6.采用机器学习技术(ML)根据执行的结果反馈,不断地调整规则和测试数据,测试脚本以及测试场景的映射关系,从而使测试结果不断逼近预期目标。包含了测试数据的持续改进,测试脚本的持续改进,测试场景的持续改进。
7.人工进行结果分析和性能调优。
级别5
规则驱动的测试框架
——需求分析和模型设计自动化
1.采用自然语言处理(NLP)技术,分析系统非功能需求,圈定性能测试的范围,确定系统各项性能指标。
2.人工进行模型设计,包括性能用例的编写和场景设计。将性能测试用例按照关键字进行分解,形成用例数据文件。主要关键字包括:被操作对象(Item)、操作(Operation)和值(Value)。
3.通过大数据挖掘技术分析以往业务日志,按业务分布、业务量、业务时段、业务角色来综合配置并发用户数、执行时间等参数。再将场景设计按照关键字进行分解,形成场景配置文件。
4.性能测试脚本通过测试框架生成,测试框架可根据用例数据文件生成大量的不同功能的性能测试脚本。
5.测试框架还可根据场景配置文件完成场景配置。
6.采用CI技术实现自动化测试执行和数据采集。
7.采用机器学习技术(ML)根据执行的结果反馈,不断地调整规则和测试数据,测试脚本以及测试场景的映射关系,从而使测试结果不断逼近预期目标。包含了测试数据的持续改进,测试脚本的持续改进,测试场景的持续改进。
8.人工进行结果分析和性能调优。
综上所述,每个层级自动化的测试环节大致如下:
三、自动化现有实践与未来发展
目前行业内的性能测试自动化进展:
级别1:
支持CI软件,即“Jenkins+Ant”或“Jenkins+Maven”实现了测试自动化执行和数据采集。该方式主要侧重自动化测试执行和数据采集。
级别2:
用“Jenkins+Ant+Jmeter+csv”或“Jenkins+Maven+Jmeter+csv”,即可实现测试脚本参数化和测试自动化执行和数据采集。
级别3:
业内虽无成熟的性能自动化测试框架案例,但经过调研可使用“Java+Ant/Maven+Jmeter+csv”实现。原因如下:
(1)Jmeter是业内成熟的性能框架,支持多种协议的压力测试。
(2)Jmeter支持非GUI模式运行,在GUI模式运行下,主要依靠jmx文件中的信息进行相应的压力测试。jmx文件是xml格式文档,其中包含测试计划、线程组(测试场景)、压力请求(测试脚本)、变量定义(测试数据),结果采样器等信息。
(3)Jmeter是基于Java开发的压测工具,可使用Java对其进行二次开发,非常便捷。
(4)Java编码可实现关键字数据文件的解析,包括:用例数据文件和关键字配置文件。并将解析后的信息生成jmx文件,供Jmeter执行。
级别4:
机器学习在软件测试领域的应用,目前已经取得了一定的进展。机器学习是一种能够理解、感知和学习的技术,它可以解决通常需要人类智能和理解的问题。
上图就是机器学习分支中有监督学习的缩略图。在历史数据上训练出模型,并发布一个预测服务。新的数据过来后,预测服务可以根据模型给出预测结果。
将该技术运用到自动化性能测试的优化模型上,可分为如下几步:
(1)在日常手工性能测试中,搜集可根据性能测试的执行结果调整测试模型的数据。
(2)对搜集的数据进行学习,训练出可根据测试结果调整测试模型的模型。
(3)对模型进一步开发,产出一个配置文件生成服务。该服务可以根据采集的测试结果,旧的场景配置文件以及用例数据文件,生成新的场景配置文件和用例数据文件,同时新的场景配置文件和用例数据文件中的参数均来自于模型产生的预测数据。
级别5:
自然语言处理(NLP)是计算机科学领域以及人工智能领域的一个重要的研究方向,它研究用计算机来处理、理解以及运用人类语言(如中文、英文等)。简单来说即是计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期待的结果。大致来说NLP主要应用于以下几个领域:文本检索、机器翻译、文本分类/情感分析、信息抽取、序列标注、文本摘要、问答系统、对话系统、知识图谱以及文本聚类。
NLP在软件测试中也有些实践。需求分析的自动化可采用NLP技术分析产品规格说明书,自动将说明书中的性能需求提炼成性能指标,无须人为干预。
大数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的,人们事先不知道的但又是潜在有用的信息和知识的过程。
采用大数据挖掘技术分析以往业务日志,找出业务分布、业务量、业务时段、业务角色对系统性能的影响。根据挖掘到的信息自动配置性能测试场景,设置测试并发用户数、执行时间等参数。
目前,我行性能测试自动化进展:已在主机的性能测试中完成了级别3的部分自动化实践(脚本通过数据配置自动生成),现有测试框架支持通过配置报文信息和数据设置,自动生成BoEing交易测试脚本(LR测试脚本和Jmeter测试脚本也均有实现)。
未来随着测试资产和各项性能测试相关数据的积累,可以推动性能需求的自动化分析,测试设计模型的自动生成和优化,实现级别4和5的可持续优化改进的自动化测试框架。