发明内容
有鉴于此,本公开实施例至少提供一种接口测试方法及装置、计算机设备及存储介质。
本公开主要包括以下几个方面:
第一方面,本公开实施例提供一种接口测试方法,所述接口测试方法包括:
调用待测试接口执行与所述测试接口对应的至少一条测试用例,获取所述至少一条测试用例中每条测试用例的执行结果,并获取调用所述待测试接口执行所述每条测试用例时为所述每条测试用例确定的追踪标识;
基于所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息,所述调用链路信息用于表征在执行所述测试用例时所调用的服务;
基于所述每条测试用例的追踪标识、所述每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言;其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
在一种可能的实施方式中,在调用待测试接口执行与所述测试接口对应的至少一条测试用例之前,还包括:
当发起测试请求时,针对所述待测试接口对应的待测试服务,获取携带有与所述待测试服务对应服务标识的多条测试用例。
在一种可能的实施方式中,当所述待测试服务包括至少两个执行服务时,所述调用所述待测试接口执行与所述测试接口对应的至少一条测试用例,包括:
基于至少两个执行服务的资源占用情况,判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务;
若存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则将携带有与所述待测试服务对应服务标识多条测试用例分发至至少一个所述目标执行服务;
利用至少一个所述目标执行服务并行执行基于对所述待测试服务的测试工作。
在一种可能的实施方式中,在判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务之后,还包括:
若不存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则对每个执行服务的当前占用资源率进行轮询,直至满足预设的轮询终止条件;
其中,所述轮询终止条件包括以下至少一种:
筛选出当前资源占用率低于预设的资源占用率阈值的目标执行服务、预设的轮询次数阈值。
在一种可能的实施方式中,所述基于所述追踪标识,获取所述每条测试用例的调用链路信息,包括:
基于多条测试用例中每条测试用例对应的追踪标识,从调用链路监控日志中,获取所述每条测试用例的调用链路信息;
其中,所述追踪标识为基于所述链路监控日志确定的。
在一种可能的实施方式中,所述对所述每条测试用例的实际调用结果进行测试断言,包括:
从所述多条测试用例中确定执行结果为调用失败的测试用例,记作第一测试用例;
针对每条第一测试用例,检测该条第一测试用例的调用链路信息是否存在问题;
若该条第一测试用例的调用链路信息存在问题,则基于该条第一测试用例的调用链路信息,从该条第一测试用例的调用链路信息指示的各个服务节点中确定出现问题的目标服务节点,并基于目标服务节点得到该条测试用例的测试断言结果;
若该条第一测试用例的调用链路信息未存在问题,则将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果。
在一种可能的实施方式中,所述接口测试方法还包括:
从所述多条测试用例中确定执行结果为调用成功的测试用例,记作第二测试用例;
确定所述多条第二测试用例分别对应的调用链路信息中相同的子调用链路信息;
基于所述子调用链路信息,生成新的断言预期结果;
基于新的断言预期结果对所述断言预期结果进行更新,生成更新后的断言预期结果;其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试。
第二方面,本公开实施例还提供一种接口测试装置,所述接口测试装置包括:
调用模块,用于调用待测试接口执行与所述测试接口对应的至少一条测试用例,获取所述至少一条测试用例中每条测试用例的执行结果,并获取调用所述待测试接口执行所述每条测试用例时为所述每条测试用例确定的追踪标识;
第一获取模块,用于基于所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息,所述调用链路信息用于表征在执行所述测试用例时所调用的服务;
测试断言模块,用于基于所述每条测试用例的追踪标识、所述每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言;其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
在一种可能的实施方式中,所述装置还包括:
第二获取模块,用于当发起测试请求时,针对所述待测试接口对应的待测试服务,获取携带有与所述待测试服务对应服务标识的多条测试用例。
在一种可能的实施方式中,所述调用模块具体用于:
基于至少两个执行服务的资源占用情况,判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务;
若存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则将携带有与所述待测试服务对应服务标识多条测试用例分发至至少一个所述目标执行服务;
利用至少一个所述目标执行服务并行执行基于对所述待测试服务的测试工作。
在一种可能的实施方式中,所述调用模块还用于:
若不存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则对每个执行服务的当前占用资源率进行轮询,直至满足预设的轮询终止条件;
其中,所述轮询终止条件包括以下至少一种:
筛选出当前资源占用率低于预设的资源占用率阈值的目标执行服务、预设的轮询次数阈值。
在一种可能的实施方式中,所述第一获取模块具体用于:
基于多条测试用例中每条测试用例对应的追踪标识,从调用链路监控日志中,获取所述每条测试用例的调用链路信息;
其中,所述追踪标识为基于所述链路监控日志确定的。
在一种可能的实施方式中,所述测试断言模块具体用于:
从所述多条测试用例中确定执行结果为调用失败的测试用例,记作第一测试用例;
针对每条第一测试用例,检测该条第一测试用例的调用链路信息是否存在问题;
若该条第一测试用例的调用链路信息存在问题,则基于该条第一测试用例的调用链路信息,从该条第一测试用例的调用链路信息指示的各个服务节点中确定出现问题的目标服务节点,并基于目标服务节点得到该条测试用例的测试断言结果;
若该条第一测试用例的调用链路信息未存在问题,则将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果。
在一种可能的实施方式中,所述接口测试装置还包括:
标记模块,用于从所述多条测试用例中确定执行结果为调用成功的测试用例,记作第二测试用例;
确定模块,用于确定所述多条第二测试用例分别对应的调用链路信息中相同的子调用链路信息;
第一生成模块,用于基于所述子调用链路信息,生成新的断言预期结果;
第二生成模块,用于基于新的断言预期结果对所述断言预期结果进行更新,生成更新后的断言预期结果;其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试。
第三方面,本公开实施例还提供一种计算机设备,包括:相互连接的处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述机器可读指令被所述处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的接口测试方法的步骤。
第四方面,本公开实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面或第一方面中任一种可能的实施方式中所述的接口测试方法的步骤。
本公开实施例通过调用待测试接口执行与测试接口对应的至少一条测试用例,获取至少一条测试用例中每条测试用例的执行结果,并获取调用待测试接口执行每条测试用例时为每条测试用例确定的追踪标识;基于每条测试用例对应的追踪标识,获取每条测试用例的调用链路信息,调用链路信息用于表征在执行测试用例时所调用的服务;基于每条测试用例的执行结果、每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对每条测试用例的实际调用结果进行测试断言。该过程通过基于每条测试用例对应的追踪标识,确定每条测试用例的调用链路信息,并基于历史调用链路的断言预期结果,对实际调用结果进行测试断言,从而减少接口存在的问题被误报或者遗漏的情况,提高测试准确度。
进一步地,本公开实施例中,还可以对于调用链路信息中存在的问题进行分析,从而确定出调用链路中出现问题的目标服务节点及目标服务节点所对应的信息,由此可以分析出该待测试接口对应的调用链路中的异常信息。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都属于本公开保护的范围。
当前的接口测试方法通常包括:测试用例设计编写、执行测试用例、测试用例断言、测试用例报告。其中,在进行测试用例断言时,通常采用将测试用例的测试返回结果、与测试用例的预期结果进行比对的方式,来确定接口的测试结果;该种测试用例断言方法会导致接口存在的问题被误报或者遗漏,准确性较低。
本公开实施例提出一种接口测试方法及装置,该方法通过调用待测试接口执行与测试接口对应的至少一条测试用例,获取至少一条测试用例中每条测试用例的执行结果,并获取调用待测试接口执行每条测试用例时为每条测试用例确定的追踪标识;基于每条测试用例对应的追踪标识,获取每条测试用例的调用链路信息,调用链路信息用于表征在执行测试用例时所调用的服务;基于每条测试用例的执行结果、每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对每条测试用例的实际调用结果进行测试断言。该过程通过基于每条测试用例对应的追踪标识,确定每条测试用例的调用链路信息,并基于历史调用链路的断言预期结果,对实际调用结果进行测试断言,从而减少接口存在的问题被误报或者遗漏的情况,提高测试准确度。
针对上述问题的发现过程以及本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
下面将结合本公开中附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本公开实施例所提供的接口测试方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该接口测试方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为终端设备为例对本公开实施例提供的接口测试方法加以说明。
参见图1所示,为本公开实施例提供的一种接口测试方法的流程图,所述接口测试方法包括步骤S101~S103,其中:
S101:调用待测试接口执行与所述测试接口对应的至少一条测试用例,获取所述至少一条测试用例中每条测试用例的执行结果,并获取调用所述待测试接口执行所述每条测试用例时为所述每条测试用例确定的追踪标识。
S102:基于所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息,所述调用链路信息用于表征在执行所述测试用例时所调用的服务。
S103:基于所述每条测试用例的追踪标识、所述每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言;其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
下面分别对上述S101~S103分别加以详细说明。
一:在上述S101中,在调用与所述测试接口对应的至少一条测试用例之后,针对待测试接口,分别执行所述测试用例中的每条测试用例,从而可以获取到调用待测试接口执行每条测试用例时为每条测试用例确定的追踪标识。
其中,测试用例指的是一组条件或变量,测试者可以根据测试用例来确定应用软件或软件系统是否正确工作。对应的,测试执行在测试工作中占了很大比重,有效的测试执行可以将测试用例发挥最大的价值。因此,测试用例规范执行有助于更好的发现代码中存在的缺陷。
在本公开实施例中,在执行每条测试用例之后,便可以获取所述待测试接口执行所述每条测试用例时的追踪标识,追踪标识与测试用例具有一一对应关系。
示例性的,追踪标识可以为全链路跟踪标识(Trace ID),该追踪标识在整个调用链路当中是唯一的,即无论经过多少个服务节点都会保持不变,并且可以随着每一个服务节点的调用而不断传递,由此可以通过该追踪标识确定在整个接口测试过程中经过每一个服务节点所对应的服务日志,从而分析整个测试过程。
在本公开另一实施例中,在调用待测试接口执行与所述测试接口对应的至少一条测试用例之前,可以针对待测试接口,生成多条测试用例。
具体的,可以针对所述待测试接口,利用测试用例生成工具,生成多条测试用例;
示例性的,测试用例生成工具可以为自动生成成对组合测试用例的命令行工具(Pairwise Independent Combinatorial Testing,PICT)、基于分支的测试用例生成工具(EvoSuite)、自动生成交互式组合测试用例工具(allpairs)等。
针对待测试接口,可以利用上述测试用例生成工具,生成多条测试用例。其中,不同所述测试用例使用同一组测试参数、且不同所述测试用例之间在至少一个测试参数下的参数值不同。
其中,测试参数可以包括应用程序(Application,APP)名称、日期、地点、人名等多种类别的测试参数信息,不同所述测试用例使用同一组测试参数,即不同的测试用例应该包含同样类别的测试参数信息,用于对于同一待测试接口的测试过程。
示例性的,对于不同所述测试用例之间在至少一个测试参数下的参数值的取值,应保证其参数值的离散度,即不同的参数值的差异应足够大,这样可以保证不同的测试用例具有多样性,丰富度更高。
此外,对于待测试接口,还可以将不同测试用例之间在至少一个测试参数下的参数值替换为目标格式,例如:针对某一待测试接口,其目标格式为年/月/日(Y/M/D),但是在至少一个测试参数下的参数值可能为XX年XX月XX日、或是月/日/年(M/D/Y),在该种情况下,就可以将上述参数值同一替换为目标格式,以便后续的测试过程。
对于待测试接口,还可以根据目标需求,将不同测试用例之间在至少一个测试参数下的参数值替换为目标参数值,例如:某一目标需求为:测试针对应用程序A中的各个接口信息,那么就可以将针对应用程序的参数值同一替换为应用程序A,这样,就以应用程序A为前提,进行后续的测试过程。
在通常情况下,针对待测试接口,通过同一服务器执行多条所述测试用例中的每条测试用例,造成服务器运算负荷较大,影响对于待测试接口的处理效率,由此,本公开实施例中提出了一种针对待测试接口,分别执行多条所述测试用例中的每条测试用例的方法。
具体的,在调用待测试接口执行与所述测试接口对应的至少一条测试用例之前,还包括:
当发起测试请求时,针对待测试接口对应的待测试服务,获取携带有与所述待测试服务对应服务标识的多条测试用例。
具体的,可以根据待测试服务对应的服务标识,以及测试用例包括的唯一标识,确定针对待测试付的、携带有与所述待测试服务对应服务标识的多条测试用例。
在本公开的一个实施例中,在所述待测试服务包括一个执行服务时,可以直接调用所述待测试接口执行与所述测试接口对应的至少一条测试用例。当所述待测试服务包括至少两个执行服务时,所述调用所述待测试接口执行与所述测试接口对应的至少一条测试用例,包括:
基于至少两个执行服务的资源占用情况,判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务;
若存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则将携带有与所述待测试服务对应服务标识多条测试用例分发至至少一个所述目标执行服务;
利用至少一个所述目标执行服务并行执行基于对所述待测试服务的测试工作。
具体的,针对至少一个执行服务,分别获取每个执行服务的当前可用资源占用情况,判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务。
若该执行服务的当前资源占用率大于预设资源占用率阈值,则确认该执行服务为目标执行服务,即具有足够的资源占用率来调用待测试接口并执行测试用例。若该执行服务的当前资源占用率小于预设资源占用率阈值,则该执行服务不具有足够的资源占用率来调用待测试接口并执行测试用例,不能够作为目标执行服务。
通过确定当前资源占用率大于预设资源占用率阈值的目标执行服务的方法,可以避免出现执行服务的计算负荷过大,而导致出现执行服务崩溃等情况,减少由于进行接口测试,而对其他线上服务造成的影响,从而提高接口测试的效率。此外,还需要兼顾并发处理的任务数量,从而保证测试用例能够在一定时间内执行完毕,确保测试时间。
在本公开另一实施例中,在判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务之后,还包括:
若不存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则对每个执行服务的当前占用资源率进行轮询,直至满足预设的轮询终止条件;
其中,所述轮询终止条件包括以下至少一种:
筛选出当前资源占用率低于预设的资源占用率阈值的目标执行服务、预设的轮询次数阈值。
在该实施例中,当不存在满足测试条件的执行服务,且需要进行测试时,可以对每个执行服务的当前占用资源率进行轮询,即不断地查询每个执行服务的当前占用资源,直至出现当前资源占用率低于预设的资源占用率阈值的目标执行服务,或者,若一直未出现当前资源占用率低于预设的资源占用率阈值的目标执行服务,则当达到预设的轮询次数之后,选取该执行服务作为目标执行服务。
之后,利用上述步骤中选取的所述目标执行服务,将携带有与所述待测试服务对应服务标识多条测试用例分发至至少一个所述目标执行服务,并利用至少一个所述目标执行服务并行执行基于对所述待测试服务的测试工作。
具体的,将多条所述测试用例分发至不同的所述目标执行服务;
利用多个所述目标执行服务并行调用所述待测试接口执行各自被分发的所述测试用例。
示例性的,假设存在A、B、C、D四条测试用例,以及E、F两个目标执行服务,那么就可以利用E目标执行服务调用待测试接口执行A、B测试用例,同时利用F目标执行服务调用待测试接口执行C、D测试用例。又或者,E目标执行服务的当前资源占用率大于或远大于F目标执行服务,那么也可以利用E目标执行服务调用待测试接口执行A、B、D测试用例,利用F目标执行服务调用待测试接口执行D测试用例,具体情况可以依据测试用例数量、目标执行服务数量以及目标执行服务的当前资源占用率等多个因素而具体分析,从而确认分发测试用例的方案。
通过利用多个所述目标执行服务并行调用所述待测试接口执行各自被分发的所述测试用例的方法,可以极大地缩短提高执行服务调用待测试接口并执行测试用例的时间,提高接口测试的效率。
二:在上述S102中,基于步骤S101中获取的所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息。
其中,所述调用链路信息用于表征在执行所述测试用例时所调用的服务。
具体的,基于多条测试用例中每条测试用例对应的追踪标识,从调用链路监控日志中,获取所述每条测试用例的调用链路信息。其中,所述追踪标识为基于所述链路监控日志确定的。
其中,调用链路监控日志中包括该调用链路中每个服务节点的信息,以及每个服务节点的处理返回结果,此外,在每个服务节点中还包括至少一个字段信息。
示例性的,当想要获取测试用例的执行结果为调用成功的调用链路信息时,可以先确定执行结果为调用成功的测试用例对应的追踪标识,再根据该追踪标识,获取该测试用例的调用链路信息。又或者,当想要获取测试用例的执行结果为调用失败的调用链路信息时,可以先确定执行结果为调用失败的测试用例对应的追踪标识,再根据该追踪标识,获取该测试用例的调用链路信息。
三:在上述S103中,基于所述每条测试用例的追踪标识、获取的每条测试用例的调用链路信息,以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言,得到对应的测试断言结果。
其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
具体的,基于每条测试用例的执行结果,即是否调用成功,以及上述步骤中获取的对应的测试用例的调用链路信息,将对应的测试用例的调用链路信息与基于历史调用链路信息生成的断言预期结果进行对比,即对所述每条测试用例的实际调用结果进行测试断言。、
具体的,当针对待测试接口执行任一测试用例时,测试是否能够成功返回信息,即该待测试接口的调用链路是否能够完整地执行该测试用例。若能够成功返回信息,则认为该待测试接口的调用链路能够完整地执行该测试用例,该执行结果即为调用成功;若不能够成功返回信息,则认为该待测试接口的调用链路不能够完整地执行该测试用例,该执行结果即为调用失败,并判定该待测试接口存在异常。
其中,所述历史调用链路信息为针对所述待测试接口进行历史接口测试时,各条测试用例的调用链路信息,所述历史调用链路信息的具体确定方法将在下面内容中进行详细介绍。
参见图2所示,为本公开实施例提供的一种接口测试方法中进行测试断言的流程图,包括步骤S1031~S1034,其中:
S1031:从所述多条测试用例中确定执行结果为调用失败的测试用例,记作第一测试用例。
S1032:针对每条第一测试用例,检测该条第一测试用例的调用链路信息是否存在问题。
S1033:若该条第一测试用例的调用链路信息存在问题,则基于该条第一测试用例的调用链路信息,从该条第一测试用例的调用链路信息指示的各个服务节点中确定出现问题的目标服务节点,并基于目标服务节点得到该条测试用例的测试断言结果。
S1034:若该条第一测试用例的调用链路信息未存在问题,则将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果。
下面分别对上述步骤S1031~S1034分别加以详细说明。
在上述S1031中,从所述多条测试用例中,确定多条第一测试用例,每条第一测试用例的执行结果为调用失败。
在上述S1032中,针对上述S1031中确定的每条第一测试用例,检测该条第一测试用例的调用链路信息是否存在问题。
其中,调用失败的情况可能有如下几种:
第一种:由于调用链路本身存在异常而造成的调用失败;
第二种:在调用过程中存在差错而造成的调用失败,例如:本应由A链路执行某测试用例,但是在实际过程中,由B链路执行了该测试用例,从而无法成功返回对应的信息。
在实际的调用过程中,可以还存在其他调用失败的情况,在此不一一赘述。
在上述S1033中,针对上述S1032中确定其调用链路信息存在问题的第一测试用例,基于该条第一测试用例的调用链路信息,从该条第一测试用例的调用链路信息指示的各个服务节点中确定出现问题的目标服务节点,并基于目标服务节点得到该条测试用例的测试断言结果。
针对步骤S1032中提及的第一种调用失败的情况,需要对其对应的调用链路信息进行进一步的分析,以便对调用链路进行改进。
示例性的,在确定其调用链路信息存在问题的第一测试用例之后,获取第一测试用例对应的追踪标识,并基于该标识,获取该条第一测试用例的调用链路信息,确定出该调用链路信息的各个服务节点中,出现问题的目标服务节点,并分析该目标服务节点出现异常的具体位置、涉及的问题以及出现问题的原因等信息,并将上述分析结果作为该条测试用例的测试断言结果。
在上述S1034中,若该条第一测试用例的调用链路信息未存在问题,则将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果。
示例性的,若该第一测试用例对应的调用链路信息未存在问题,则证明不是调用链路所存在的问题,那么可以将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果,为后续分析调用失败的原因提供参考数据。
参见图3所示,为本公开实施例提供的一种接口测试方法中确定断言预期结果的流程图,所述确定方法包括步骤S301~S304,其中:
S301:从所述多条测试用例中确定执行结果为调用成功的测试用例,记作第二测试用例;
S302:确定所述多条第二测试用例分别对应的调用链路信息中相同的子调用链路信息;
S303:基于所述子调用链路信息,生成新的断言预期结果;
S304:基于新的断言预期结果对所述断言预期结果进行更新,生成更新后的断言预期结果;其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试。
下面分别对上述步骤S301~S304分别加以详细说明。
在上述S301中,从上述多条测试用例中,确定出多条调用成功的测试用例,并将其标记为第二测试用例。
具体的,从执行的多条测试用例中,选取调用结果为成功的测试用例为第二测试用例。
在上述S302中,在确定调用成功的第二测试用例之后,确定所述多条第二测试用例分别对应的调用链路信息中相同的子调用链路信息。
具体的,可以获取第二测试用例对应的追踪标识,并基于该标识,获取该条第二测试用例的调用链路信息。
示例性的,存在两条调用成功的第二测试用例,其中,测试用例A的返回结果为:
测试用例B的返回结果为:
确定得到两条第二测试用例分别对应的调用链路信息中相同的信息,即
那么上述信息即为两条第二测试用例分别对应的调用链路信息中相同的子调用链路信息。其中,多条第二测试用例的情况与上述情况类似,在此不做赘述。
在上述S303中,基于所述子调用链路信息,生成新的断言预期结果。
具体的,利用上述确定的子调用链路信息,针对待测试接口,生成新的断言预期结果。
在上述S304中,基于新的断言预期结果对所述断言预期结果进行更新,生成更新后的断言预期结果;其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试。
具体的,基于由子调用链路信息生成的新的断言预期结果,以及原有的断言预期结果,再次确定上述两种断言预期结果之间相同的信息,并基于该相同的信息生成更新后的断言预期结果。
其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试,这样可以确保断言预期结果是基于每个测试用例及调用结果确定的,依次提高了测试断言结果的准确性。
本公开实施例中,通过调用待测试接口执行与测试接口对应的至少一条测试用例,获取至少一条测试用例中每条测试用例的执行结果,并获取调用待测试接口执行每条测试用例时为每条测试用例确定的追踪标识;基于每条测试用例对应的追踪标识,获取每条测试用例的调用链路信息,调用链路信息用于表征在执行测试用例时所调用的服务;基于每条测试用例的执行结果、每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对每条测试用例的实际调用结果进行测试断言。该过程通过基于每条测试用例对应的追踪标识,确定每条测试用例的调用链路信息,并基于历史调用链路的断言预期结果,对实际调用结果进行测试断言,从而减少接口存在的问题被误报或者遗漏的情况,提高测试准确度。
进一步地,本公开实施例中,还可以对于调用链路信息中存在的问题进行分析,从而确定出调用链路中出现问题的目标服务节点及目标服务节点所对应的信息,由此可以分析出该待测试接口对应的调用链路中的异常信息。
基于同一发明构思,本公开实施例中还提供了与上述实施例提供的接口测试方法对应的接口测试装置,由于本公开实施例中的装置解决问题的原理与本公开上述实施例的接口测试方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图4、图5所示,图4为本公开实施例所提供的一种接口测试装置的结构示意图,图5为本公开实施例所提供的另一种接口测试装置的结构示意图。该接口测试装置包括:调用模块410、第一获取模块420以及测试断言模块430,其中:
调用模块410,用于调用待测试接口执行与所述测试接口对应的至少一条测试用例,获取所述至少一条测试用例中每条测试用例的执行结果,并获取调用所述待测试接口执行所述每条测试用例时为所述每条测试用例确定的追踪标识;
第一获取模块420,用于基于所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息,所述调用链路信息用于表征在执行所述测试用例时所调用的服务;
测试断言模块430,用于基于所述每条测试用例的追踪标识、所述每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言;其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
在一种可能的实施方式中,如图5所示,所述装置还包括:
第二获取模块440,用于当发起测试请求时,针对待测试接口对应的待测试服务,获取携带有与所述待测试服务对应服务标识的多条测试用例。
在一种可能的实施方式中,所述调用模块410具体用于:
基于至少两个执行服务的资源占用情况,判断所述至少两个执行服务中是否存在当前资源占用率低于预设的资源占用率阈值的目标执行服务;
若存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则将携带有与所述待测试服务对应服务标识多条测试用例分发至至少一个所述目标执行服务;
利用至少一个所述目标执行服务并行执行基于对所述待测试服务的测试工作。
在一种可能的实施方式中,所述调用模块410还用于:
若不存在当前资源占用率低于预设的资源占用率阈值的目标执行服务,则对每个执行服务的当前占用资源率进行轮询,直至满足预设的轮询终止条件;
其中,所述轮询终止条件包括以下至少一种:
筛选出当前资源占用率低于预设的资源占用率阈值的目标执行服务、预设的轮询次数阈值。
在一种可能的实施方式中,所述第一获取模块420具体用于:
基于多条测试用例中每条测试用例对应的追踪标识,从调用链路监控日志中,获取所述每条测试用例的调用链路信息;
其中,所述追踪标识为基于所述链路监控日志确定的。
在一种可能的实施方式中,所述测试断言模块430具体用于:
从所述多条测试用例中确定执行结果为调用失败的测试用例,记作第一测试用例;
针对每条第一测试用例,检测该条第一测试用例的调用链路信息是否存在问题;
若该条第一测试用例的调用链路信息存在问题,则基于该条第一测试用例的调用链路信息,从该条第一测试用例的调用链路信息指示的各个服务节点中确定出现问题的目标服务节点,并基于目标服务节点得到该条测试用例的测试断言结果;
若该条第一测试用例的调用链路信息未存在问题,则将调用链路信息与所述断言预期结果进行比对,并基于比对结果,得到该条测试用例的测试断言结果。
在一种可能的实施方式中,如图5所示,所述接口测试装置还包括:
标记模块450,用于从所述多条测试用例中确定执行结果为调用成功的测试用例,记作第二测试用例;
确定模块460,用于确定所述多条第二测试用例分别对应的调用链路信息中相同的子调用链路信息;
第一生成模块470,用于基于所述子调用链路信息,生成新的断言预期结果;
第二生成模块480,用于基于新的断言预期结果对所述断言预期结果进行更新,生成更新后的断言预期结果;其中,更新后的断言预期结果,用于下一次对待测试接口进行接口测试。
本公开实施例调用待测试接口执行与测试接口对应的至少一条测试用例,获取至少一条测试用例中每条测试用例的执行结果,并获取调用待测试接口执行每条测试用例时为每条测试用例确定的追踪标识;基于每条测试用例对应的追踪标识,获取每条测试用例的调用链路信息,调用链路信息用于表征在执行测试用例时所调用的服务;基于每条测试用例的执行结果、每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对每条测试用例的实际调用结果进行测试断言。该过程通过基于每条测试用例对应的追踪标识,确定每条测试用例的调用链路信息,并基于历史调用链路的断言预期结果,对实际调用结果进行测试断言,从而减少接口存在的问题被误报或者遗漏的情况,提高测试准确度。
本公开实施例还提供了一种计算机设备10,如图6所示,为本公开实施例提供的计算机设备10结构示意图,包括:
处理器11和存储器12;所述存储器12存储有所述处理器11可执行的机器可读指令,当计算机设备运行时,所述机器可读指令被所述处理器执行以实现下述步骤:
调用待测试接口执行与所述测试接口对应的至少一条测试用例,获取所述至少一条测试用例中每条测试用例的执行结果,并获取调用所述待测试接口执行所述每条测试用例时为所述每条测试用例确定的追踪标识;
基于所述每条测试用例对应的追踪标识,获取所述每条测试用例的调用链路信息,所述调用链路信息用于表征在执行所述测试用例时所调用的服务;
基于所述每条测试用例的追踪标识、所述每条测试用例的调用链路信息、以及基于历史调用链路信息生成的断言预期结果,对所述每条测试用例的实际调用结果进行测试断言;其中,所述历史调用链路信息为在历史测试过程中,针对所述待测试接口进行接口测试时,各条测试用例的调用链路信息。
上述指令的具体执行过程可以参考本公开实施例中所述的接口测试方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的接口测试方法的步骤。
本公开实施例所提供的接口测试方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的接口测试方法的步骤,具体可参见上述方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。