具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例涉及的实体对象,可以是各种需要实现幂等性的业务对应的业务程序,这里提到的业务可以是金融领域的各种业务,如支付、提现、代扣、理财等等。在实际处理相应业务的过程中,为了实现幂等性,可以在提供相应业务的业务处理方的数据库中建立幂等表,每次处理业务请求之前,均要求将该业务请求的某种唯一标识信息(例如“业务请求单号”、“业务请求单号+业务类型”、“业务请求单号+业务请求来源”等)插入幂等表,如果插入成功,说明业务处理方是第一次处理该业务请求,则继续正常的业务处理流程;反之如果插入失败,则说明幂等表中已经存在该业务请求的信息,即业务处理方之前曾经处理过该业务请求,那么可以直接确定该请求为重复请求,进而停止处理该请求。
但是,幂等功能的开发方在构建实现幂等性的业务程序(实体对象)时,可能不会如事先约定的那样进行唯一性约束,如,根本不做唯一性约束,或者只将事先约定的信息中的部分信息作为唯一标识信息等等。这样会导致实际处理业务请求时,发生幂等性无效的状况,进而导致业务处理方因业务请求方的重复请求,发生重复的业务处理,造成用户的资金损失。
为了避免因开发方的过失,造成业务处理方对业务请求方的重复请求,发生重复的业务处理,需要检验开发方处理后的业务程序是否能有效的校验出重复请求,实现幂等性。一般校验是由检验人员查看被开发方预先标好的业务程序(程序代码)。但是,很多时候校验人员没有足够的时间一一查看开发方标记的所有程序,只会查看标记的部分程序,因此,容易漏检存在缺陷的程序,发生幂等性无效的状况,进而导致业务处理方因业务请求方的重复请求,发生重复的业务处理,造成用户的资金损失。本申请的技术方案,针对开发方的失误易造成业务处理方难以实现幂等性的问题,提出解决方案。
本申请的方案,为了解决幂等功能的开发方的失误易造成业务处理方难以实现幂等性的问题。可以在幂等功能的开发方完成业务完成实体对象的开发后,基于实体对象为实现幂等性预定进行处理的幂等字段,构建多个携带有相同的幂等字段的测试用例,然后分别执行构建的各测试用例,根据各测试用例的执行结果,即可以快速确定实体对象针对幂等字段相同的测试用例是否有执行幂等处理,进而能确定实体对象是否能实现幂等性。以下结合附图详细说明本申请的幂等有效性测试过程。
请参阅图1,图1是本申请一示例性实施例示出的幂等有效性测试方法的流程图,可以包括以下步骤S101-S104:
步骤S101、获取待测试的实体对象中包含的幂等字段;所述幂等字段是所述实体对象为实现幂等性预定进行处理的字段。
步骤S102、基于获取的幂等字段构建至少两个测试用例;构建的各测试用例携带的幂等字段相同。
步骤S103、分别执行构建的各测试用例。
步骤S104、基于各测试用例的执行结果确定所述实体对象的幂等性是否有效。
本申请实施例,实体对象可以是各种需要实现幂等性的业务对应的业务程序,这里提到的业务可以是金融领域的各种业务,例如,支付、提现、代扣、理财等业务,实体对象可以是具有支付、代扣、理财和提现等功能中的至少一项的应用软件。
实际应用中,可以在幂等功能的开发方完成对实体对象的开发时、实体对象的定期维护期间或者其他预定时期,对实体对象的幂等性进行测试,测试其是否能有效实现幂等性。测试过程中,所获取的幂等字段可以是幂等功能的开发方基于预先与业务处理方的约定,为实现幂等性预定进行幂等处理的字段。例如:预定处理的对象为“业务请求单号”、“业务请求单号+业务类型”或者“业务请求单号+业务请求来源”等字段。
为了便于快速识别到这些幂等字段,开发方在开发过程中,一般会用预定的标记来指示幂等字段。比如,开发方是通过在业务处理方的数据库中建立幂等表实现幂等时,可以在幂等表对应的实体对象中,对预定处理的“业务请求单号”、“业务请求单号+业务类型”或者“业务请求单号+业务请求来源”等对象,用预定的注解标签进行标记。针对这种状况,本申请的实施例可以通过以下操作获取待测试的实体对象中包含的幂等字段:
对所述实体对象进行拦截。
对拦截出的实体对象进行解析,解析出带有预定的注解标签的字段为幂等字段。
本例子中,幂等字段是实体对象实现幂等性所需要幂等处理的关键字段。在实际应用中,以Spring(轻量级的Java开发框架)为例,可以通过Spring的AOP(Aspect OrientedProgramming)拦截所有的数据访问层类,并获取输入参数,得到实体对象,从实体对象中解析出带有预定的注解标签的字段为幂等字段。然后可以根据实体对象中的字段与幂等表中的数据之间的对应关系,获取注解标签所标注的幂等字段对应的数据的属性。
在获取到幂等字段后,为了测试出开发方开发的实体对象的幂等性是否有效,可以基于获取的幂等字段构建测试用例,构造好后,在某些例子中,可以将构造的测试用例,传入到DAO(数据库访问层)类的代码中进行执行。
执行构建的每个测试用例时,可以基于每个测试用例携带的测试参数,构建测试请求(某种业务请求),所构建的各测试请求需要携带有相同的幂等字段,然后将构建的每个测试请求向实体对象发送,并接收所述实体对象针对每个测试请求返回的处理结果。某些例子中,可以通过DAO(数据库访问层)的代码执行测试请求。测试参数与实体对象要实现的业务功能相关,例如,要实现支付功能时,测试参数包括构建支付请求所需的参数。
向实体对象发送构建好的测试请求时,可以按预定次序发送。如果实体对象没有实现幂等性的程序代码,每接收到一个测试请求,即会执行一次正常的业务处理,并返回一次正常处理的处理结果。如果实体对象具备实现幂等性的程序代码,每接收到一个测试请求,在执行正常的处理流程前,会先对接收到的测试请求进行幂等处理,即根据其所携带的幂等字段判断本次接收到的测试请求与已接收的测试请求是否相同,如果相同,则确定该请求为重复请求,停止处理该请求,返回禁止处理的处理结果,该处理结果能反映该请求为重复请求;如果不同,则确定该请求不是重复请求,为首次请求,继续正常的处理,返回正常处理的处理结果,该处理结果能反映该请求不是重复请求。
但是,在实现幂等性的程序代码有误时,接收到测试请求进行处理时,业务处理方会给出错误的处理结果,例如,将重复请求误确定为首次请求,然后继续正常的业务处理,返回正常处理的处理结果,该处理结果能反映该重复请求不是重复请求。
此外,考虑到实体对象可能会对测试用例有其他约束条件,比如不同测试用例的标号不同。为了避免因其他约束条件导致对实体对象的误判,除携带的幂等字段相同外,所构建的各测试用例携带的其他信息可以各不相同。例如,开发方是通过在业务处理方的数据库中建立幂等表实现幂等时,幂等字段为满足所述数据库的唯一性约束条件的幂等标识。除“测试请求单号”、“测试请求单号+测试类型”或者“测试请求单号+测试请求来源”等对象相同外,各测试用例的其他信息各不相同。
本申请实施例,在针对测试请求进行的幂等处理可以采用与现有技术相同的方案,即:每次处理测试请求之前,将该测试请求的某种唯一标识信息(例如“业务请求单号”、“业务请求单号+业务类型”、“业务请求单号+业务请求来源”等)插入预定的幂等表,如果插入成功,说明实体对象是第一次处理该测试请求,则继续正常的处理流程;反之如果插入失败,则说明幂等表中已经存在该测试请求的信息,即实体对象之前曾经处理过该测试请求,那么可以直接确定该请求为重复请求,进而停止处理该请求。当然,本申请并不需要对具体的幂等处理方案进行限定。
在实体对象对测试请求处理后,会向测试方返回处理结果,如果接收的处理结果表明仅一个测试请求被处理,则确定所述实体对象的幂等性有效;如果接收的处理结果表明两个以上的测试请求被处理,则确定所述实现对象的幂等性无效。这里的幂等性无效可以指实体对象未对测试请求进行幂等处理,也可以指实体对象对测试请求的校验有误,本申请并不需要对具体的校验方式进行限定。
某些例子中,本申请的设计人员基于构建的测试用例构建测试请求,并向实体对象发送第一个测试请求后,可能会接收到表示该请求为重复请求的处理结果,出现这种状况,可能是本次构建的测试请求与实体对象已处理的请求相同,也可能是实体对象中实现幂等性的程序代码有误,难以准确判定出实体对象是否对测试请求进行了有效的幂等处理。为了解决该问题,本申请实施例可以,基于所述幂等字段,基于获取的幂等字段重新构建至少两个测试用例;重新构建的测试用例携带的幂等字段相同,且与已执行的测试用例携带的幂等字段不同,重复分别执行重新构建的各测试用例、基于各测试用例的执行结果确定所述实体对象的幂等性是否有效的步骤,然后根据接收的处理结果确定实体对象的幂等性是否有效。
在其他实施例中,本申请实施例可以采取循环操作来实现幂等有效性的测试,具体实现过程具可以参阅图2,图2是本申请一示例性实施例示出的幂等有效性测试方法的流程图,可以包括以下步骤S201-S207:
步骤S201、获取待测试的实体对象中包含的幂等字段;所述幂等字段是所述实体对象为实现幂等性预定进行处理的字段。
步骤S202、基于获取的幂等字段构建至少两个测试用例,本次构建的各测试用例携带的幂等字段相同,与已执行的测试用例所携带的幂等字段不同。
步骤S203、基于每个测试用例所携带的测试参数,构建携带有所述幂等字段的测试请求。
步骤S204、向所述实体对象发送构建的每个测试请求。
步骤S205、接收所述实体对象针对每个测试请求返回的处理结果。
步骤S206、基于接收的处理结果,判断发送的第一个测试请求是否被处理,如果未被处理,则返回执行步骤S202,如果被处理,则执行步骤S207。
步骤S207、基于接收的处理结果,确定所述实体对象的幂等性是否有效。
本申请实施例所涉及的技术内容,与图1对应的实施例所涉及的技术内容相应,在此不再赘述。
本申请通过采取循环操作来实现幂等有效性的测试,可以排除因构建的测试用例请求与已执行的测试用例重复,而影响幂等有效性测试结果。
以下结合附图3例举一个应用实例,将幂等有效性测试方法具体应用到支付领域的支付业务场景。相应地,实体对象在本应用示例中为具有支付功能的应用软件(支付APP),测试请求在本应用示例中为支付请求,处理结果在本应用示例中为支付处理结果,实体对象对应的业务处理方在本应用示例中为支付方,这里提到的支付方可以是银行、第三方支付平台等等。
此外,本应用实施例中所述支付涉及的技术载体,可以包括近场通信(Near FieldCommunication,NFC)、WIFI、3G/4G/5G、POS机刷卡技术、二维码扫码技术、条形码扫码技术、蓝牙、红外、短消息(Short Message Service,SMS)、多媒体消息(Multimedia MessageService,MMS)等。
请参阅图3,图3是本申请一示例性实施例示出的幂等有效性测试方法的流程图,可以包括以下步骤S301-S304:
步骤S301、获取具有支付功能的应用软件中包含的幂等字段;所述幂等字段是所述应用软件为实现幂等性预定进行处理的字段。
步骤S302、基于获取的幂等字段构建至少两个测试用例;构建的各测试用例携带的幂等字段相同。
步骤S303、分别执行构建的各测试用例。
步骤S304、基于各测试用例的执行结果确定所述应用软件的幂等性是否有效。
本申请实施例中,本申请实施例的步骤S301至S304所涉及的技术内容,与图1的步骤S101至S104所涉及的技术内容相应。
本实施例的具有支付功能的应用软件,仅用于示例性说明本申请的幂等有效性的测试方法,并不用以限制本申请。本申请的幂等有效性测试方法在其他实施例中,也适用于其它需要实现幂等性的业务场景,例如:理财平台的理财场景、代扣平台的代扣场景等等。
由上述实施例可知,本申请可以基于实体对象为实现幂等性预定进行处理的幂等字段,构建多个携带有相同的幂等字段的测试用例,然后分别执行构建的各测试用例,根据各测试用例的执行结果,即可以快速确定实体对象针对幂等字段相同的测试用例是否有执行幂等处理,进而能确定实体对象是否能实现幂等性。
此外,本申请实的幂等有效性测试方法应用于支付方时,可以快速检测出支付方是否能实现幂等性,保证用户的资金安全。
与前述方法的实施例相对应,本申请还提供了装置的实施例。
参见图4,图4是本申请一示例性实施例示出的幂等有效性测试装置的逻辑框图,该装置400可以包括:幂等字段获取模块410、测试用例构建模块420、测试用例执行模块430和有效性判断模块440。
其中,幂等字段获取模块410,用于获取待测试的实体对象中包含的幂等字段;所述幂等字段是所述实体对象为实现幂等性预定进行处理的字段。
测试用例构建模块420,用于基于获取的幂等字段构建至少两个测试用例;构建的各测试用例携带的幂等字段相同。
测试用例执行模块430,用于分别执行构建的各测试用例。
有效性判断模块440,用于基于各测试用例的执行结果确定所述实体对象的幂等性是否有效。
一些例子中,幂等字段获取模块410可以包括:
对象拦截模块,用于对所述实体对象进行拦截。
字段解析模块,用于对拦截出的实体对象进行解析,解析出带有预定的注解标签的字段为幂等字段。
作为例子,所述幂等字段为满足关联的数据库的唯一性约束条件的幂等标识。
另一些例子中,测试用例执行模块430可以包括:
测试请求构建模块,用于基于每个测试用例所携带的测试参数,构建携带有所述幂等字段的测试请求。
测试请求发送模块,用于向所述实体对象发送构建的每个测试请求。
处理结果接收模块,用于接收所述实体对象针对每个测试请求返回的处理结果。
作为例子,有效性判断模块440可以包括:
有效幂等确定模块,用于在接收的处理结果表明两个以上的测试请求被处理,确定所述实体对象的幂等性无效。
无效幂等确定模块,用于在接收的处理结果表明仅一个测试请求被处理,则确定所述实体对象的幂等性有效。
作为例子,本申请实施例的幂等有效性测试装置还可以包括测试用例重建模块,用于:
在接收的处理结果表明发送的第一个测试请求未被处理时,基于获取的幂等字段重新构建至少两个测试用例;重新构建的测试用例携带的幂等字段相同,且与已执行的测试用例携带的幂等字段不同。
通知测试用例模块分别执行重新构建的测试用例、通知有效性判断模块基于重新构建的各测试用例的执行结果确定所述实体对象的幂等性是否有效。
另一些例子中,除携带的幂等字段相同外,各测试用例携带的其他信息各不相同。
另一些例子中,所述实体对象为具有以下至少一项功能的应用软件:
支付,代扣,理财,提现。
上述装置中各个单元(或模块)的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元或模块可以是或者也可以不是物理上分开的,作为单元或模块显示的部件可以是或者也可以不是物理单元或模块,即可以位于一个地方,或者也可以分布到多个网络单元或模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请幂等有效性测试装置的实施例可以应用在电子设备上。具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现中,电子设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备、互联网电视、智能机车、无人驾驶汽车、智能冰箱、其他智能家居设备或者这些设备中的任意几种设备的组合。
装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器等可读介质中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图5所示,为本申请幂等有效性测试装置所在电子设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。电子设备的存储器可以存储处理器可执行程序指令;处理器可以耦合存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:获取待测试的实体对象中包含的幂等字段;所述幂等字段是所述实体对象为实现幂等性预定进行处理的字段;基于获取的幂等字段构建至少两个测试用例;构建的各测试用例携带的幂等字段相同;分别执行构建的各测试用例;基于各测试用例的执行结果确定所述实体对象的幂等性是否有效。
在其他实施例中,处理器所执行的操作可以参考上文方法实施例中相关的描述,在此不予赘述。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。