首页 / 一种测试用例筛选方法、装置、计算机设备和存储介质

一种测试用例筛选方法、装置、计算机设备和存储介质实质审查 发明

技术领域

[0001] 本申请涉及软件测试技术领域,特别是涉及一种测试用例筛选方法、装置、计算机设备和存储介质。

相关背景技术

[0002] 随着软件测试技术的发展,在测试过程中为衡量某个特殊目标,通常针对该特殊目标编写测试用例进行自动化测试。
[0003] 现有技术中,由于软件系统有可能经历多次修改或升级,每次修改或升级后,都要用到所有测试用例对软件系统进行多遍测试,该方式没有对测试用例进行筛选,测试用例的针对性不强,从而有可能导致在测试过程中进行重复冗余的工作,而使得测试效率不高。

具体实施方式

[0072] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
[0073] 需要说明的是,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
[0074] 此外,在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0075] 如前述背景技术所述,目前的由于软件系统有可能经历多次修改或升级,每次修改或升级后,都要用到所有测试用例对软件系统进行多遍测试,该方式没有对测试用例进行筛选,测试用例的针对性不强,从而有可能导致在测试过程中进行重复冗余的工作,而使得测试效率不高。为此,本申请提供一种测试用例筛选方法,该方法由于对每一个代码覆盖数据及其相似的代码覆盖数据各自对应的测试用例进行筛选,这样筛选出的测试用例不但针对性强,而且能够避免大量冗余测试用例的执行,节省了测试时间,提高了软件系统的测试效率。
[0076] 在一个实施例中,提供了一种测试用例筛选方法,该方法可以应用于计算机设备,计算机设备可以用独立的服务器或者是多个服务器组成的服务器集群来实现,如图1所示,该方法可以包括以下步骤:
[0077] 101,获取目标服务的多个测试用例。
[0078] 其中,目标服务可以是任何类型的服务,目标服务通常有一个或多个接口,用例数据指的是该测试用例中用于进行接口测试的测试数据,可以包括接口请求数据和期望的接口响应数据。
[0079] 具体地,本发明对获取测试用例的过程不加以限定。
[0080] 102,通过测试用例执行引擎执行多个测试用例,获得各个测试用例对应的代码覆盖数据。
[0081] 其中,目标服务对应的服务程序代码保存保存在预设服务代码中,服务程序代码包括多个程序代码段,不同程序代码段具有不同的程序功能。
[0082] 具体地,通过测试用例执行引擎在测试环境中执行多个测试用例,获取目标服务的服务代码的覆盖率报告,从覆盖率报告中抽取代码覆盖数据,代码覆盖数据包括:测试覆盖到代码信息、未测试覆盖到代码信息以及代码覆盖率,代码信息具体可以是代码特征,代码特征包括但不限于:业务线、服务名、类名、方法名和代码行号等,代码覆盖率可以根据测试覆盖到代码信息和未测试覆盖到代码信息计算得到的,例如计算某个测试用例覆盖到的代码的行数占目标服务的程序代码的总行数的比例,得到该测试用例的代码覆盖率。这里,测试环境是指模拟出的接近真实生产环境的环境,例如,可以是staging测试环境。
[0083] 103,获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据。
[0084] 具体地,可以通过对代码覆盖数据包括的测试覆盖到代码信息、未测试覆盖到代码信息以及代码覆盖率进行分析,得到各个测试用例对应的代码覆盖数据之间的相似度,根据各个测试用例对应的代码覆盖数据之间的相似度以及预设相似条件,判断是否存在相似度满足预设相似条件的至少两个代码覆盖数据,若存在,则确定出这至少两个代码覆盖数据是彼此互为相似的代码覆盖数据。
[0085] 其中,预设相似条件可以根据实际需要进行设定,例如当某两个代码覆盖数据之间的相似度超过预设的相似度值时,确定这两个代码覆盖数据彼此互为相似。
[0086] 104,对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选。
[0087] 具体地,从彼此互为相似的代码覆盖数据各自对应的测试用例筛选中筛选出满足预设条件的测试用例作为最优测试用例。
[0088] 本发明实施例提供的用例筛选方法,通过获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据,以及对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选,这样筛选出的测试用例不但针对性强,而且能够有效降低软件的测试用例的数量,避免大量冗余测试用例的执行,节省了测试时间,提高了软件系统的测试效率。
[0089] 在一个实施例中,如图2所示,上述步骤101中获取目标服务的多个测试用例的实现过程可以包括步骤:
[0090] 1011,获取目标服务的接口参数信息,接口参数信息包括解析目标服务的实际流量数据而得到的所有接口参数各自的参数实际值。
[0091] 其中,目标服务的实际流量数据包括目标服务的各个接口的实际流量数据,实际流量数据包括请求报文和响应报文。
[0092] 具体地,可以预先录制目标服务在生产环境中的实际流量数据存储至数据库中,当服务器接收到测试用例生成指令时,根据测试用例生成指令确定被选定的目标服务,从数据库中拉取该目标服务的实际流量数据,对实际流量数据进行脱敏处理后,然后根据目标服务的各个接口对应的接口出入参结构对实际流量数据进行解析,得到接口名称、接口参数字段名以及接口参数对应的字段属性等信息,此外还可以解析得到接口参数的其他信息,例如接口统一资源定位符、接口方法类型、接口入参类型以及接口出参类型等。
[0093] 其中,接口参数的字段类型包括入参字段以及出参字段,各个参数字段具有对应的参数字段名以及参数字段名对应的字段属性信息、字段类型。服务器的数据库中预先存储有各个参数字段对应的预设的参数取值规则,参数取值规则包括参数取值范围和/或正则表达式,参数取值范围,如安全值、上边界值、下边界值、空值null、非本字段类型的参数值等。
[0094] 1012,根据各个接口参数的参数实际值以及目标服务的特征信息对所有接口参数进行机器学习,得到各个接口参数的参数取值规则。
[0095] 其中,目标服务的特征信息包括服务名称、域名以及目标服务的业务功能点等信息。
[0096] 具体地,对接口参数的参数字段名、参数字段名对应的参数实际值以及目标服务的服务名称、域名以及目标服务的业务功能点等进行机器学习,分析出各个接口参数的参数取值规则,即找出参数取值规则的规律。
[0097] 其中,机器学习可以采用例如聚类算法、神经网络、贝叶斯、回归分析等算法对各个接口参数进行分析参数取值规则,生成参数取值规则的规律结果(例如聚类或者分类结果等)。
[0098] 应理解,本发明实施例对具体的机器学习过程不加以限定。
[0099] 1013,根据各个接口参数的参数取值规则,对各个接口参数进行赋值,生成目标服务的多个测试用例。
[0100] 其中,步骤103的实现过程可以包括:
[0101] 根据各个接口参数的参数取值规则,并结合等价类划分或/和边界值法对各个接口参数进行赋值,生成目标服务的多个测试用例。
[0102] 其中,等价类划分法将测试数据分为有效等价类数据和无效等价类数据,有效等价类数据为符合限定规则的合理、有意义的数据集合,无效等价类数据为不合理、无意义的数据集合;边界值分析法通过选取指定数据域的上点、内点和离点来测试输入或输出的边界。
[0103] 此外,还可以考虑其它测试用例设计方法,例如场景法、正交表等方法。本实施例对具体的测试用例生成过程不作限定。
[0104] 本实施例中,由于目标服务的接口参数信息中包括解析目标服务的实际流量数据而得到的多个接口参数各自的参数实际值,这样根据各个接口参数的参数实际值以及目标服务的特征信息对所有接口参数进行机器学习,得到各个接口参数的参数取值规则,以及根据各个接口参数的参数取值规则,对各个接口参数进行赋值,生成目标服务的多个测试用例,能够使得测试用例更加接近生产环境中的实际流量,从而能够有效地提高了测试用例的准确性。此外,采用该方法还可以快速、高效地生成目标服务的测试用例,提高测试用例的生成效率,从而减轻测试人员编写自动化测试用例的工作量。
[0105] 在一个实施例中,上述步骤1013执行之前,方法还包括:
[0106] 针对每一个接口参数,判断接口参数是否预设有参数取值规则,若有,则将接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端,以供用户选择;以及
[0107] 接收用户端针对接口参数的参数取值规则的选择信息,并将选择信息指示的参数取值规则确定为接口参数的参数取值规则。
[0108] 其中,服务器的数据库中预先存储有各个接口参数的参数字段对应的预设的参数取值规则。其中,可以向用户端提供可视化配置界面以接收用户通过可视化配置界面对接口参数进行配置的参数取值规则,并将对接口参数字段与对应的配置的参数取值规则按键值对形式存储到数据库中。
[0109] 本实施例中,通过将接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端,以供用户选择,以及接收用户端针对接口参数的参数取值规则的选择信息,并将选择信息指示的参数取值规则确定为接口参数的参数取值规则,可以使得接口参数的参数取值规则更加准确,从而提高后续测试用例生成的准确性。
[0110] 在一个实施例中,将接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端,以供用户选择,该过程可以包括:
[0111] 对接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则进行相似度计算,确定相似度结果超过预设相似度阈值的目标接口参数,将目标接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端。
[0112] 其中,预设相似度阈值可以根据实际需要进行预先设定。相似度计算方法可以参照现有技术,例如采用欧式距离、汉明距离、余弦距离等。
[0113] 本实施例,通过相似度结果超过预设相似度阈值的目标接口参数预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端,并接收到的选择信息指示的参数取值规则确定为接口参数的参数取值规则,如此可以减少用户对参数取值规则进行选择操作的工作量,进一步提高后续测试用例的生成效率。
[0114] 在一个实施例中,如图3所示,上述步骤103中获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据,该过程可以包括步骤:
[0115] 1031,根据各个测试用例对应的代码覆盖数据,对各个测试用例与各个测试用例覆盖到的程序代码段进行绑定。
[0116] 具体地,可以根据各个测试用例对应的代码覆盖数据中的测试覆盖到代码信息,确定各个测试用例覆盖到的程序代码段,建立各个测试用例与各个测试用例覆盖到的程序代码段之间的绑定关系。建立“测试用例‑代码段”的绑定关系中,用于指示每个测试用例覆盖到哪些代码行,即每个测试用例均绑定与其覆盖到的代码段。
[0117] 可以理解的是,一个测试用例可以绑定一个或多个程序代码段,一个程序代码段包含至少一个代码行。
[0118] 1032,针对所有测试用例中的每一个目标测试用例,计算目标测试用例绑定的程序代码段与所有测试用例中的其他测试用例绑定的程序代码段之间的相同程度,并根据计算结果,获取目标测试用例对应的代码覆盖数据与其他测试用例对应的代码覆盖数据之间的相似度。
[0119] 其中,目标测试用例可以是从所有测试用例中随机选取的测试用例,其他测试用例是所有测试用例中除目标测试用例之外的测试用例。
[0120] 为了便于描述,将目标测试用例绑定的程序代码段作为第一程序代码行,将其他测试用例绑定的程序代码段作为第二程序代码段。
[0121] 具体地,上述步骤1032的实现过程可以包括:
[0122] 针对目标测试用例,遍历所有测试用例中除该目标测试用例之外的每一个其他测试用例,每遍历到一个其他测试用例时,对目标测试用例绑定的第一程序代码段以及遍历到的其他测试用例绑定的第二程序代码段各自的代码特征进行特征匹配,计算目标测试用例绑定的第一程序代码段与其他测试用例绑定的第二程序代码段之间的相同程度,将相同程度确定为测试用例对应的代码覆盖数据与其他测试用例对应的代码覆盖数据之间的相似度。本实施例对具体的相似度获取过程不作限定。
[0123] 可以理解的是,当两个测试用例各自绑定的程序代码段之间的相同程度越高时,这两个测试用例对应的代码覆盖数据越相似。这两个测试用例各自绑定的程序代码段的数量可以是一个,也可以是多个。
[0124] 1033,判断相似度是否满足预设相似条件,若满足,则确定目标测试用例对应的代码覆盖数据与其他测试用例对应的代码覆盖数据彼此互为相似。
[0125] 其中,预设相似条件可以设定为:当任意两个代码覆盖数据之间的相似度超过预设阈值时,则两个代码覆盖数据是相似的代码覆盖数据,可以理解的是,预设阈值可以根据实际情况进行设定,例如设定为80%。
[0126] 在一个实施例中,如图4所示,上述步骤104中对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选,该过程可以包括步骤:
[0127] 1041,对彼此互为相似的代码覆盖数据各自对应的测试用例归类到同一个测试用例子集中。
[0128] 其中,对彼此互为相似的代码覆盖数据各自对应的测试用例进行归类到同一个测试子集中,得到多个测试用例子集。
[0129] 示例性地,假如测试用例a与测试用例b各自对应的代码覆盖数据彼此互为相似,则将测试用例a与测试用例b归类到同一个测试用例子集中。
[0130] 可以理解的是,同一个测试用例子集中的各测试用例对应的代码覆盖率彼此互为相似,而与其他测试用例子集中的各测试用例对应的代码覆盖率不相似。
[0131] 1042,确定每个测试用例子集中的各测试用例对应的代码覆盖率。
[0132] 1043,根据每个测试用例子集中的各测试用例对应的代码覆盖率,对每个测试用例子集进行筛选。
[0133] 具体地,根据每个测试用例子集中的各测试用例对应的代码覆盖率,对每个测试用例子集进行筛选,该过程可以包括:
[0134] 针对每一个测试用例子集,对测试用例子集中的每个测试用例按照代码覆盖率从高至低的顺序进行排序,得到排序结果,筛选出排序结果中排在前N位的测试用例,以作为最优测试用例,其中,N大于等于1。
[0135] 本实施例中,对彼此互为相似的代码覆盖数据各自对应的测试用例进行归类到同一个测试子集中,得到多个测试用例子集,以及根据每个测试用例子集中的各测试用例对应的代码覆盖率,对每个测试用例子集进行筛选,不但筛选出的测试用例针对性强,能够有效降低软件的测试用例的数量,避免大量冗余测试用例的执行,而且使得筛选出的测试用例更全面,这样即便是有较少的测试用例测试覆盖到的程序代码段也可以被测试到,能够提高测试有效性以及全面性。
[0136] 在一个实施例中,提供了一种测试用例筛选装置,如图5所示,该装置可以包括:
[0137] 用例获取模块51,用于获取目标服务的多个测试用例;
[0138] 用例执行模块52,用于通过测试用例执行引擎执行多个测试用例,获得各个测试用例对应的代码覆盖数据;
[0139] 相似确定模块53,用于获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据;
[0140] 用例筛选模块54,用于对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选。
[0141] 在一个实施例中,用例获取模块51包括:
[0142] 参数获取单元,用于获取目标服务的接口参数信息,接口参数信息包括解析目标服务的实际流量数据而得到的所有接口参数各自的参数实际值;
[0143] 机器学习单元,用于根据各个接口参数的参数实际值以及目标服务的特征信息对所有接口参数进行机器学习,得到各个接口参数的参数取值规则;
[0144] 用例生成单元,用于根据各个接口参数的参数取值规则,对各个接口参数进行赋值,生成目标服务的多个测试用例。
[0145] 在一个实施例中,装置还包括参数规则处理模块,参数规则处理模块用于:
[0146] 针对每一个接口参数,判断接口参数是否预设有参数取值规则,若有,则将接口参数的预设的参数取值规则以及通过机器学习得到的参数取值规则推送至用户端,以供用户选择;
[0147] 接收用户端针对接口参数的参数取值规则的选择信息,并将选择信息指示的参数取值规则确定为接口参数的参数取值规则。
[0148] 在一个实施例中,用例生成单元具体用于:
[0149] 根据各个接口参数的参数取值规则,并结合等价类划分或/和边界值法对各个接口参数进行赋值,生成目标服务的多个测试用例。
[0150] 在一个实施例中,相似确定模块53具体用于:
[0151] 根据各个测试用例对应的代码覆盖数据,对各个测试用例与各个测试用例覆盖到的程序代码段进行绑定;
[0152] 针对所有测试用例中的每一个目标测试用例,计算目标测试用例绑定的程序代码段与所有测试用例中的其他测试用例绑定的程序代码段之间的相同程度,并根据计算结果,获取目标测试用例对应的代码覆盖数据与其他测试用例对应的代码覆盖数据之间的相似度;
[0153] 判断相似度是否满足预设相似条件,若满足,则确定目标测试用例对应的代码覆盖数据与其他测试用例对应的代码覆盖数据彼此互为相似。
[0154] 在一个实施例中,用例筛选模块54包括:
[0155] 用例归类单元,用于对彼此互为相似的代码覆盖数据各自对应的测试用例归类到同一个测试用例子集中;
[0156] 覆盖率确定单元,用于确定每个测试用例子集中的各测试用例对应的代码覆盖率;
[0157] 用例筛选单元,用于根据每个测试用例子集中的各测试用例对应的代码覆盖率,对每个测试用例子集进行筛选。
[0158] 在一个实施例中,用例筛选单元具体用于:
[0159] 针对每一个测试用例子集,对测试用例子集中的每个测试用例按照代码覆盖率从高至低的顺序进行排序,得到排序结果;以及
[0160] 筛选出排序结果中排在前N位的测试用例,以作为最优测试用例,其中,N大于等于1。
[0161] 关于测试用例筛选装置的具体限定可以参见上文中对于测试用例筛选方法的限定,在此不再赘述。上述测试用例筛选装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0162] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图6所示。该服务器包括通过系统总线连接的处理器、存储器、网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与其他设备通过网络连接通信。该计算机程序被处理器执行时以实现一种测试用例筛选方法。
[0163] 本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0164] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
[0165] 获取目标服务的多个测试用例;
[0166] 通过测试用例执行引擎执行多个测试用例,获得各个测试用例对应的代码覆盖数据;
[0167] 获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据;
[0168] 对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选。
[0169] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0170] 获取目标服务的多个测试用例;
[0171] 通过测试用例执行引擎执行多个测试用例,获得各个测试用例对应的代码覆盖数据;
[0172] 获取各个测试用例对应的代码覆盖数据之间的相似度,并根据各个相似度,确定出彼此互为相似的代码覆盖数据;
[0173] 对彼此互为相似的代码覆盖数据各自对应的测试用例进行筛选。
[0174] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
[0175] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0176] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页 第1页 第2页 第3页
相关技术
存储介质相关技术
方法装置相关技术
曾旻发明人的其他相关专利技术