CN112579461A - 断言处理方法、系统和存储介质 - Google Patents

断言处理方法、系统和存储介质 Download PDF

Info

Publication number
CN112579461A
CN112579461A CN202011558218.0A CN202011558218A CN112579461A CN 112579461 A CN112579461 A CN 112579461A CN 202011558218 A CN202011558218 A CN 202011558218A CN 112579461 A CN112579461 A CN 112579461A
Authority
CN
China
Prior art keywords
assertion
macro
service request
macro definition
content
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
CN202011558218.0A
Other languages
English (en)
Other versions
CN112579461B (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.)
Chengdu New Hope Finance Information Co Ltd
Original Assignee
Chengdu New Hope Finance Information Co Ltd
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 Chengdu New Hope Finance Information Co Ltd filed Critical Chengdu New Hope Finance Information Co Ltd
Priority to CN202011558218.0A priority Critical patent/CN112579461B/zh
Publication of CN112579461A publication Critical patent/CN112579461A/zh
Application granted granted Critical
Publication of CN112579461B publication Critical patent/CN112579461B/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/3684Test management for test design, e.g. generating new test cases
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种断言处理方法、系统和存储介质,该方法包括:获取调用方的断言服务请求,所述断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式;对所述断言服务请求进行内容解析和合法性校验;根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段;根据所述宏定义代码片段执行本次断言的所述断言操作内容;在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给所述调用方。以此有利于改善现有技术中的测试处理效率较低的问题。

Description

断言处理方法、系统和存储介质
技术领域
本申请涉及测试技术领域,具体而言,涉及一种断言处理方法、系统和存储介质。
背景技术
目前,常见的测试用例平台一般是以RobotFramework或者Jmeter测试框架为基础进行开发的,这些框架对于测试用例的断言(assert)往往需要用户手写一段代码逻辑或者采用固定插件进行处理。
对于以Robotframework为基础的测试框架,在进行断言时,需要用户自己通过python语言开发Keywords(关键字)进行处理,Keywords一般是固定格式的操作。
对于Jmeter而言,该测试框架已经支持了常见的若干种通用组件,例如,BeanShell断言组件(是用于执行shell代码的)、BSF(Bean Scripting Framework,用于支持Java代码)断言组件、Compare断言组件(是用于进行字符串比较的)、HTML断言组件(是针对HTML格式的);响应(response)断言组件(是针对HTTP响应的)、XPath断言组件(是针对xml的XPath,XPath是基于XML的树状结构,用于针对返回信息为XPAth的数据类型进行断言)等。
对于上述的两种测试框架,虽然提供测试用例断言能力,但是断言性能比较基础,只提供简单的执行环境,Jmeter、Robotframework的keywords只能应用于本身的测试框架,断言组件与自身测试框架的平台、业务具有强耦合关系,无法对其他平台进行支持,在兼容性、可扩展性方面的性能较差。这些因素导致需要用户在进行断言时需要做大量的准备工作,测试处理效率较低。
发明内容
本申请的目的在于提供一种断言处理方法、系统和存储介质,能够改善现有技术中的测试处理效率较低的问题。
第一方面,本申请提供一种断言处理方法,包括:
获取调用方的断言服务请求,所述断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式;
对所述断言服务请求进行内容解析和合法性校验;
根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段;
根据所述宏定义代码片段执行本次断言的所述断言操作内容;
在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给所述调用方。
通过上述方法,基于断言服务请求进行内容解析和合法性校验,并为本次断言查询对应的宏定义代码片段,从而依据查询的宏定义代码片段执行本次的断言操作,并将最终封装的断言执行结果作为响应数据反馈给调用方,该处理流程可以将断言过程与调用方的业务进行解耦,可以支持任意测试平台或测试框架的调用,提升了兼容性和可扩展性。通过上述的方法流程进行断言时,可以减少用户在每次执行断言之前需要做的预处理工作量,可以提升测试处理效率。
在可选的实施方式中,所述方法还包括:
响应对于任一个给定的基础宏的二次开发选中操作,为被选中的基础宏生成新的宏定义文件;
或,响应宏定义新建操作,生成新的宏定义文件;
其中,所述基础宏是用于开放给所有用户使用的宏,所述新的宏定义文件是用于开放给指定用户使用的宏,所述宏定义文件中用于存储宏定义名称和代码片段。
通过上述实现方式,用户(例如测试人员)仅需使用简单的操作即可对宏进行二次开发或新建宏,赋予了用户自行开发、完善宏定义功能的权限,相较于只能由平台管理员对软件进行整体升级才更新断言函数的方式,上述实现方式具有较好的可扩展性。
在可选的实施方式中,所述方法还包括:
响应所述指定用户对于所述新的宏定义文件的共享操作,将所述新的宏定义文件的宏使用权限提供给所述共享操作对应的租户用户。
通过上述实现方式,被二次开发或新建的宏可以被分享授权给其他用户使用,具有较好的可扩展性。
在可选的实施方式中,所述方法还包括:
在设定的宏文件存储目录中检测到所述新的宏定义文件时,在设定的加载时间内对所述新的宏定义文件进行热加载,以使所述新的宏定义文件对应的宏被热部署。
通过上述实现方式,可以对各种场景下的宏进行热部署,可以将用户开发的宏尽快进行加载,可降低因为部署新的宏而对大量用户的断言操作所造成的影响,基于热部署的特性还可以将开发、加载的宏共享给更多用户团队使用,改善了现有的测试用例断言与业务框架强耦合所造成的兼容性差、复用度低、难以维护的问题。
在可选的实施方式中,所述对所述断言服务请求进行内容解析和合法性校验,包括:
判断所述断言服务请求中是否存在非法字符,以及判断所述断言服务请求是否属于合法调用。
通过上述实现方式,可以在确定断言服务请求符合要求的情况下查询对应的宏定义代码片段并执行断言操作,避免耗费过多时间对无效的断言服务请求进行处理。
在可选的实施方式中,在所述断言服务请求中的所有字符均为合法字符,并且所述断言服务请求属于合法调用时,所述根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段,包括:
根据对所述断言服务请求进行解析到的内容查找所述断言类型和所述断言表达式对应的目标宏名称;
根据所述目标宏名称转换得到所述目标宏名称对应的宏定义代码片段。
通过上述实现方式,可以快速查找、匹配出本次断言服务请求将涉及的宏定义代码片段,通过先查询目标宏名称再进行宏定义转换的方式有利于提升处理效率,用户无需在每次断言时都自行编写断言函数来进行断言操作。
在可选的实施方式中,所述获取调用方的断言服务请求,包括:
基于HTTP协议下的预设接口获取所述断言服务请求。
相较于内嵌在固定测试软件中的现有断言组件,上述实现方式可以对外提供HTTP服务进行断言,支持多种测试平台、测试框架的调用。
在可选的实施方式中,所述根据所述宏定义代码片段执行本次断言的所述断言操作内容,包括:
在设定的断言时长内,按照本次断言的所述断言操作内容对应的断言要求,通过所述宏定义代码片段执行本次断言操作。
通过上述实现方式,可以避免单次的断言处理时长过于长,有利于尽快向调用方反馈响应数据。
第二方面,本申请提供一种断言处理系统,包括:
获取模块,用于获取调用方的断言服务请求,所述断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式;
断言解析模块,用于对所述断言服务请求进行内容解析和合法性校验;
所述断言解析模块,还用于根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段;
断言执行模块,用于根据所述宏定义代码片段执行本次断言的所述断言操作内容;
响应模块,用于在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给所述调用方。
通过上述装置可以执行前述第一方面的方法,可以将断言过程与调用方的业务进行解耦,可以支持任意测试平台或测试框架的调用,提升了兼容性和可扩展性。基于上述的装置进行断言时,可以减少用户在每次执行断言之前需要做的预处理工作量,可以提升测试处理效率。
第三方面,本申请提供一种存储介质,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时执行前述实施方式任一项所述的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种断言处理方法的流程图。
图2为本申请实施例提供的一种断言处理方法的部分流程图。
图3为本申请实施例提供的一个应用场景下的断言处理流程图。
图4为本申请实施例提供的一种断言处理系统的功能模块框图。
图5为本申请实施例提供的一种电子设备的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
现有的Robotframework(是一款python编写的功能自动化测试框架)、Jmeter测试框架所提供的断言能力,只能应用于本身的框架,无法对其他平台进行支持,在兼容性、可移植性、可扩展性方面的性能较差,难以进行断言功能分享。
现有自动化测试框架的测试用例断言组件,仅提供了简单断言的基础能力和执行环境,无法移植到其他自动化测试框架。另外,测试人员需要会使用一种或多种编程语言才能够完成测试用例断言的开发,对于使用者的要求较高。
此外,发明人经过研究发现,从现有的测试框架对于断言组件的支持方面来看,大部分的断言组件都与自身测试框架存在紧密的耦合关系(通常是断言组件内嵌在测试应用软件中),且很多自动化测试框架不支持断言组件的热部署(热部署是指在软件应用程序正在运行的时候升级软件,却不需要重新启动应用)。
而在互联网时代复杂的分布式架构体系下,实际的业务流程变得越来越复杂,测试用例((Test Case))作为基础的质量保障手段,能够帮助测试和开发发现业务系统的问题,自动化测试用例可以帮助提高处理效率。但是,目前的很多业务系统的数据结构是异构的、复杂的。如果想要最大限度满足业务需求,需要测试用例的断言组件能够尽可能兼容不同的数据源,需要具有良好的兼容性、可扩展性、可移植性。
因此,发明人提出以下实施例予以改善。通过本申请提供的实施例,可以改善现有的断言组件在兼容性、可扩展性、可移植性方面的问题,并且支持用户为断言使用的宏进行开发、维护、分享,断言所使用的宏的复用度较高,并且支持热部署,便于维护。
请参阅图1,图1为本申请实施例提供的一种断言处理方法的流程图。该方法可应用于电子设备,该电子设备可以是服务器或服务器集群。该电子设备上可部署测试用例断言装置的各个功能模块,该测试用例断言装置中的各个功能模块可以实现本申请的断言处理方法。
如图1所示,该方法包括:步骤S11-S15。
S11:获取调用方的断言服务请求,断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式。
其中,在进行断言之前,用户可自行定义待执行的断言内容,并基于定义好的断言内容发起断言服务请求。通过自动化测试平台或自动化测试框架发起断言服务请求的用户可以视为调用方。
在本申请实施例中,支持用户通过多种渠道发起断言服务请求。执行断言处理方法的设备仅需通过预设的接口来监听或获取断言服务请求,并对得到的断言服务请求进行处理。对于发起断言服务请求的用户而言,无需为了断言而特意为多种测试框架下的断言环境分别进行复杂的数据预处理准备工作,仅需按照给定的格式录入断言内容以发起断言服务请求即可。
在本申请实施例中,S11可包括:基于HTTP协议下的预设接口获取断言服务请求。
其中,可以基于HTTPRESTful协议预先设定API(Application ProgrammingInterface,应用程序接口),基于预设的API提供HTTPRESTfulAPI服务。调用方可以通过HTTPClient(支持HTTP协议的客户端编程工具包)功能或其他的调用命令,来发起基于HTTP协议的断言服务请求。HTTP服务兼容任意平台和任意程序语言,业务调用方只需要通过满足HTTP协议的调用服务请求和提交的租户信息,即可进行断言服务调用。
在一个实例中,调用方在发起断言服务请求调用断言服务时,需要录入断言内容,包括本次需要断言校验的内容(例如,以HTML、JSON,XML、Text等格式的文件承载本次的断言操作内容)以及断言要求,例如:BeforeExecute(本次断言的前置操作)、doExecute(本次的断言操作内容)、AfterExecute(本次断言的后置操作)。示例性的,录入的断言内容可以写入断言服务请求的HTTP Request请求的Body(请求体)中。
当然,断言服务请求中还可携带断言类型,断言类型可以是响应断言类型(用于测试校验某个场景下的实际响应内容是否符合预期内容),也可以是数据库断言类型(用于测试是否在特定的情况下与数据库进行有效交互),还可以是其他自定义的类型。
为了简化用户的数据录入处理难度,断言服务请求中可以通过断言表达式来简要描述本次断言的断言内容,用户可在提交断言表达式的情况下发起断言服务请求。
相较于内嵌在固定测试软件中的现有断言组件,上述的实现方式可以对外提供HTTP服务进行断言,支持多种测试平台、测试框架的调用。
S12:对断言服务请求进行内容解析和合法性校验。
其中,在得到断言服务请求的情况下,S12对断言服务请求进行内容解析和合法性校验的步骤可以包括:S121。
S121:判断断言服务请求中是否存在非法字符,以及判断断言服务请求是否属于合法调用。
其中,可以对断言服务请求进行识别,以识别断言服务请求中是否存在非法字符。在无法识别的字符或者存在冲突的字符时,可视为存在非法字符,存在冲突的字符是指,在断言服务请求的断言表达式中存在一些字符/字符串与其他位置的字符/字符串出现了矛盾定义,或,断言表达式的参数引用定义关系不明确(例如,存在未定义的字符)。
合法调用是指断言服务调用需要满足协议格式要求,例如,如果约定调用断言服务时需要以特定调用格式的断言命令发起断言调用请求,但实际上从预设接口处的断言服务请求中识别到的内容与约定的调用格式不符时,可以视为非法调用。
对于非法字符的校验检测以及合法调用性的校验检测,可以统称为对断言服务请求进行异常校验,在通过异常校验的情况下才可以查找到有效的宏。
在确定断言服务请求中存在非法字符,或确定断言服务请求属于非法调用时,可以结束本次调用流程,并向调用方发送用于指示本次断言调用异常的提示消息,作为响应数据。
在断言服务请求中的所有字符均为合法字符,并且断言服务请求属于合法调用时,可执行S13。
通过上述的实现方式,可以在确定断言服务请求符合要求的情况下查询对应的宏定义代码片段并执行断言操作,避免耗费过多时间对无效的断言服务请求进行处理。
S13:根据对断言服务请求进行解析到的内容,查询得到断言类型和断言表达式对应的宏定义代码片段。
其中,在执行断言操作之前,后台开发人员或调用方的测试用户均可以预先发布、上传或更新一些宏名称,以及宏名称对应的宏定义代码片段。
在本申请实施例中,可以采用typescript解释性语言进行宏定义描述,也可以采用其他的任意解释性语言(例如python)进行宏定义描述、宏定义开发、宏定义维护。例如,原始的宏可以采用typescript语言描述,在对该原始的宏进行二次开发、更新时,可以其他语言进行描述。
在对断言服务请求进行解析,得到断言服务请求中的断言内容的情况下,通过断言类型可以区分本次断言需要从什么目录下查找宏,通过断言类型也可以用于确定本次断言需要向调用方发送什么样的响应数据。通过断言表达式可以确定本次断言需要查找什么样的宏。
作为S13的一种实现方式,S13可包括:S131-S132。
S131:根据对断言服务请求进行解析到的内容查找断言类型和断言表达式对应的目标宏名称。
其中,根据断言服务请求可以解析确定本次的断言操作内容,以及本次断言操作的前置操作和/或后置操作。在对断言服务请求进行内容解析后,根据解析到的内容(例如本次断言的上下文信息以及本次的断言操作内容,本次断言的上下文信息用于描述本次断言操作的断言要求,例如前置操作、后置操作等)可以查找一个或多个目标宏的名称,得到一个或多个目标宏名称。查找到的目标宏的数量与实际的断言需求有关,具体查找到的内容与实际的断言要求、测试用例设计有关。
断言表达式中的部分字段或字符可以与目标宏名称相同,也可以不同,例如一个断言表达式中的功能字符是“==”时,可以根据从断言表达式中的“==”查询到目标宏名称为equal的宏,并匹配出该宏的宏定义代码片段,如果“==”两方(左、右)的数据是变量,那么在进行断言的时候需要根据上下文依赖关系对应的前置操作、后置操作执行对应的断言操作。
S132:根据目标宏名称转换得到目标宏名称对应的宏定义代码片段。
根据预先设置的每个宏名称(宏名称即为宏定义名称)与宏定义代码片段之间的映射关系,对于每个目标宏名称,可以查找到对应的宏定义代码片段。
通过上述的实现方式,可以快速查找、匹配出本次断言服务请求将涉及的宏定义代码片段,通过先查询目标宏名称再进行宏定义转换的方式有利于提升处理效率,用户无需在每次断言时都自行编写断言函数来进行断言操作。
S14:根据宏定义代码片段执行本次断言的断言操作内容。
在得到宏定义代码片段之后,可以对查找到的宏定义代码片段进行静态语法校验,以在执行断言之前检测代码是否存在语法错误。
在确定本次断言的断言操作内容、断言类型和断言表达式的情况下,基于断言表达式的内容可以从断言服务请求指定的断言环境(指定的断言环境可以描述在HTML、JSON,XML、Text等格式的文件中)下获取本次断言所需的参数,并将获取到的参数代入查找到的宏定义代码片段中,再次对宏定义代码片段进行语法校验。在将宏定义代码片段中代入本次断言的参数后,仍然通过语法校验的情况下,可基于断言类型和断言表达式执行本次断言的断言操作内容。示例性地,断言过程中的语法校验可以是判断代码的语法是否遵循ES6语法,如果遵循则通过语法校验,未遵循则视为未通过语法校验。
其中,在通过断言服务请求确定出本次断言操作与上下文信息有依赖关系时,例如,在断言表达式中存在一些变量需要根据其他断言操作的结果确定时,或断言执行结束后的结果需要作为其他断言操作的执行前提时,可以根据从断言服务请求中解析出的断言要求,获取相应的宏定义代码片段,或由相应宏定义代码片段执行某次断言操作后得到的结果。具体的断言要求可通过本次断言操作的前置操作、后置操作的上下文信息确定。
其中,S14中根据宏定义代码片段执行本次断言的断言操作内容的步骤,可以包括:在设定的断言时长内,按照本次断言的断言操作内容对应的断言要求,通过宏定义代码片段执行本次断言操作。
示例性地,设定的断言时长可以是3秒、5秒、7秒等时长。在一个实例中,设定一次断言操作的默认处理时长不超过5秒,以此可以避免单次的断言处理时长过于长,有利于尽快向调用方反馈响应数据。
S15:在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给调用方。
其中,断言执行结果可包括:本次断言的执行结果(成功、失败、未执行、执行断言后得到的数据结果等)、结果标识(bizCode)、本次断言的调试信息(Debug信息)。其中,在确定存在断言异常的情况下,断言执行结果中还可包括断言异常信息(或称堆栈跟踪信息StackTrace),在确定存在断言异常的时候可将断言执行过程中跟踪得到的堆栈信息发送给用户。
在本申请实施例中,对于任意自动化测试框架,用户可以使用HTTPClient请求来访问本申请实施例为断言提供的RESTFul服务。
在一个实例中,调用服务请求的请求格式可以是:requests.post("URL","HEADER","Body"),请求结果(即,响应数据)的格式可以是:Result(result,bizCode,debug,stackTrace)。该例可以支持多测试环境的兼容性。
其中,请求中的URL表示本申请提供的一个断言服务地址,可以兼容多种测试平台,兼容多种测试框架,HEADER中携带本次断言的附加信息,例如租户认证信息,用于区分不同用户的权限,Body中包括本次断言实际的断言内容及用于查找宏定义代码片段的断言表达式的内容,例如“Body”中携带的内容可以包括:{"beforeExecute":null,"doExecute":"WALLE_EQUALSE(\"123\",\"345\")","afterExecute":null,timeOut:5}。
其中,该Body内容中的"beforeExecute":null,表示本次断言执行前不做任何操作,该Body内容中的"afterExecute":null,表示本次断言执行后也不做任何操作。根据"doExecute":"WALLE_EQUALSE(\"123\",\"345\")"可以得知,本次断言需要执行的是与WALLE_EQUALS这一字符串匹配的宏,在查找到该宏对应的宏定义代码片段后,进行语法校验,并将本次断言获取到的参数:"123","345",代入查找到的宏定义代码片段,再次进行语法校验,然后通过宏定义代码片段执行本次断言所需的字符串比较功能,最终得到本次断言的断言执行结果(即,请求结果),包括:断言的直接结果result;执行的业务代码bizCode,00代表成功;断言执行的详细信息debug;断言执行的异常信息stackTrace。其中,根据该Body内容中的“timeOut:5”可以得知,本次断言需要在5秒内完成,如果在5秒内未得到有效的比较结果则可以直接返回断言执行结果(例如null、超时等)。
如果该例中的beforeExecute字段不为null,且doExecute中的断言表达式中存在与beforeExecute中的变量有关的参数,可以获取更多的宏定义代码片段,当然,在本次断言依赖的是上一次断言的执行结果时,可以无需重复获取相同的代码片段来执行重复的断言内容,仅需获取历史执行结果来辅助执行本次断言操作即可。同理,对于afterExecute不为空的情况,可以在本次断言操作执行完成后,将本次断言执行的结果进行预存,并在执行到与afterExecute有关的断言时,调出预存的结果使用。
可选的,为了避免在较长的时间内得不到断言响应,可以将上述设定的时长视为一次断言调用场景下允许的总处理时长,例如前述的5秒可以视为执行本次断言的前置操作(对应beforeExecute)、本次断言操作(对应doExecute)和本次断言的后置操作(对应afterExecute)的总时长。
可选的,调用服务请求中的参数可以是JSON数据,断言执行结果的返回值可以是JSON格式。
在一个实例中,根据上述的请求可以查找到的目标宏是用于进行字符串匹配的宏:WALLE_EQUALSE(expectString,actualString)。
其中,WALLE_EQUALSE这个目标宏表示用于对两个字符串进行比较,且每个字符串的长度不超过10MB,expectString表示期望结果,actualString表示实际结果。该目标宏的定义返回值为true(真)或者false(假),在期望结果与实际结果相符时返回值为true,不符时返回值为false。
在另一个实例中,根据另一个断言服务请求可以查找到的目标宏是用于对JSON数据进行索引的宏:WALLE_JSON_FIND(users.[0].name,actualBody)。
其中,WALLE_JSON_FIND这一目标宏表示用于对JSON数据进行查找,users.[0].name表示待查找的用户列表中的第一个用户的名称,actualBody表示期望的名称,在找到该用户的名称与期望的名称相符时,返回值为true,在查找确定出该用户的名称与期望的名称不符时,返回值为false,即查找到有效的结果则返回对应的值。如果查找不到该用户的名称则返回null(空)。
通过上述的方法,基于断言服务请求进行内容解析和合法性校验,并为本次断言查询对应的宏定义代码片段,从而依据查询的宏定义代码片段执行本次的断言操作,并将最终封装的断言执行结果作为响应数据反馈给调用方,该处理流程可以将断言过程与调用方的业务进行解耦,可以支持任意测试平台或测试框架的调用,提升了兼容性和可扩展性。通过上述的方法流程进行断言时,可以减少用户在每次执行断言之前需要做的预处理工作量,可以提升测试处理效率。
在本申请实施例中,为了提升兼容性、可扩展性、可移植性,为了便于断言功能的分享,允许用户进行宏定义开发、宏定义维护或更新,支持宏定义热部署。
如图2所示,上述的方法还可包括:S16或S17。
S16:响应对于任一个给定的基础宏的二次开发选中操作,为被选中的基础宏生成新的宏定义文件。
其中,基础宏是用于开放给所有用户使用的宏,新的宏定义文件是用于开放给指定用户使用的宏,宏定义文件中用于存储宏定义名称和代码片段。
在本申请实施例中,每个用户可以视为一个租户。基础宏可以是由后台开发人员发布并提供给所有租户使用的宏,大多数情况下,基础宏已经能够满足通用断言场景,如果面临特殊测试场景需要进行特殊的断言处理,对于任一租户,可以对基础宏进行二次开发,二次开发后得到的新的宏默认提供给执行了二次开发的该租户,该租户可以选择用新的宏替换对应的基础宏,但是并不会影响其他租户对于原始的基础宏的正常使用。对于为基础宏进行二次开发的目标用户A(租户),在完成二次开发后得到新的宏定义文件后,可以选择将该新的宏定义文件分享给该目标用户A以外的其他用户,目标用户A以及得到分享的使用权限的其他用户即为指定用户。
S17:响应宏定义新建操作,生成新的宏定义文件。
在任一用户想要自定义、新建宏的情况下,可以进行宏定义新建操作,并录入宏定义名称和宏定义代码片段,基于此可以得到新的宏定义文件。同理,新建宏的用户可以选择将该新的宏定义文件分享给其他用户。
通过上述的实现方式,用户(例如测试人员)仅需使用简单的操作即可对宏进行二次开发或新建宏,赋予了用户自行开发、完善宏定义功能的权限,相较于只能由平台管理员对软件进行整体升级才更新断言函数的方式,上述实现方式具有较好的可扩展性。
基于S16或S17,上述方法还可以包括:S18。
S18:响应指定用户对于新的宏定义文件的共享操作,将新的宏定义文件的宏使用权限提供给共享操作对应的租户用户。
对于二次开发或新建的宏所对应的宏定义文件,执行二次开发或新建操作的租户(即,指定用户)具有授权管理权限,可以将新的宏定义文件共享给其他的租户。在接受到共享操作时,可将新的宏定义文件分享给该共享操作对应的共享对象(即,共享操作对应的租户用户),以此使得更多的用户可以获得基础宏以外的丰富断言功能,有利于团队断言任务的共享处理。
通过上述的实现方式,被二次开发或新建的宏可以被分享授权给其他用户使用,具有较好的可扩展性。
可选的,在本申请实施例中,可预先设置特定的宏文件存储目录,用于存储能够提供给租户使用的所有可用的宏定义文件(可以是经过分类的),上述方法还可以包括:S19。
S19:在设定的宏文件存储目录中检测到新的宏定义文件时,在设定的加载时间内对新的宏定义文件进行热加载,以使新的宏定义文件对应的宏被热部署。
其中,可以定期或不定期的对设定的宏文件存储目录(这里的宏文件存储目录是统称,目录及目录中的文件可以进行分级、分类)进行扫描检测,在该目录中的宏定义文件发生变更时,视为向对应租户提供的宏发生变更。
在宏文件存储目录中存在新的宏定义文件时(此处的新的宏定义文件可以是租户进行二次开发或新建得到的,也可以是非租户的后台开发人员提供的),可以在5秒、8秒、10秒、12秒等设定的加载时间内对检测到的新的宏定义文件进行热加载,以使新的宏定义文件能够被热部署到开放给部分或全部租户的断言处理平台。在一个实例中,从目录中检测到新的宏定义文件至对新的宏进行动态解析、完成热加载(宏的热加载生效)的热部署流程仅需10秒,无需切断所有的断言服务,不会影响租户对于其他宏的正常使用。
通过上述的实现方式,可以对各种场景下的宏进行热部署,可以将用户开发的宏尽快进行加载,可降低因为部署新的宏而对大量用户的断言操作所造成的影响,基于热部署的特性还可以将开发、加载的宏共享给更多用户团队使用,改善了现有的测试用例断言与业务框架强耦合所造成的兼容性差、复用度低、难以维护的问题。
通过本申请的上述基于宏定义实现的断言处理方法,可以支持多种数据类型、多种断言类型的断言处理,可以通过不同类型的宏提供不同的断言功能,例如可以通过提供的StringAsserts、ArrayAsserts、HashAsserts、JSONParser、XMLParser、HTMLParser、HTTPParser等基础宏提供的功能,对不同数据类型的断言服务请求进行处理,涉及到数据源结果的断言可通过DataSourceAsserts的基础宏进行处理。
在一个应用场景下,如图3所示,当通过设定的接口接收到断言服务请求后,对断言服务请求中与本次断言相关的内容进行异常校验(包括格式校验),并解析出本次断言的上下文信息,确定本次断言的前置操作、本次断言需要执行的内容、本次断言的后置操作。通过解析得到的内容查找出本次断言需要使用的目标宏名称(一个或多个),进行宏定义的代码转换,得到目标宏的宏定义代码片段(本次、前置、后置这三部分都可以分别查找相应的宏以及对应的宏定义代码片段)。在得到宏定义代码片段后,对代码片段进行解析处理,根据经过语法校验的代码片段,按照本次断言服务请求的断言要求限定的断言处理的先后顺序依次执行本次断言的前置操作(处理时长1秒)、本次断言操作(处理时长3秒)、本次断言的后置操作(处理时长1秒),在该三个阶段的断言都成功执行的情况下,最终可以得到断言执行结果,并封装,向调用方返回响应数据。在前置操作、本次断言操作、后置操作中的任一环节出现异常的情况下,可以结束本次断言服务流程,并输出断言异常的信息。
而如果确定出某次断言操作不需要执行前置或后置操作处理,则可以省略相应的步骤。
基于同一发明构思,请参阅图4,本申请实施例还提供一种断言处理系统。该系统用于执行前述的断言处理方法。
如图4所示,该断言处理系统中的功能模块包括:
获取模块201,用于获取调用方的断言服务请求,断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式。
断言解析模块202,用于对断言服务请求进行内容解析和合法性校验。
断言解析模块202,还用于根据对断言服务请求进行解析到的内容,查询得到断言类型和断言表达式对应的宏定义代码片段。
断言执行模块203,用于根据宏定义代码片段执行本次断言的断言操作内容。
响应模块204,用于在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给调用方。
通过上述的装置可以执行前述的方法,可以将断言过程与调用方的业务进行解耦,可以支持任意测试平台或测试框架的调用,提升了兼容性和可扩展性。基于上述的装置进行断言时,可以减少用户在每次执行断言之前需要做的预处理工作量,可以提升测试处理效率。
可选的,上述的系统还可包括宏定义开发模块,用于响应对于任一个给定的基础宏的二次开发选中操作,为被选中的基础宏生成新的宏定义文件;或,响应宏定义新建操作,生成新的宏定义文件;其中,所述基础宏是用于开放给所有用户使用的宏,所述新的宏定义文件是用于开放给指定用户使用的宏,所述宏定义文件中用于存储宏定义名称和代码片段。
可选的,上述的系统还可包括授权分享模块,用于响应所述指定用户对于所述新的宏定义文件的共享操作,将所述新的宏定义文件的宏使用权限提供给所述共享操作对应的租户用户。
可选的,上述的系统还可包括热部署模块,用于在设定的宏文件存储目录中检测到所述新的宏定义文件时,在设定的加载时间内对所述新的宏定义文件进行热加载,以使所述新的宏定义文件对应的宏被热部署。
可选的,上述断言解析模块202还可用于:判断所述断言服务请求中是否存在非法字符,以及判断所述断言服务请求是否属于合法调用。
可选的,上述断言解析模块202还可用于:在所述断言服务请求中的所有字符均为合法字符,并且所述断言服务请求属于合法调用时,根据对所述断言服务请求进行解析到的内容查找所述断言类型和所述断言表达式对应的目标宏名称;根据所述目标宏名称转换得到所述目标宏名称对应的宏定义代码片段。
可选的,上述获取模块201还可用于:基于HTTP协议下的预设接口获取所述断言服务请求。
可选的,上述断言执行模块203还可用于:在设定的断言时长内,按照本次断言的所述断言操作内容对应的断言要求,通过所述宏定义代码片段执行本次断言操作。
关于该系统的其他细节可以参照前述断言处理方法的相关描述,在此不再赘述。
基于同一发明构思,如图5所示,本申请实施例还提供一种电子设备300。该电子设备300包括:存储器301、处理器302和通信组件303。该电子设备300可用于实现前述的断言处理方法。该电子设备可以是计算机、服务器。
通信组件303包括通信总线,通信总线用于实现电子设备300中各个组件之间的直接或间接连接。
存储器301是一种存储介质,可以是高速RAM存储器,也可以是非易失性存储器(non-volatile memory)。
处理器302具有运算处理能力,可以是但不限于中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等通用处理器;还可以是专用处理器或者其他可编程逻辑器件搭建的处理器。处理器302可以实现本申请实施例提供的方法、步骤及逻辑框图。
存储器301上存储有处理器302可执行的计算机程序,处理器302用于执行存储器301中存储的计算机程序,从而实现前述实施例提供的方法中的部分或全部步骤。
需要说明的是,图5所示结构仅作为示意,具体应用时可以有更多的组件,或具有不同于图5所示的其他配置方式。
基于同一发明构思,本申请实施例提供还一种存储介质,该存储介质中存储有计算机程序,计算机程序被处理器执行时执行前述的断言处理方法。
综上所述,通过本申请实施例提供的断言处理方法、系统和存储介质,可以将断言执行功能与自动化测试用例解耦,便于对断言处理功能进行维护、移植、拓展,并且执行断言所需的宏定义可支持用户进行二次开发与授权分享,因此具有更好的兼容性和可扩展性,整体方法所用的宏支持热部署,可降低多用户使用场景下因宏部署带来的影响。整个方法可以降低用户需要在线下执行的工作量,无需用户精通多种编程语言,用户在需要进行断言时仅需提交符合格式的断言服务请求即可,整个断言执行过程、以及断言所用的宏定义文件的开发、维护过程,都可以较快完成,响应速度快,可提升测试处理效率。
在本申请所提供的实施例中,应该理解到,所揭露实施例,可以通过其它的方式实现。以上所描述的实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统。另一点,所讨论的相互之间的连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的模块可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部内容来实现本实施例方案的目的。再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种断言处理方法,其特征在于,包括:
获取调用方的断言服务请求,所述断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式;
对所述断言服务请求进行内容解析和合法性校验;
根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段;
根据所述宏定义代码片段执行本次断言的所述断言操作内容;
在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给所述调用方。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应对于任一个给定的基础宏的二次开发选中操作,为被选中的基础宏生成新的宏定义文件;
或,响应宏定义新建操作,生成新的宏定义文件;
其中,所述基础宏是用于开放给所有用户使用的宏,所述新的宏定义文件是用于开放给指定用户使用的宏,所述宏定义文件中用于存储宏定义名称和代码片段。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
响应所述指定用户对于所述新的宏定义文件的共享操作,将所述新的宏定义文件的宏使用权限提供给所述共享操作对应的租户用户。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在设定的宏文件存储目录中检测到所述新的宏定义文件时,在设定的加载时间内对所述新的宏定义文件进行热加载,以使所述新的宏定义文件对应的宏被热部署。
5.根据权利要求1所述的方法,其特征在于,所述对所述断言服务请求进行内容解析和合法性校验,包括:
判断所述断言服务请求中是否存在非法字符,以及判断所述断言服务请求是否属于合法调用。
6.根据权利要求5所述的方法,其特征在于,在所述断言服务请求中的所有字符均为合法字符,并且所述断言服务请求属于合法调用时,所述根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段,包括:
根据对所述断言服务请求进行解析到的内容查找所述断言类型和所述断言表达式对应的目标宏名称;
根据所述目标宏名称转换得到所述目标宏名称对应的宏定义代码片段。
7.根据权利要求1所述的方法,其特征在于,所述获取调用方的断言服务请求,包括:
基于HTTP协议下的预设接口获取所述断言服务请求。
8.根据权利要求1所述的方法,其特征在于,所述根据所述宏定义代码片段执行本次断言的所述断言操作内容,包括:
在设定的断言时长内,按照本次断言的所述断言操作内容对应的断言要求,通过所述宏定义代码片段执行本次断言操作。
9.一种断言处理系统,其特征在于,包括:
获取模块,用于获取调用方的断言服务请求,所述断言服务请求中包括断言类型、本次断言的断言操作内容以及断言表达式;
断言解析模块,用于对所述断言服务请求进行内容解析和合法性校验;
所述断言解析模块,还用于根据对所述断言服务请求进行解析到的内容,查询得到所述断言类型和所述断言表达式对应的宏定义代码片段;
断言执行模块,用于根据所述宏定义代码片段执行本次断言的所述断言操作内容;
响应模块,用于在断言执行完成时,对断言执行结果进行封装,并将封装后的断言执行结果作为响应数据发送给所述调用方。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时执行权利要求1-8任一项所述的方法。
CN202011558218.0A 2020-12-24 2020-12-24 断言处理方法、系统和存储介质 Active CN112579461B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011558218.0A CN112579461B (zh) 2020-12-24 2020-12-24 断言处理方法、系统和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011558218.0A CN112579461B (zh) 2020-12-24 2020-12-24 断言处理方法、系统和存储介质

Publications (2)

Publication Number Publication Date
CN112579461A true CN112579461A (zh) 2021-03-30
CN112579461B CN112579461B (zh) 2024-07-30

Family

ID=75140623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011558218.0A Active CN112579461B (zh) 2020-12-24 2020-12-24 断言处理方法、系统和存储介质

Country Status (1)

Country Link
CN (1) CN112579461B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113535557A (zh) * 2021-07-14 2021-10-22 上海中通吉网络技术有限公司 一种基于JMeter的断言方法及装置
CN114422638A (zh) * 2022-01-13 2022-04-29 北京百度网讯科技有限公司 云手机控制方法、装置、设备、介质及程序产品
CN115629999A (zh) * 2022-12-22 2023-01-20 云账户技术(天津)有限公司 一种断言检测方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101415A (zh) * 2018-06-25 2018-12-28 平安科技(深圳)有限公司 基于数据库比对的接口测试方法、系统、设备和存储介质
CN109614313A (zh) * 2018-10-25 2019-04-12 平安科技(深圳)有限公司 自动化测试方法、装置及计算机可读存储介质
CN110427188A (zh) * 2019-08-02 2019-11-08 深圳前海微众银行股份有限公司 单测断言程序的配置方法、装置、设备及存储介质
CN110532185A (zh) * 2019-08-29 2019-12-03 中国工商银行股份有限公司 测试方法、装置、电子设备和计算机可读存储介质
CN110990250A (zh) * 2019-10-12 2020-04-10 平安医疗健康管理股份有限公司 接口测试方法、装置、设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109101415A (zh) * 2018-06-25 2018-12-28 平安科技(深圳)有限公司 基于数据库比对的接口测试方法、系统、设备和存储介质
CN109614313A (zh) * 2018-10-25 2019-04-12 平安科技(深圳)有限公司 自动化测试方法、装置及计算机可读存储介质
CN110427188A (zh) * 2019-08-02 2019-11-08 深圳前海微众银行股份有限公司 单测断言程序的配置方法、装置、设备及存储介质
CN110532185A (zh) * 2019-08-29 2019-12-03 中国工商银行股份有限公司 测试方法、装置、电子设备和计算机可读存储介质
CN110990250A (zh) * 2019-10-12 2020-04-10 平安医疗健康管理股份有限公司 接口测试方法、装置、设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113535557A (zh) * 2021-07-14 2021-10-22 上海中通吉网络技术有限公司 一种基于JMeter的断言方法及装置
CN114422638A (zh) * 2022-01-13 2022-04-29 北京百度网讯科技有限公司 云手机控制方法、装置、设备、介质及程序产品
CN114422638B (zh) * 2022-01-13 2024-06-11 北京百度网讯科技有限公司 云手机控制方法、装置、设备、介质及程序产品
CN115629999A (zh) * 2022-12-22 2023-01-20 云账户技术(天津)有限公司 一种断言检测方法及装置

Also Published As

Publication number Publication date
CN112579461B (zh) 2024-07-30

Similar Documents

Publication Publication Date Title
CN109885311B (zh) 一种应用程序的生成方法及设备
CN112579461B (zh) 断言处理方法、系统和存储介质
WO2018113596A1 (zh) 应用程序审核操作权限处理方法、装置和存储介质
US6185583B1 (en) Parallel rule-based processing of forms
CN108804215B (zh) 一种任务处理方法、装置以及电子设备
CN111143087A (zh) 一种接口调用方法、装置、存储介质和服务器
CN114981775B (zh) 用于api综合管理的基于云的api元数据管理方法及系统
US11720532B2 (en) System and method for customized graphQL data-handling scripts
CN111782526A (zh) 一种接口测试方法、装置、电子设备及存储介质
CN112540924A (zh) 接口自动化测试方法、装置、设备及存储介质
US20220237057A1 (en) Code consolidation system
CN109324958B (zh) 一种rest统一校验方法、装置、设备及可读存储介质
CN112559344A (zh) 远程mock测试方法及系统
CN112363907A (zh) Dubbo接口的测试方法、装置、电子装置和存储介质
WO2023151397A1 (zh) 应用程序部署方法、装置、设备及介质
CN111752838A (zh) 问题排查方法、装置、服务器及存储介质
CN113672233B (zh) 一种基于Redfish的服务器带外管理方法、装置及设备
US11740995B2 (en) Source quality check service
CN113031964B (zh) 一种大数据应用的管理方法、装置、设备及存储介质
CN105610908B (zh) 一种基于安卓设备的samba服务实现方法及系统
CN114490892A (zh) 一种基于datax的数据传输方法和装置
US20050034120A1 (en) Systems and methods for cooperatively building public file packages
CN113608996B (zh) 一种镜像编译测试方法、系统、装置及可读存储介质
CN117171800B (zh) 一种基于零信任防护体系的敏感数据识别方法及装置
CN117493162B (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