CN111949521A - 软件性能测试方法及装置 - Google Patents

软件性能测试方法及装置 Download PDF

Info

Publication number
CN111949521A
CN111949521A CN202010756085.1A CN202010756085A CN111949521A CN 111949521 A CN111949521 A CN 111949521A CN 202010756085 A CN202010756085 A CN 202010756085A CN 111949521 A CN111949521 A CN 111949521A
Authority
CN
China
Prior art keywords
message
test
request
response
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010756085.1A
Other languages
English (en)
Other versions
CN111949521B (zh
Inventor
陈肇权
林海
马泽政
王雨超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202010756085.1A priority Critical patent/CN111949521B/zh
Publication of CN111949521A publication Critical patent/CN111949521A/zh
Application granted granted Critical
Publication of CN111949521B publication Critical patent/CN111949521B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种软件性能测试方法及装置。方法包括:对测试脚本结构化解析并封装成请求报文,将请求报文作为时间序列上的消息流发布到消息流处理请求队列中;以长连接订阅方式监听消息流处理请求队列,对新增的请求报文结构化解析,得到测试步骤;将其中的变量替换成实际数据并封装成通讯包请求,转发通讯包请求,接收对应的应答数据;对应答数据结构化解析,并进行边缘计算,利用得到的测试执行的结果量化信息构建应答报文,发布到消息流处理应答队列;通过汇总统计得到性能测试结果。本发明解决了传统测试方法存在的资源上限问题,并规避了传统测试方法受网卡转发影响的问题,通过引入边缘计算,极大降低了资源消耗,有助于提升请求收发效率。

Description

软件性能测试方法及装置
技术领域
本发明涉及软件测试技术领域,尤指一种软件性能测试方法及装置。
背景技术
软件性能是软件质量评估的重要指标,因此在软件研发工程中,性能测试在软件质量保证中起着重要作用。在目前的研发过程中,性能测试实施基本上都遵循一种GS模型,即“压力发生器(Generator)-待测服务端(Server)”的模型。在这种模型下,压力发生器根据预定义好的行为,使用预配置数据,向部署了待测工程的服务端生成压力,评估在多并发、高频请求下,待测工程的性能质量,而其中涉及的预定义的行为和预配置的数据,称为“测试脚本”。GS模型中,压力发生器使用多并发的SOCKET短连接,封装特定的通讯数据包,模拟用户请求向待测服务端直接生成压力。
在这种性能测试实施模型下,压力生成的规模有比较明显的瓶颈上限,主要受网卡和链路带宽、端口占用数、SOCKET短连接反复建立和关闭、以及网络传输本身的耗时影响,另外压力发生器自身的资源消耗也会影响压力生成效率。一定程度上制约了软件质量评估的精确度,提升了研发成本。
发明内容
本发明实施例的主要目的在于提供一种软件性能测试方法及装置,实现降低性能测试的投入成本,提升测试质量和效率。
为了实现上述目的,本发明实施例提供一种软件性能测试方法,所述方法包括:
对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中;
以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;
针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;
将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;
对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中;
所述测试主控单元以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
可选的,在本发明一实施例中,所述结构化的测试脚本包括测试行为及测试数据。
可选的,在本发明一实施例中,所述针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据包括:针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
可选的,在本发明一实施例中,所述将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据包括:将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
可选的,在本发明一实施例中,所述方法还包括:对结构化的测试脚本、结构化解析后的应答数据、请求报文、通讯包请求及应答报文进行存储。
可选的,在本发明一实施例中,所述利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息包括:获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
可选的,在本发明一实施例中,所述从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果包括:从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
本发明实施例还提供一种软件性能测试装置,所述装置包括:
发布模块,用于对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中;
监听模块,用于以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;
替换模块,用于针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;
封装模块,用于将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;
解析模块,用于对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中;
汇总模块,用于以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
可选的,在本发明一实施例中,所述结构化的测试脚本包括测试行为及测试数据。
可选的,在本发明一实施例中,所述替换模块还用于针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
可选的,在本发明一实施例中,所述封装模块还用于将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
可选的,在本发明一实施例中,所述装置还包括信息存储模块,用于存储结构化的测试脚本、结构化解析的应答数据、请求报文、通讯包请求及应答报文。
可选的,在本发明一实施例中,所述装置还包括断言模块,用于获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
可选的,在本发明一实施例中,所述汇总模块还用于从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
本发明通过将性能测试的请求报文和应答报文定义为时间序列上的消息流,并且使用了长连接方式,解决了传统性能测试方法容易出现资源上限的问题。同时,以本地端口转发的方式提升数据包收发速度,规避了传统性能测试方法的带宽和耗时受网卡转发影响的问题。此外,通过引入边缘计算,极大降低了资源消耗,有助于进一步提升请求收发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种软件性能测试方法的流程图;
图2为本发明实施例中请求报文的示意图;
图3为本发明实施例中应答报文的示意图;
图4为本发明实施例一种软件性能测试装置的结构示意图;
图5为本发明实施例一种软件性能测试系统的结构示意图;
图6A-图6C为本发明实施例中消息流处理的示意图;
图7为本发明一实施例所提供的电子设备的结构示意图。
具体实施方式
本发明实施例提供一种软件性能测试方法及装置。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本发明实施例一种软件性能测试方法的流程图,图中所示方法包括:
步骤S1,对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中。
其中,解析研发人员编写的测试脚本,并保存解析后的结构化测试脚本。本发明中的测试脚本由测试行为和测试数据组成。
测试行为是对待测工程的一系列操作,描述了真实用户对待测工程的使用行为。测试过程中通过对测试行为的回放,模拟用户对待测工程的使用压力。以BS架构(浏览器和服务器架构模式)的WEB服务系统为例,测试行为是对系统特定URI的一系列HTTP请求调用。
测试数据是测试过程用到的、有一定业务含义、符合案例要求的数据。以BS架构的WEB服务系统为例,测试行为是对系统特定URI的一系列参数赋值,表现为表单KEY-VALUE集合、JSON、XML等形式。
读取存储后的结构化测试脚本,封装成JSON格式的请求报文,将请求报文发送到消息流处理请求队列。
步骤S2,以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤。
其中,持续订阅监听消息流处理请求队列,当监听到新增请求报文时,主动从请求队列拉取(poll)信息,由此接收到新增的JSON格式请求报文,并将请求报文解析成具体的测试步骤。
步骤S3,针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文。
其中,针对每个测试步骤,检查测试数据中是否有变量引用。这里的变量是指有一定业务含义、需要在测试过程中使用,且不是固定的常数值,而是根据预定的规则实时变化的数据。在每个测试步骤解析时,遍历测试行为和测试数据,当出现变量引用语法时,将变量替换成实际数据。
步骤S4,将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据。
具体的,将请求报文中的测试行为和测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式发起请求,并以同步阻塞等待的方式接收应答数据。
步骤S5,对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中。
其中,对应答数据做结构化解析,保存报文头、报文体字段等内容。在待测客户端(边缘侧)计算处理耗时、测试执行结果等测试执行的结果量化信息,并利用测试执行的结果量化信息生成应答报文,将应答报文发布到消息流处理应答队列中。
步骤S6,以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
具体的,以长连接订阅监听消息流处理应答队列,当监听到应答队列有新增的应答报文,则将应答报文拉取到本地,并做结构化解析,将解析后的数据保存。汇总统计当次测试执行结果,从压力笔数、单笔耗时、吞吐量等维度,统计得到性能测试结果。
作为本发明的一个实施例,结构化的测试脚本包括测试行为及测试数据。
在本实施例中,对每一测试步骤,将结构化的请求报文中的变量替换成实际数据包括:针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
具体的,将请求报文的变量列表保存成KEY-VALUE形式的映射表,在每个测试步骤解析时,遍历测试行为和测试数据,当出现变量引用语法时,将变量替换成特定的候选值,即实际数据。
在本实施例中,将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据包括:将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
其中,将测试行为和测试数据封装成通讯包请求,以本地端口转发的方式转发请求,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。由于不需要经过网卡路由,网络消耗很低,可以给待测工程造成极高的请求压力。
作为本发明的一个实施例,方法还包括:对结构化的测试脚本、结构化解析后的应答数据、请求报文、通讯包请求及应答报文进行存储。
作为本发明的一个实施例,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息包括:获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
其中,断言是一种布尔表达式,由实际值、预期关系、预期值三部分组成,实际值、预期值是一种数值表达式或字符串,其中可以包含四则运算和变量引用。
检查断言时,首先将变量引用替换成实际数据,再将实际值、预期值的四则运算计算出数值,最后判断实际值和预期值的数值是否满足断言给定的预期关系,如果满足,则断言检查true,反之为false。
进一步的,根据断言检查结果,给出测试执行结果。当每个步骤的所有断言检查均通过时,测试执行结果为成功,反之为失败。
作为本发明的一个实施例,从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果包括:从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
其中,根据应答报文的属性信息,汇总统计当次测试的结果,从压力笔数、单笔耗时、吞吐量等维度,统计性能测试效果。
在本发明一具体实施例中,将结构化的测试脚本封装成请求报文过程中,测试脚本中定义了对www.baidu.com网站搜索功能的两个访问。先以GET方法访问http://www.baidu.com首页,然后以POST访问http://www.baidu.com/s页面,提交检索。POST方法涉及的表单参数有wd(检索关键字)和t(检索日期),测试案例中检索关键字有三组数据,检索日期有两组数据。
在本实施例中,读取测试脚本,封装成请求报文,如图2所示。请求报文PARAM_LIST节点有KEYWORD和TIME两个变量,KEYWORD有三个候选值、TIME有两个候选值。维护一个HashMap映射表,保存变量及候选值。映射表的KEY是变量名,VALUE是一个ArrayList,其中保存每个变量的候选值列表。
进一步的,遍历请求报文的ACTION_LIST节点,其中SEQNO=2的步骤中,表单FORM的参数涉及变量引用。在多次执行时,将表单参数替换成变量对应的数组列表(ArrayList)的元素。对于每个变量维护一个指针,第一次执行替换时选取ArrayList的第一个元素(KEYWORD=菜价,TIME=2020-06-16),指针加一,第二次执行替换时选取第二个元素(KEYWORD=新闻,TIME=2020-06-17),如此类推。当指针值等于ArrayList中的元素个数时,指针值重新置0。
将测试行为和测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式发起请求,并以同步阻塞等待的方式接收应答。本实施例中的本地端口转发,即直接发送到本机127.0.0.1地址,端口为待测软件服务端的监听端口,不需要经过网卡路由,网络消耗很低。
具体的,待测工程通过8080端口监听HTTP请求,内部调度完成功能,如果执行成功即返回HTTP应答码200,同时在body区返回请求结果。对于每个测试步骤,组装HTTP通讯包请求,通过http://127.0.0.1:8080/地址发送请求,并接收应答数据。
对通讯包请求的请求数据、应答数据做结构化拆解,将报文头、报文体字段等内容保存,分别以“req_变量名”、“resp_变量名”为键值KEY。
在本实施例中,给出测试执行结果前,需检查测试脚本定义的断言是否成功,具体的,以下是断言的一个示例:
$<resp_BALANCE>==$<req_BALANCE>+100
其中$<resp_BALANCE>是实际值,==是预期关系,$<req_BALANCE>+100是预期值,变量引用以$<变量名>的格式描述。
本实施例中定义了$<resp_httpcode>==‘200’的断言,$<resp_httpcode>是HTTP应答码,由于各测试步骤的HTTP执行均返回200,因此断言检查通过。
具体的,对于$<resp_httpcode>=='200'这一断言,获取HTTP应答码,替换变量引用。当HTTP返回200时,断言检查为true,当HTTP返回非200(例如HTTP 500)时,断言检查为false。
进一步的,断言检查通过后,构建应答报文具体过程:将应答报文的END_TIME赋值为当前时间戳;将END_TIME与START_TIME相减,得到该笔请求的处理耗时,赋值到应答报文的ELAPSED_TIME节点;在应答报文中记录测试执行结果以及每个测试步骤每个断言的检查结果。
在本实施例中,以长连接订阅监听消息流处理应答队列,当监听到新增的应答消息,将应答消息拉取到本地,并做结构化拆解,应答报文示如图3所示。从图3中可看出,测试执行结果RESULT字段值为SUCCESS、各步骤的断言检查结果都是true。
在本实施例中,根据应答报文的属性信息,汇总统计当次测试的结果,从压力笔数、单笔耗时、吞吐量等维度,统计性能测试效果。
具体的,压力笔数通过检索确定本次测试的请求报文数、应答报文个数获得;对于单笔请求,读取应答报文的ELAPSED_TIME属性,即为该笔请求的处理耗时。计算当次测试每笔应答报文的耗时,取平均值(AVG),即为本次测试的单笔平均耗时。对END_TIME字段按秒级粒度分类汇总,加总(SUM)统计每秒完成的请求数,即为该秒的吞吐量(TPS),根据每一秒的吞吐量信息,统计吞吐量平均值以及吞吐量在时间序列上的变化趋势。
本发明通过将性能测试的请求报文和应答报文定义为时间序列上的消息流,并且使用了长连接方式,解决了传统性能测试方法需要大量使用SOCKET短连接和端口,容易出现资源上限的问题。同时,以本地端口转发的方式提升数据包收发速度,规避了传统性能测试方法的带宽和耗时受网卡转发影响的问题。此外,通过引入边缘计算,将变量替换等操作放在边缘侧上完成,极大降低了资源消耗,有助于进一步提升请求收发效率。
如图4所示为本发明实施例一种软件性能测试装置的结构示意图,图中所示装置包括:
发布模块10,用于对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中;
监听模块20,用于以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;
替换模块30,用于针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;
封装模块40,用于将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;
解析模块50,用于对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中;
汇总模块60,用于以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
作为本发明的一个实施例,结构化的测试脚本包括测试行为及测试数据。
在本实施例中,替换模块还用于针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
在本实施例中,封装模块还用于将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
作为本发明的一个实施例,装置还包括信息存储模块,用于存储结构化的测试脚本、结构化解析的应答数据、请求报文、通讯包请求及应答报文。
作为本发明的一个实施例,装置还包括断言模块,用于获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
作为本发明的一个实施例,汇总模块还用于从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
基于与上述一种软件性能测试方法相同的申请构思,本发明还提供了上述一种软件性能测试装置。由于该一种软件性能测试装置解决问题的原理与一种软件性能测试方法相似,因此该一种软件性能测试装置的实施可以参见一种软件性能测试方法的实施,重复之处不再赘述。
本发明通过将性能测试的请求报文和应答报文定义为时间序列上的消息流,并且使用了长连接方式,解决了传统性能测试方法容易出现资源上限的问题。同时,以本地端口转发的方式提升数据包收发速度,规避了传统性能测试方法的带宽和耗时受网卡转发影响的问题。此外,通过引入边缘计算,极大降低了资源消耗,有助于进一步提升请求收发效率。
如图5所示为本发明实施例一种软件性能测试系统的结构示意图,图中所示系统包括:测试主控单元1、消息流处理单元2及压力代理单元3;
测试主控单元1对测试脚本进行结构化解析,得到结构化的测试脚本;将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理单元2的消息流处理请求队列中。
测试主控单元1,具体包括脚本管理模块、压力发生模块、队列通讯模块及结果汇总模块。
脚本管理模块用于解析研发人员编写的测试脚本,结构化地保存到信息存储单元4中。本发明中的测试脚本由测试行为和测试数据组成:
1)测试行为是对待测工程的一系列操作,描述了真实用户对待测工程的使用行为。测试过程中通过对测试行为的回放,模拟用户对待测工程的使用压力。以BS架构的WEB服务系统为例,测试行为是对系统特定URI的一系列HTTP请求调用。
2)测试数据是测试过程用到的、有一定业务含义、符合案例要求的数据。以BS架构的WEB服务系统为例,测试行为是对系统特定URI的一系列参数赋值,表现为表单KEY-VALUE集合、JSON、XML等形式。
压力发生模块用于性能测试的压力发生以及执行结果的接收。从信息存储单元中读取结构化的测试脚本,封装成JSON格式的请求报文,以多线程的方式调用队列通讯模块,将请求报文发送到消息流处理单元2的请求队列。
压力发生模块调用队列通讯模块,持续订阅监听消息流处理单元2的应答队列,接收由压力代理单元3返回的JSON格式应答报文,经过结构化拆解后保存在信息存储单元。
具体的,在压力发生模块的一个实施例中,测试脚本中定义了对www.baidu.com网站搜索功能的两个访问。先以GET方法访问http://www.baidu.com首页,然后以POST访问http://www.baidu.com/s页面,提交检索。POST方法涉及的表单参数有wd(检索关键字)和t(检索日期),测试案例中检索关键字有三组数据,检索日期有两组数据。压力发生模块读取测试脚本,封装成请求报文,如图2所示。
此外,压力发生模块以线程池的方式,维护自身与队列通讯模块之间的RPC长连接。生成压力时,压力发生模块从线程池获取连接,将请求报文作为参数,调用队列通讯模块。队列通讯模块作为时序消息处理的生产者(PRODUCER),通过长连接将报文发布到消息流处理单元2的请求队列。
进一步的,测试主控单元1还用于从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
具体的,压力发生模块调用队列通讯模块,以长连接订阅监听消息流处理单元2的应答队列,当监听到消息流处理单元2有新增的应答消息,调用pull()函数将消息拉取到本地,并调用JSON解析做结构化拆解,保存在信息存储单元。应答报文示例如图3所示。
在本实施例中,队列通讯模块在测试主控单元1中负责与消息流处理单元2通讯。
其中,队列通讯模块与消息流处理单元2的消息交换包括发布和拉取两类。队列通讯模块向消息流处理单元2的请求队列发布(发送)请求报文时,队列通讯模块称为生产者(PRODUCER);队列通讯模块从消息流处理单元2的应答队列拉取(接收)应答报文时,队列通讯模块称为消费者(CONSUMER)。
队列通讯模块与消息流处理单元2之间以长连接保持通讯,队列通讯模块的一个通讯进程,与消息流处理单元2的一个分区(PARTITION)连接。
测试主控单元1生成压力并到消息流处理单元2时,队列通讯模块承担生产者角色,将压测请求报文封装成符合消息流处理单元2要求的通讯包,以推送(push)的方式发布到消息流处理单元2的请求队列。出于推送效率的优化,且在本发明中请求报文少量丢失并不影响整体测试结果,队列通讯模块推送请求报文后不需要等待消息流处理单元2返回的ACK,即两者间数据交换是异步方式。
测试主控单元1接收压力代理单元3经消息流处理单元2返回的测试结果时,队列通讯模块承担消费者的角色。队列通讯模块以长连接订阅的方式,监听消息流处理单元2的应答队列,当监听到新增消息时,主动从应答队列拉取(poll)信息,并转发给压力发生模块。
队列通讯模块承担消费者角色时,与消息流处理单元2之间数据交换是异步提交(commit)的模式。从应答队列拉取信息后,不阻塞等待压力发生模块处理完成,先向消息流处理单元2回应ACK。待压力发生模块确认处理完成后,队列通讯模块执行手工提交,将监听消息流处理单元2信息队列的偏移量更新到实际值。
在本实施例中,结果汇总模块用于根据应答报文的属性信息,汇总统计当次测试的结果,从压力笔数、单笔耗时、吞吐量等维度,统计性能测试效果。
其中,压力笔数通过检索信息存储单元中本次测试的请求报文数、应答报文个数获得。对于单笔请求,读取应答报文的ELAPSED_TIME属性,即为该笔请求的处理耗时。结果汇总模块遍历信息存储单元,计算当次测试每笔应答报文的耗时,取平均值(AVG),即为本次测试的单笔平均耗时。结果汇总模块遍历信息存储单元,对END_TIME字段按秒级粒度分类汇总,加总(SUM)统计每秒完成的请求数,即为该秒的吞吐量(TPS),根据每一秒的吞吐量信息,统计吞吐量平均值以及吞吐量在时间序列上的变化趋势。
消息流处理单元2是测试主控单元1与多个压力代理单元3之间进行消息暂存及快速中转的渠道。
在本实施例中,消息流处理单元2将性能测试的请求报文和应答报文看作时间序列上的消息流,分别定义请求队列及应答队列来暂存处理。
具体的,消息流处理单元2使用“发布—订阅”的模式进行消息传递。生产者为需要待传递消息指定所属话题(TOPIC),发布到队列中,消费者订阅对队列中特定话题的监听,当监听到队列中新增该话题的消息时,主动拉取到本地。其中,测试主控单元1向待测服务端生成压力时,测试主控单元1是消息生产者,压力代理单元3是消息消费者;压力代理单元3将单笔测试结果反馈测试主控单元1时,压力代理单元3是消息生产者,测试主控单元1是消息消费者。
在本实施例中,消息流处理单元2中的队列是一类先进先出的队列,即生产者发布的消息会新增在队列末端,消费者拉取消息时从队列前端往后开始拉取。在具体实施例中,队列以数组(Array)或数组列表(ArrayList)的数据结构实现,每个消息是数据结构中的一个元素。消息带有下标属性,其具体值是消息在队列中从前往后的顺序。
在本实施例中,消息流处理单元2对于每一条队列,维护一个(OFFSET)指针,指向队列末端。当生产者向队列发布新消息时,消息流处理单元2获取当前的最大偏移量,将其指针中的值加一,作为新的最大偏移量,再将消息放入队列内存,其下标赋值为新的最大偏移量的值。
在本实施例中,消息流处理单元2对于每一个接入的消费者,维护一个消息消费的偏移量指针,初始值指向队列最前端第一个消息,随着消费者拉取消息的进度更新,记录该消费者可以拉取的第一个消息,称为当前偏移量。
其中,当消费者监听消息时,消息流处理单元2将当前偏移量与最大偏移量做比较,如当前偏移量记录的下标位置小于最大偏移量,就循环从队列的当前偏移量位置开始拉取消息,每拉取一个,将当前偏移量暂时指向队列下一个消息,然后再对比一次当前偏移量与最大偏移量,如果当前偏移量指针大于最大偏移量,就退出循环。完成消息拉取后,消息流处理单元2等待消费者的提交或回退指令,当收到提交指令时,将当前偏移量的更新持久化;当收到回退指令时,当前偏移量重新赋值到循环拉取前的旧指针。
消息流处理单元2按消息放入队列的时间、队列消耗的存储空间总量两个维度来决定队列是否要做清理。设置两个时间和存储空间两个阈值,消息流处理单元2定时从前往后遍历队列,清理放入时间消息大于时间阈值的消息;当队列占用存储空间大小超过空间阈值时,从队列第一个消息开始从前往后清理,直到队列占用的空间小于阈值。清理完成后,如果队列第一个消息的偏移量指针大于各消费者的当前偏移量,将当前偏移量下标指针指向队列中第一个消息。
在消息流处理单元2的一个实施例中,使用KAFKA实现对消息的发布、暂存和拉取。KAFKA是一种高吞吐量的开源分布式发布订阅消息系统,以流数据的方式管理和传递消息,具备快速、可扩展、可持久化的特点。
在本实施例中,如图6A所示,消费者生产者发布订阅的对象是TOPIC。每类消息定义一个TOPIC,请求报文对应REQ_TOPIC、应答报文对应RESP_TOPIC。一个KAFKA集群由一个或多个BROKER服务器组成,它负责持久化和备份具体的KAFKA消息,一个BROKER可以有多条队列。
生产者发送消息时,消息被发送到具体指定的某个TOPIC对应的队列中,本实施例的队列,具体由Partition Logs(分区日志)组成,具有先进先出的特点。其组织结构如图6B所示。每个Partition中的消息都是有序的,生产的消息被不断追加到Partition log的末端,其中的每一个消息都被赋予了一个唯一的下标值。以请求队列为例,测试主控单元生成的一笔测试请求,在KAFKA中对应REQ_TOPIC的一笔消息,队列中的顺序体现请求报文生成的时间序列。当测试主控单元新增一笔请求时,最大偏移量加一。
消费者消费数据时,从指定的某个TOPIC对应的Partition log中从前往后读取消息。KAFKA针对每个消费者维护一个当前偏移量的指针,当消费者每消费一个消息时,当前偏移量的指针暂时加一,指向下一个消息。消息拉取完成后,当收到提交指令时,KAFKA将当前偏移量的更新持久化;当收到回退指令时,当前偏移量重新赋值到循环拉取前的旧指针。不同消费者之间定义不同的GROUPID,消息拉取过程相互独立,如图6C所示,消费者A、B均从下标0的消息开始消费,消费者A消费到下标为9的消息,当前偏移量就是9;消费者B消费到下标为11的消息,当前偏移量就是11。
KAFKA消息生产和消费的复杂度是O(1),因此,可以支撑极高吞吐量的消息传递。
压力代理单元3以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理单元2的消息流处理应答队列中。
具体的,压力代理单元3是部署在待测服务端上的发压代理,负责将测试主控单元1生成的压力从消息流处理单元2拉取到服务端本地,以本地端口转发的方式把测试请求数据包转发到待测工程部署的端口上,接收待测工程执行请求的应答数据包;同时,压力代理单元3负责测试行为、测试数据、测试结果等的边缘计算,包括且不限于变量替换、断言检查。最终得到测试执行的结果量化信息,包括且不限于测试成功与否、执行开始时间、执行结束时间、执行耗时等。
在本实施例中,压力代理单元3具体包括队列通讯模块、压力转发模块及断言检查模块。
其中,队列通讯模块负责与消息流处理单元2通讯。作为消费者,从消息流处理单元2的请求队列中拉取请求报文,调度压力转发模块完成后续处理;作为生产者,将压力转发模块的测试结果发布到消息流处理单元2的应答队列。队列通讯模块的具体设计与前述测试主控单元1的队列通讯模块基本一致,这里不再重复展开说明。
在本实施例中,压力转发模块承担边缘计算及实际的测试执行职能。接收队列通讯模块传入的JSON格式的请求报文,解析成具体的测试步骤,并将应答报文的START_TIME赋值为当前时间戳。针对每个测试步骤,检查测试数据中是否有变量引用。本发明所指的变量,是指有一定业务含义、需要在测试过程中使用,且不是固定的常数值,而是根据预定的规则实时变化的数据。压力转发模块将测试脚本请求报文的变量列表保存成KEY-VALUE形式的映射表,在每个步骤解析时,遍历测试行为和测试数据,当出现变量引用语法时,将变量替换成特定的候选值。
在一具体实施例中,请求报文如图2所示,其中,请求报文PARAM_LIST节点有KEYWORD和TIME两个变量,KEYWORD有三个候选值、TIME有两个候选值。压力转发模块维护一个HashMap映射表,保存变量及候选值。映射表的KEY是变量名,VALUE是一个ArrayList,其中保存每个变量的候选值列表。
压力转发模块遍历请求报文的ACTION_LIST节点,其中SEQNO=2的步骤中,表单FORM的参数涉及变量引用。在多次执行时,压力转发模块将表单参数替换成变量对应的ArrayList的元素。对于每个变量维护一个指针,第一次执行替换时选取ArrayList的第一个元素(KEYWORD=菜价,TIME=2020-06-16),指针加一,第二次执行替换时选取第二个元素(KEYWORD=新闻,TIME=2020-06-17),如此类推。当指针值等于ArrayList中的元素个数时,指针值重新置0。将测试行为和测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式发起请求,并以同步阻塞等待的方式接收应答。本发明所示的本地端口转发,即直接发送到本机127.0.0.1地址,端口为待测软件服务端的监听端口,不需要经过网卡路由,网络消耗很低。
在本实施例中,待测工程通过8080端口监听HTTP请求,内部调度完成功能,如果执行成功即返回HTTP应答码200,同时在body区返回请求结果。压力转发模块对于每个测试步骤,组装HTTP通讯包请求,通过http://127.0.0.1:8080/地址发送请求,并接收返回。
压力转发模块对通讯包请求数据、应答数据做结构化拆解,将报文头、报文体字段等内容保存到变量池,分别以“req_变量名”、“resp_变量名”为键值KEY。调用断言检查模块,检查测试脚本定义的断言是否成功。
在本实施例中,两个步骤都定义了$<resp_httpcode>==‘200’的断言,$<resp_httpcode>是HTTP应答码,由于各测试步骤的HTTP执行均返回200,因此断言检查通过。
进一步的,压力转发模块根据断言检查结果,给出测试执行结果。当每个步骤的所有断言检查均通过时,测试执行结果为成功,反之为失败。压力转发模块构建应答报文:将应答报文的END_TIME赋值为当前时间戳;将END_TIME与START_TIME相减,得到该笔请求的处理耗时,赋值到应答报文的ELAPSED_TIME节点;在应答报文中记录测试执行结果以及每个测试步骤每个断言的检查结果。压力转发模块调用队列通讯模块,将应答报文发布到消息流处理单元2的应答队列。
在本实施例中,压力转发模块完成处理、发布到消息流处理单元应答队列的应答报文如下。测试执行结果RESULT字段值为SUCCESS、各步骤的断言检查结果都是true,如图3所示。
断言检查模块用于测试脚本中断言的检查。其中,断言是一种布尔表达式,由实际值、预期关系、预期值三部分组成,实际值、预期值是一种数值表达式或字符串,其中可以包含四则运算和变量引用。以下是断言的一个示例:
$<resp_BALANCE>==$<req_BALANCE>+100
其中$<resp_BALANCE>是实际值,==是预期关系,$<req_BALANCE>+100是预期值,变量引用以$<变量名>的格式描述。
断言检查模块检查断言时,首先将变量引用替换成变量池中的实际数据,再将实际值、预期值的四则运算计算出数值,最后判断实际值和预期值的数值是否满足断言给定的预期关系,如果满足,则断言检查true,反之为false。
在本实施例中,对于$<resp_httpcode>=='200'这一断言,断言检查模块从变量池中获取HTTP应答码,替换变量引用。当HTTP返回200时,断言检查为true,当HTTP返回非200(例如HTTP 500)时,断言检查为false。
本发明系统适用于软件性能测试领域,特别适用于发现软件本身设计和编码缺陷的性能测试领域。将性能测试的请求报文和应答报文定义为时间序列上的消息流,使用基于长连接的“发布-订阅”模式,以及先进先出队列作为消息的流处理单元,解决了传统性能测试方法需要大量使用SOCKET短连接和端口、容易出现资源上限的问题。同时,定义了待测服务端上的压力代理单元,以本地端口转发的方式提升数据包收发速度,规避了传统测试方法的带宽和耗时受网卡转发影响的问题。另外本发明引入边缘计算设计,将变量替换、断言检查等操作放在压力代理单元(边缘侧)上完成,极大降低了主控单元的资源消耗,有助于进一步提升请求收发效率。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述方法的计算机程序。
如图7所示,该电子设备600还可以包括:通信模块110、输入单元120、音频处理单元130、显示器160、电源170。值得注意的是,电子设备600也并不是必须要包括图7中所示的所有部件;此外,电子设备600还可以包括图7中没有示出的部件,可以参考现有技术。
如图7所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备600的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备600提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备600的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (16)

1.一种软件性能测试方法,其特征在于,所述方法包括:
对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中;
以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;
针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;
将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;
对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中;
以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
2.根据权利要求1所述的方法,其特征在于,所述结构化的测试脚本包括测试行为及测试数据。
3.根据权利要求2所述的方法,其特征在于,所述针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据包括:针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
4.根据权利要求2所述的方法,其特征在于,所述将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据包括:将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:对结构化的测试脚本、结构化解析后的应答数据、请求报文、通讯包请求及应答报文进行存储。
6.根据权利要求1所述的方法,其特征在于,所述利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息包括:
获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;
判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;
断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
7.根据权利要求1所述的方法,其特征在于,所述则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果包括:从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
8.一种软件性能测试装置,其特征在于,所述装置包括:
发布模块,用于对测试脚本进行结构化解析,得到结构化的测试脚本,将所述结构化的测试脚本封装成请求报文,并将所述请求报文作为时间序列上的消息流发布到消息流处理请求队列中;
监听模块,用于以长连接订阅方式监听所述消息流处理请求队列,若获知所述消息流处理请求队列中新增请求报文,则获取新增的请求报文并对其进行结构化解析,得到测试步骤;
替换模块,用于针对每一测试步骤,将结构化的请求报文中的变量替换成实际数据,得到变量转换后的请求报文;
封装模块,用于将变量转换后的请求报文封装成通讯包请求,以本地端口转发的方式转发通讯包请求,并接收对应的应答数据;
解析模块,用于对所述应答数据进行结构化解析,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息,利用所述结果量化信息构建应答报文,并发布到消息流处理应答队列中;
汇总模块,用于以长连接订阅方式监听所述消息流处理应答队列,若获知所述消息流处理应答队列中新增应答报文,则从所述消息流处理应答队列中获取应答报文,通过汇总统计得到性能测试结果。
9.根据权利要求8所述的装置,其特征在于,所述结构化的测试脚本包括测试行为及测试数据。
10.根据权利要求9所述的装置,其特征在于,所述替换模块还用于针对每一测试步骤,遍历测试行为及测试数据,若获知测试行为及测试数据中出现变量引用语法,则将变量替换成实际数据。
11.根据权利要求9所述的装置,其特征在于,所述封装模块还用于将测试行为及测试数据封装成符合通讯协议的通讯包请求,以本地端口转发的方式将所述通讯包请求转发至部署待测工程的端口,并以同步阻塞等待的方式接收待测工程执行请求的应答数据。
12.根据权利要求8所述的装置,其特征在于,所述装置还包括信息存储模块,用于存储结构化的测试脚本、结构化解析的应答数据、请求报文、通讯包请求及应答报文。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括断言模块,用于获取测试脚本中定义的断言,将每一条断言中的变量替换为实际数据,通过计算得到实际值及预期值;判断所述实际值及所述预期值是否满足预期关系,若满足,则断言检查通过;断言检查通过后,利用结构化解析后的应答数据进行边缘计算,得到测试执行的结果量化信息。
14.根据权利要求8所述的装置,其特征在于,所述汇总模块还用于从所述消息流处理应答队列中获取应答报文,根据所述应答报文中的压力笔数、单笔耗时及吞吐量进行汇总统计,得到性能测试结果。
15.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7任一项所述方法的计算机程序。
CN202010756085.1A 2020-07-31 2020-07-31 软件性能测试方法及装置 Active CN111949521B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010756085.1A CN111949521B (zh) 2020-07-31 2020-07-31 软件性能测试方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010756085.1A CN111949521B (zh) 2020-07-31 2020-07-31 软件性能测试方法及装置

Publications (2)

Publication Number Publication Date
CN111949521A true CN111949521A (zh) 2020-11-17
CN111949521B CN111949521B (zh) 2023-07-25

Family

ID=73338935

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010756085.1A Active CN111949521B (zh) 2020-07-31 2020-07-31 软件性能测试方法及装置

Country Status (1)

Country Link
CN (1) CN111949521B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112532492A (zh) * 2020-12-08 2021-03-19 航天科技控股集团股份有限公司 用于测试汽车仪表的can虚拟报文组建方法及系统
CN112600918A (zh) * 2020-12-10 2021-04-02 厦门牧云数据技术有限公司 一种基于bs架构的工控边缘大数据高效处理方法与系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107040433A (zh) * 2017-05-10 2017-08-11 福建网龙计算机网络信息技术有限公司 一种自动化测试方法及系统
CN107562635A (zh) * 2017-09-15 2018-01-09 西南电子技术研究所(中国电子科技集团公司第十研究所) 嵌入式软件测试辅助系统
CN108011779A (zh) * 2017-11-30 2018-05-08 四川长虹电器股份有限公司 在有限的资源条件下云服务器任务吞吐率的测试方法
CN109522225A (zh) * 2018-11-09 2019-03-26 网宿科技股份有限公司 一种自动化测试断言方法及装置、测试平台及存储介质
CN110162468A (zh) * 2019-04-26 2019-08-23 腾讯科技(深圳)有限公司 一种测试方法、装置以及计算机可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107040433A (zh) * 2017-05-10 2017-08-11 福建网龙计算机网络信息技术有限公司 一种自动化测试方法及系统
CN107562635A (zh) * 2017-09-15 2018-01-09 西南电子技术研究所(中国电子科技集团公司第十研究所) 嵌入式软件测试辅助系统
CN108011779A (zh) * 2017-11-30 2018-05-08 四川长虹电器股份有限公司 在有限的资源条件下云服务器任务吞吐率的测试方法
CN109522225A (zh) * 2018-11-09 2019-03-26 网宿科技股份有限公司 一种自动化测试断言方法及装置、测试平台及存储介质
CN110162468A (zh) * 2019-04-26 2019-08-23 腾讯科技(深圳)有限公司 一种测试方法、装置以及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
金浩;杨洪章;: "RDMA网络传输技术研究综述", 科技风, no. 18 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112532492A (zh) * 2020-12-08 2021-03-19 航天科技控股集团股份有限公司 用于测试汽车仪表的can虚拟报文组建方法及系统
CN112600918A (zh) * 2020-12-10 2021-04-02 厦门牧云数据技术有限公司 一种基于bs架构的工控边缘大数据高效处理方法与系统
CN112600918B (zh) * 2020-12-10 2024-02-02 厦门牧云数据技术有限公司 一种基于bs架构的工控边缘大数据高效处理方法与系统

Also Published As

Publication number Publication date
CN111949521B (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
US5960181A (en) Computer performance modeling system and method
US20200364098A1 (en) Event driving method and apparatus
CN105338061A (zh) 一种轻量级消息中间件的实现方法与系统
WO2020233369A1 (zh) 基于模拟端口改进软件集成系统的方法及相关设备
US20150347305A1 (en) Method and apparatus for outputting log information
CN111309409A (zh) 一种api服务调用实时统计方法
CN110224896B (zh) 一种网络性能数据采集方法、装置及存储介质
CN110297944B (zh) 分布式xml数据处理方法及系统
WO2017092582A1 (zh) 一种数据处理方法和装置
CN111949521B (zh) 软件性能测试方法及装置
US11294740B2 (en) Event to serverless function workflow instance mapping mechanism
CN112134909A (zh) 时序数据处理方法、装置、系统、服务器及可读存储介质
CN110781180B (zh) 一种数据筛选方法和数据筛选装置
CN112579148A (zh) 基于业务代理的业务消息处理方法、装置及电子设备
CN113986746A (zh) 性能测试方法及其装置、计算机可读存储介质
CN114244821B (zh) 数据处理方法、装置、设备、电子设备和存储介质
CN113342503B (zh) 实时进度反馈方法、装置、设备及存储介质
CN111131499A (zh) 并发和异步任务处理方法及其设备
CN112954300A (zh) 视频监控平台的性能测试装置及方法
CN113746842A (zh) 基于Protobuf协议动态解析的消息发送方法
CN113687958A (zh) 数据处理方法、系统、计算机设备和存储介质
CN114095571A (zh) 数据处理方法、数据服务总线、终端和存储介质
Nilsson et al. Performance evaluation of message-oriented middleware
CN112818183A (zh) 一种数据合成方法、装置、计算机设备和存储介质
CN112667949A (zh) 用于前端网关的数据处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant