具体实施方式
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本申请实施例的技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请实施例技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
请参阅图1,所示为本发明实施例当中的接口自动化持续集成测试方法,所述方法具体包括步骤S101-步骤S104。
S101,采集线上的流量数据,并对采集的流量数据进行数据清洗得到清洗后的目标流量数据。
在本实施例中,可定时对流量数据进行采集,也可实时对流量数据进行采集,以保证对于新接入增量的感知及录制。
为了保证流量数据中数据的安全性,需要对获取的流量数据中的敏感信息进行相应的遮盖替换及脱敏处理。具体的,对采集的流量数据进行数据清洗得到清洗后的目标流量数据,包括:当采集到的流量数据中包含属于指定业务的第一类流量数据时,对所述第一类流量数据中包含的网址参数替换成预设的脱敏网址参数得到清洗后的目标流量数据;当采集到的流量数据中包含指定类型信息的第二类流量数据时,对所述第二类流量数据中包含的指定类型信息进行脱敏处理得到清洗后的目标流量数据。
具体的,根据预置规则库对采集的流量数据进行数据清洗得到清洗后的目标流量数据。根据不同的业务需要,通过自行设定规则对获取到目标流量数据中所涉及到的请求数据进行替换及后续干预处理。其中,包括http请求中get方法的url参数,及post请求中的url参数和body参数中不同字段的自定义替换。替换的目的是可以由不同业务方确定目标流量数据可能涉及到的敏感信息。
在发明提供的一个实施例中,删除所述目标流量数据中对覆盖率无影响且所述可选值数量大于的预置可选值数量的参数。例如,业务中存在大量公共参数如user_id、device_id等,它们可选值数量多但是对代码覆盖率基本没有影响,则需要删除这些公共参数。
S102,调用组合生成工具基于所述目标流量数据生成目标测试用例集;所述目标测试用例集用于针对目标接口或目标服务进行测试的用例。
目标测试用例集的生成通过对每个接口录制到的目标流量数据,提取出一批公共参数(这批参数可能属于不同次请求);通过预置的组合算法,将参数之间两两组合,增加扩充测试用例数量,最后生成目标测试用例集。
S103,基于测试机器信息对所述目标测试用例集调度分发执行,并获取对应的执行结果。
在本发明实施例中,调度分发执行可以对当前测试用例的状态进行轮询,将请求进行分散调度,对目标测试用例集进行调度分发执行,并获取相对应的执行结果。调度分发执行提高了大量测试用例进行实际请求调用的效率,同时避免了大量请求同时执行对线上服务造成的影响。
S104,根据所述目标测试用例集对应的预期结果对所述执行结果进行断言得到断言结果。
对于目标测试用例集中符合预期的用例,通过相应算法增量计算结合公共参数提取计算获取用例的公共部分组合生成的参数公共部分。参数公共部分为每次请求的请求头/请求参数/请求体中均会携带的部分;断言的公共部分为每次请求拿到的响应中均会包含的字段,作为预期断言结果存入离线。
若出现接口信息变动(通过对请求之后拿到的响应进行参数提取,当出现参数数量/参数类型与原有断言不匹配时,即有可能接口信息发生了变动。)时,则会自动对之前生成的预期断言结果进行动态计算并更新调整。
在本发明实施例中,对调度执行获得的结果进行断言,从离线服务中拉取预期结果与实际结果进行数据类型比较判断是否相符,相符则判定为用例执行成功,不相符则判定为用例执行失败。然后,根据各个测试用例的执行结果,针对被测接口和/或被测服务统计接口测试结果和/或服务测试结果;在云端以文件形式保存接口测试结果和/或服务测试结果以及相关的用例执行详细信息,并以通知形式对指定用户通知所保存的文件内容。
本发明提供一种接口自动化持续集成测试方法,采集线上的流量数据,并对采集的流量数据进行数据清洗得到清洗后的目标流量数据;调用组合生成工具基于所述目标流量数据生成目标测试用例集;所述目标测试用例集用于针对目标接口或目标服务进行测试的用例;基于测试机器信息对所述目标测试用例集调度分发执行,并获取对应的执行结果;根据所述目标测试用例集对应的预期结果对所述执行结果进行断言得到断言结果。从而通过本发明实现了自动化接口测试。
如图2和图3所示,在本发明提供的一个实施例中,目标流量数据包括多个参数,以及与所述参数分别对应的可选值及可选值数量,调用组合生成工具基于目标流量数据生成目标测试用例集,包括:
S201,确定所述参数的可选值数量是否大于第一预置数值。
其中,第一预置数值可以根据需要生成测试用例的数量进行设定,也可以根据生成测试用例所需要的时间确定,本发明实施例不做具体限定。可以理解的是,需要生成的测试用例的数量越大,或者生成测试用例所需要的时间越长,第一预置数值可以相应设置的越大。
S202,若所述参数的可选值数量大于第一预置数值,则根据所述目标流量数据生成固定数量的候选用例。
例如,第一预置数值为100,若目标流量数据中可选值数量超过100个的参数超过5个,则根据所述目标流量数据生成固定数量的候选用例,以便于在后续步骤中根据生成的候选用例中筛选出符合条件的测试用例。
具体的,本实施例基于自适应随机测试(Adaptive Random Testing,ART)生成固定数量的候选用例。需要说明的是,由于本实施例中的目标流量数据包含多个参数,因此在对参数的可选值数量的判断过程中,需要判断是否预置参数数量的参数的可选值大于预置数量,其中,预置参数数量具体可以为4、5、6等,本发明实施例不做具体限定。例如,若目标流量数据中可选值数量超过100个的参数超过5个,则通过自适应随机测试将目标流量数据生成固定数量的候选用例。
S203,从所述候选用例中筛选出符合预置条件的用例作为测试用例。
其中,预置条件具体可以为候选用例与已执行测试用例差异最大的用例,以此实现从候选用例中筛选出有更大的概率覆盖到输入域的边界用例作为测试用例。
S204,将所述测试用例作为目标测试用例集中的用例。
在本实施例中,确定所述参数的可选值数量是否大于第一预置数值;若所述参数的可选值数量大于第一预置数值,则根据所述目标流量数据生成固定数量的候选用例;从所述候选用例中筛选出符合预置条件的用例作为测试用例。与目前传统组合测试相比,本发明在确定参数的可选值数量大于第一预置数值情况下,首先生成固定数量的候选用例,然后从候选用例中筛选出预置数量的符合预置条件的用例作为测试用例,从而可以避免生成测试用例所占用的大量时间,减少测试用例的生成数量,进而提高测试效率。
S205,若所述参数的可选值数量小于等于所述第一预置数值且大于第二预置数值,对所述可选值数量超过所述第二预置数值的参数,从对应的可选值中筛选出所述第二预置数值个所述可选值。
其中,所述第一预置数值大于所述第二预置数值。
在本实施例中,若所述参数的可选值数量小于等于所述第一预置数值且大于第二预置数值,则使用传统组合测试(concealed information test,CIT)剔除对覆盖率无影响且可选值数量较多的参数,然后限制参数可选值数量上限为第二预置数值。具体的,可以从可选值超过第二预置数值的参数中随机提取出一定数量的可选值。例如,对于可选值数量超过50个的参数,对于超出的数据,从整个输入范围中均匀选取;如果生成的测试用例依然过多,随机丢弃测试用例,而不是以新的测试用例代替旧的测试用例,以此保证测试用例覆盖输入域范围。
在本发明实施例中,若所述参数的可选值数量小于等于所述第二预置数值,则依据组合测试对所述目标流量数据生成所述测试用例。
S206,根据所述参数及对应筛选的可选值生成所述测试用例,并将生成的测试用例作为目标测试用例集中的用例。
S207,若生成的所述测试用例大于预置用例数量,则随机丢弃所述生成的测试用例。
进一步的,若所述参数的可选值数量小于等于所述第二预置数值,则通过组合测试方式确定目标测试用例集中的用例。
本发明实施例提供的接口自动化持续集成测试方法,根据参数的可选值数量确定相应的接口自动化持续集成测试方式,即在可选值数量有限时,使用CIT生成测试用例,以保证代码覆盖率和错误检出率;在可选值数量较多时,使用优化的CIT生成测试用例,剔除对覆盖率无影响且可选值较多的参数,限制参数可选值数量,对于超出的数据,从整个输入范围中均匀选取;如果生成测试用例依然过多,随机丢弃测试用例而不是以新代旧,保证测试用例覆盖输入域范围;对于可选值数量非常多时,通过ART生成候选用例,然后通过用例差异从候选用例中确定测试用例,以此来保证测试用例的覆盖率。
请参阅图4和图5,所示为本发明实施例当中的接口自动化持续集成测试方法,所述从所述候选用例中筛选出符合预置条件的用例作为测试用例,包括:
S301,计算所述固定数量的候选用例中每个候选用例和已经执行过用例的参数差异。
每次生成新的测试用例前先随机生成一组固定数量的候选用例。通过一种筛选标准来选择一个最好的候选用例作为测试用例。可以选择的筛选标准有maxi-min、maxi-maxi、maxi-sum等。
maxi-min:统计每个候选用例和离他最近的(差异最小的,对于非数字的输入)一个已经执行过的用例的距离(差异),然后选择最近用例中最大的一个候选用例作为被选中的测试用例;
maxi-maxi:统计每个候选用例和离他最远的(差异最大的,对于非数字的输入)一个已经执行过的用例的距离(差异),然后选择最远用例中最大的一个候选用例作为被选中的测试用例;
maxi-sum:统计每个候选用例和每一个已经执行过的用例的距离(差异,对于非数字的输入)的和,然后选择和最大的一个候选用例作为被选中的测试用例。
ART对于上述各种筛选标准的结果总体区别不大。由于输入域的范围且数据并不连续(只有离散的录制到的流量),比较适合通过选举法生成用例。而使用基于maxi-min的ART有更大的概率覆盖到输入域的边界,而边界值往往更容易发生错误。
对于本发明实施例,在根据目标流量数据生成候选用例之后,基于maxi-min标准从候选用例中确定候选用例,由于基于maxi-max的ART有更大的概率覆盖到输入域的边界,而边界值往往更容易发生错误,因此通过该标准从候选用例中筛选出的测试用例更能保证测试用例的覆盖率及错误检出率。
S302,选择与所述已经执行过用例的参数差异最大的候选用例作为所述测试用例。
S303,判断选择的所述测试用例的数量是否达到预置数量。
其中,预置数量为需要生成测试用例的数量。
S304,若未达到所述预置数量,则根据目标流量数据重新随机生成固定数量的候选用例,并从候选用例中筛选出符合预置条件的用例作为测试用例,直至生成的测试用例数量达到预置数量。
本发明实施例提供的接口自动化持续集成测试方法,首先计算固定数量的候选用例中每个候选用例和已经执行过用例的参数差异,选择与已经执行过用例的参数差异最大的候选用例作为测试用例,然后判断选择的测试用例的数量是否达到预置数量,若未达到所述预置数量,则根据目标流量数据重新随机生成固定数量的候选用例,并从候选用例中筛选出符合预置条件的用例作为测试用例,直至生成的测试用例数量达到预置数量。即本实施例通过比对已执行用例的差异来保证测试用例的覆盖率,从而提高测试效果。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种接口自动化持续集成测试装置,该接口自动化持续集成测试装置与上述实施例中接口自动化持续集成测试方法一一对应。如图6所示,该接口自动化持续集成测试装置包括:获取模块10、生成模块20、执行模块30、确定模块40。各功能模块详细说明如下:
获取模块10,采集线上的流量数据,并对采集的流量数据进行数据清洗得到清洗后的目标流量数据;
生成模块20,用于调用组合生成工具基于所述目标流量数据生成目标测试用例集;所述目标测试用例集用于针对目标接口或目标服务进行测试的用例;
执行模块30,用于基于测试机器信息对所述目标测试用例集调度分发执行,并获取对应的执行结果;
确定模块40,用于根据所述目标测试用例集对应的预期结果对所述执行结果进行断言得到断言结果。
具体的,所述目标流量数据包括多个参数,以及与所述参数分别对应的可选值及可选值数量,所述生成模块20,包括:
确定单元21,用于确定所述参数的可选值数量是否大于第一预置数值;
生成单元22,用于若所述参数的可选值数量大于第一预置数值,则根据所述目标流量数据随机生成固定数量的候选用例;
筛选单元23,用于从所述候选用例中筛选出符合预置条件的用例作为测试用例;
所述生成单元22,还用于将所述测试用例作为目标测试用例集中的用例;
所述筛选单元23,用于若所述参数的可选值数量小于等于所述第一预置数值且大于第二预置数值,对所述可选值数量超过所述第二预置数值的参数,从对应的可选值中筛选出所述第二预置数值个所述可选值;
所述生成单元22,用于根据所述参数及对应筛选的可选值生成所述测试用例;
删除单元24,用于若生成的所述测试用例大于预置用例数量,则随机丢弃所述生成的测试用例。
所述生成单元22,用于若所述参数的可选值数量小于等于所述第二预置数值,则通过组合测试方式确定目标测试用例集中的用例。
具体的,所述筛选模块23,用于:
计算所述固定数量的候选用例中每个候选用例和已经执行过用例的参数差异;
选择与所述已经执行过用例的参数差异最大的候选用例作为所述测试用例;
判断选择的所述测试用例的数量是否达到预置数量;
若未达到所述预置数量,则根据所述目标流量数据重新随机生成固定数量的候选用例;
从所述候选用例中筛选出符合预置条件的用例作为测试用例;
若达到所述预置数量,则确定所述测试用例生成完成。
进一步的,所述装置还包括:
统计模块,用于根据各个测试用例的执行结果,针对被测接口和/或被测服务统计接口测试结果和/或服务测试结果;
存储模块,用于在云端以文件形式保存接口测试结果和/或服务测试结果以及相关的用例执行详细信息,并以通知形式对指定用户通知所保存的文件内容。
获取模块10,具体用于当采集到的流量数据中包含属于指定业务的第一类流量数据时,对所述第一类流量数据中包含的网址参数替换成预设的脱敏网址参数得到清洗后的目标流量数据;
当采集到的流量数据中包含指定类型信息的第二类流量数据时,对所述第二类流量数据中包含的指定类型信息进行脱敏处理得到清洗后的目标流量数据。
所述确定模块40,具体用于:
确定所述目标测试用例集中的各个测试用例的预期结果是否与对应的执行结果相符;
若相符,则确定所述测试用例执行成功;
若不符,则确定所述测试用例执行失败。
关于设备的具体限定可以参见上文中对于接口自动化持续集成测试方法的限定,在此不再赘述。上述设备中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图7所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种接口自动化持续集成测试方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
采集线上的流量数据,并对采集的流量数据进行数据清洗得到清洗后的目标流量数据;
调用组合生成工具基于所述目标流量数据生成目标测试用例集;所述目标测试用例集用于针对目标接口或目标服务进行测试的用例;
基于测试机器信息对所述目标测试用例集调度分发执行,并获取对应的执行结果;
根据所述目标测试用例集对应的预期结果对所述执行结果进行断言得到断言结果。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
采集线上的流量数据,并对采集的流量数据进行数据清洗得到清洗后的目标流量数据;
调用组合生成工具基于所述目标流量数据生成目标测试用例集;所述目标测试用例集用于针对目标接口或目标服务进行测试的用例;
基于测试机器信息对所述目标测试用例集调度分发执行,并获取对应的执行结果;
根据所述目标测试用例集对应的预期结果对所述执行结果进行断言得到断言结果。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。