发明内容
本申请提供了一种软件测试方法及装置、服务器设备和存储介质,能够帮助提升基于流量录制与回放的软件测试的测试效率。
本申请实施例的至少一个方面提供了软件测试方法,所述方法包括:监听至少一个网络端口,以获取待测试对象的网络流量的数据包;在获取得到携带有追踪标识的请求类数据包时,将该请求类数据包添加至请求数据队列中;在获取得到携带有追踪标识的响应类数据包时,在所述请求数据队列中查找与该追踪标识对应的请求类数据包是否存在,并在存在时将与该追踪标识对应的请求类数据包及响应类数据包成对地添加至响应数据队列中;在获取得到携带有追踪标识的回放类数据包时,在响应数据队列中查找与该追踪标识对应的请求类数据包及响应类数据包是否存在,并在存在时生成由该追踪标识对应的请求类数据包、响应类数据包和回放类数据包组成的测试数据组;其中,所述回放类数据包为测试服务器响应于接收到的通过对请求类数据包进行录制得到的录制请求数据包所发送的数据包;利用包括所述测试数据组的测试数据对所述待测试对象进行测试。
在一些可能的实现方式中,所述方法还包括:在将任一请求类数据包与对应的响应类数据包成对地添加至响应数据队列中时,将该请求类数据包移出所述请求数据队列;在生成任一所述测试数据组时,将该测试数据组中的请求类数据包和响应类数据包移出所述响应数据队列。
在一些可能的实现方式中,所述利用包括所述测试数据组的测试数据对所述待测试对象进行测试,包括:在一致性验证的配置参数为开启时,将所述测试数据组中的回放类数据包与所述测试数据组中的响应类数据包进行比较,以生成一致性验证的测试结果。
在一些可能的实现方式中,所述利用包括所述测试数据组的测试数据对所述待测试对象进行测试,包括:在漏洞修复验证的配置参数为开启时,根据所述测试数据组对应的追踪标识确定所述测试数据组是否属于漏洞修复项目的测试数据;在所述测试数据组是否属于漏洞修复项目的测试数据时,根据与所述测试数据组对应的漏洞修复验证规则对所述测试数据组进行处理,以生成漏洞修复验证的测试结果。
在一些可能的实现方式中,所述利用包括所述测试数据组的测试数据对所述待测试对象进行测试,包括:在版本特性验证的配置参数为开启时,加载预先配置的版本特性验证文件,并利用所述版本特性验证文件中记载的版本特性验证规则对所述测试数据组进行处理,以生成版本特性验证的测试结果。
在一些可能的实现方式中,在生成所述测试数据组之后,所述方法还包括:基于标识码对照表确定所述测试数据组中的每个数据包的标识码,每个所述数据包中包括至少一个参数项目的参数值,所述标识码对照表中包括多个参数项目的标识字符,每个数据包的标识码中包括至少一个参数项目的标识字符和至少一个参数项目的参数值;对于每个所述数据包,在该数据包的标识码不存在于流量数据库中时,将该数据包及其标识码对应存储至所述流量数据库中,在该数据包的标识码存在于所述流量数据库中时,将该数据包以覆盖的方式存储为所述流量数据库中与该标识码对应的数据包。
在一些可能的实现方式中,所述利用包括所述测试数据组的测试数据对所述待测试对象进行测试,包括:每当一个监听周期结束时,基于该监听周期内存储至所述流量数据库中的数据包,生成至少一个测试用例;利用所述至少一个测试用例对所述待测试对象进行测试。
本申请实施例的至少一个方面提供了一种软件测试装置,所述装置包括:监听模块,用于监听至少一个网络端口,以获取待测试对象的网络流量的数据包;第一处理模块,用于在获取得到携带有追踪标识的请求类数据包时,将该请求类数据包添加至请求数据队列中;第二处理模块,用于在获取得到携带有追踪标识的响应类数据包时,在所述请求数据队列中查找与该追踪标识对应的请求类数据包是否存在,并在存在时将与该追踪标识对应的请求类数据包及响应类数据包成对地添加至响应数据队列中;第三处理模块,用于在获取得到携带有追踪标识的回放类数据包时,在响应数据队列中查找与该追踪标识对应的请求类数据包及响应类数据包是否存在,并在存在时生成由该追踪标识对应的请求类数据包、响应类数据包和回放类数据包组成的测试数据组;其中,所述回放类数据包为测试服务器响应于接收到的请求类数据包的录制数据包所返回的数据包;测试模块,用于利用包括所述测试数据组的测试数据对所述待测试对象进行测试。
本申请实施例的至少一个方面提供了一种服务器设备,所述服务器设备包括:处理器;用于存储所述处理器的可执行指令的存储器;其中,所述处理器用于执行所述可执行指令,以实现上述任意一种软件测试方法。
本申请实施例的至少一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有处理器的可执行指令,所述可执行指令被配置为在被处理器执行时使所述处理器实现上述任意一种软件测试方法。
本申请实施例中,基于对各类数据包配置的追踪标识,在监听得到携带有追踪标识的数据包时通过相应的数据队列来缓存,并将携带有相同追踪标识的进行关联,以请求类数据包、响应类数据包和回放类数据包组成的测试数据组的形式进行输出,使得后续的分析和验证环节不再依赖于测试人员对于数据包的过滤、归类和匹配,不仅能够帮助减少测试人员对于处理数据包的工作量,还能由此实现自动化的验证和测试过程,有助于提升基于流量录制与回放的软件测试的测试效率,实现更高速且高业务覆盖率的测试过程。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例提供的一种软件测试方法的应用场景示意图。参见图1,在一个示例性应用场景中,业务服务器100通过网络连接300与终端设备200进行网络通信,从而通过网络接口接收终端设备200发送请求类数据包D1,并在处理后向终端设备200返回响应类数据包D2,来为终端设备200提供网络服务。在基于流量录制与回放的软件测试中,通过在业务服务器100的网络端口处进行监听,能够获取得到业务服务器100为终端设备200提供网络服务时所产生的请求类数据包D1和响应类数据包D2等真实的网络流量;从而,业务服务器100可以通过对请求类数据包D1录制得到录制请求数据包D1',并将其发送至测试环境中的测试服务器400,以基于测试服务器400返回的回放类数据包D2'来进行所需要的测试——例如,通过比较回放类数据包D2'与响应类数据包D2,可以得知已上线服务与未上线服务对于内容相同的请求的处理结果有何异同,从而实现例如漏洞修复验证的测试过程。可以看出,上述测试过程只在测试服务器400与业务服务器100之间进行,测试时所使用的数据不会改变终端设备200发送和接收的数据,因而无论测试结果如何都不会影响到业务服务器100为终端设备200提供的网络服务。应理解的是,除了可以在业务服务器100上进行数据监听和回放测试等测试过程以外,还可以将这些测试过程放在其他服务器设备上进行——例如,测试服务器400可以通过网络连接接收多个业务服务器100在其网络端口上监听得到的网络流量的数据包,从而可以在测试服务器400上完成所需要的测试过程;类似地,能够分别与业务服务器100和测试服务器400进行网络通信的其他服务器设备也同样可以执行这些测试过程。
相关技术中,基于流量录制与回放的软件测试需要依赖相应的流量录制和回放工具(如Goreplay)。然而,这些流量录制和回放工具对于各类数据包的抓取只能限于按照时间先后顺序对外输出,而不能直接指示出数据包具体涉及的业务及数据包之间的关联性,使得测试人员在收集到数据包之后,还需要近乎人工地将数据包进行过滤、归类和匹配才能进行后续的分析和验证,无法满足对于快速且高业务覆盖率的测试要求。
图2是本申请实施例提供的一种软件测试方法的步骤流程示意图。参见图2,该方法可以例如上述任意一种服务器设备执行,并包括以下步骤。
在步骤201中,监听至少一个网络端口,以获取待测试对象的网络流量的数据包。
在步骤202中,在获取得到携带有追踪标识的请求类数据包时,将该请求类数据包添加至请求数据队列中。
在步骤203中,在获取得到携带有追踪标识的响应类数据包时,在请求数据队列中查找与该追踪标识对应的请求类数据包是否存在,并在存在时将与该追踪标识对应的请求类数据包及响应类数据包成对地添加至响应数据队列中。
在步骤204中,在获取得到携带有追踪标识的回放类数据包时,在响应数据队列中查找与该追踪标识对应的请求类数据包及响应类数据包是否存在,并在存在时生成由该追踪标识对应的请求类数据包、响应类数据包和回放类数据包组成的测试数据组。其中,回放类数据包为测试服务器响应于接收到的通过对请求类数据包进行录制得到的录制请求数据包所发送的数据包。
在步骤205中,利用包括测试数据组的测试数据对待测试对象进行测试。
可以看出,本申请实施例中,基于对各类数据包配置的追踪标识,在监听得到携带有追踪标识的数据包时通过相应的数据队列来缓存,并将携带有相同追踪标识的进行关联,以请求类数据包、响应类数据包和回放类数据包组成的测试数据组的形式进行输出,使得后续的分析和验证环节不再依赖于测试人员对于数据包的过滤、归类和匹配,不仅能够帮助减少测试人员对于处理数据包的工作量,还能由此实现自动化的验证和测试过程,有助于提升基于流量录制与回放的软件测试的测试效率,实现更高速且高业务覆盖率的测试过程。
需要说明的是,所述待测试对象可以例如是服务、应用、业务、***等等,上述步骤201中可以例如通过配置监听规则以在选定的网络端口处筛选出所需要的网络流量的数据包,并由网络端口所在的业务服务器通过网络连接发送给执行上述软件测试方法的服务器设备,以实现待测试对象的网络流量的数据包的获取。当然,上述软件测试方法也可以由任一业务服务器上执行。
还需要说明的是,上述追踪标识指的是网络流量的数据包中用来指示响应、录制和回放关系的数据内容,其可以是例如由业务服务器100在请求类数据包D1和响应类数据包D2中添加的能够指示彼此之间的响应关系的标识,并通过在录制和回放时保留数据包中的这一项目,使得该标识能够指示上述请求类数据包D1、响应类数据包D2、录制请求数据包D1'和回放类数据包D2'之间的对应关系。当然,上述追踪标识的实现方式可以不限于此。
还需要说明的是,上述请求数据队列和响应数据队列可以例如处于在服务器设备的内存中建立的任意一种类型的数据缓存区,或处于在服务器设备的存储器的指定目录中建立的数据文件中;为了避免数据溢出和数据过期,可以配置实现最大队列长度和超时时间,以通过例如数据溢出时删除队尾的数据包和周期性删除过期数据包的方式对上述请求数据队列和响应数据队列进行维护。
在一些可能的实现方式中,请求数据队列和响应数据队列采用“配对成功后出队”的方式进行维护,例如:在将任一请求类数据包与对应的响应类数据包成对地添加至响应数据队列中时,将该请求类数据包移出请求数据队列;在生成任一测试数据组时,将该测试数据组中的请求类数据包和响应类数据包移出响应数据队列。如此,每个请求类数据包只会与一个响应类数据包进行配对,且每对请求类数据包和响应类数据包只会与一个回放类数据包组成测试数据组,使得数据包之间的对应关系更加清晰,方便后续进行分析和测试。
在一些可能的实现方式中,上述步骤205中的测试过程包括:在一致性验证的配置参数为开启时,将测试数据组中的回放类数据包与测试数据组中的响应类数据包进行比较,以生成一致性验证的测试结果。
在一个示例中,在对至少一个网络端口进行监听而不断获得新的数据包的过程中,每获取到一个新的携带追踪标识的数据包,就对其执行上述步骤202至步骤205中的一个:如果该数据包为请求类数据包,就通过步骤202将其添加至请求数据队列;如果该数据包为响应类数据包,就通过步骤203将其配对添加至响应数据队列中,并自动对其配对的请求类数据包执行流量录制与回放的一系列操作(比如录制得到录制请求数据包并发送至测试服务器以等待返回相应的回放类数据包);如果该数据包为回放类数据包,就通过步骤204对应生成测试数据组。如此,随着上述过程的不断进行,会在每个监听周期内自动生成若干个测试数据组;对于这些测试数据组,还可以通过上述步骤205自动进行一些测试操作——在自动测试配置文件中的一致性验证项目的配置参数为开启时,对于每个测试数据组,通过例如jsondiff的方式比较其中响应类数据包与回放类数据包的异同,并将两者是否相同的结果对应记录,从而自动生成关于这些测试数据组的一致性验证的测试结果。由于上述过程全部是由服务器设备自动完成的,测试人员可以通过借助上述过程直接得到每个监听周期内生成的测试数据组及其一致性验证的结果,并能够在需要时调取相应的记录进行分析,以得到更进一步的测试结果,因而上述软件测试方法能够帮助测试人员省去处理数据包并分别进行一致性验证的麻烦,大大提升测试效率。
在一些可能的实现方式中,上述步骤205中的测试过程还包括:在漏洞修复验证的配置参数为开启时,根据测试数据组对应的追踪标识确定测试数据组是否属于漏洞修复项目的测试数据;在测试数据组是否属于漏洞修复项目的测试数据时,根据与测试数据组对应的漏洞修复验证规则对测试数据组进行处理,以生成漏洞修复验证的测试结果。
例如,在自动测试配置文件中的漏洞修复验证项目的配置参数为开启时,在指定目录读取漏洞修复验证的接口名单及每个接口对应的验证规则,对于每个测试数据组:利用追踪标识将测试数据组与接口名单进行匹配,以确定是否属于漏洞修复项目的测试数据;若不属于,则按照上文所述的方式进行一致性验证,并得到相应的一致性验证的结果;若属于,则根据所匹配的接口确定对应的验证规则对测试数据组进行处理(比如在回放类数据包的指定参数项目为指定参数值时通过,否则不通过),以得到指示验证是否通过的测试结果。
在一些可能的实现方式中,上述步骤205中的测试过程还包括:在版本特性验证的配置参数为开启时,加载预先配置的版本特性验证文件,并利用版本特性验证文件中记载的版本特性验证规则对测试数据组进行处理,以生成版本特性验证的测试结果。
例如,在自动测试配置文件中的版本特性验证项目的配置参数为开启时,在指定目录加载由测试人员预先编写的版本特性验证文件,以利用版本特性验证文件中记载的版本特性验证规则对测试数据组进行处理(比如在回放类数据包的指定参数项目为指定参数值时通过,否则不通过),以得到指示版本特性验证是否通过的测试结果。
图3是本申请实施例提供的一种软件测试方法中自动生成测试用例过程的步骤流程示意图。参见图3,在上述任一种软件测试方法的基础上,还可以包括如下所述的步骤。
在步骤301中,基于标识码对照表确定测试数据组中的每个数据包的标识码。其中,每个数据包中包括至少一个参数项目的参数值,标识码对照表中包括多个参数项目的标识字符,每个数据包的标识码中包括至少一个参数项目的标识字符和至少一个参数项目的参数值。
在一个示例中,测试人员在服务器设备上维护有一个标识码对照表,该标识码对照表中记录了每个已知参数项目所对应的标识字符,并可以附加地记录其相应的业务逻辑描述等信息;比如,对于具有下述内容的数据包:
{‘data’:{'channel':'123','type':'webrtc','isfullscreen':1,'relation':'720X1280'}},
标识码对照表中记录了与参数项目“channel”对应的标识字符“ch”、与参数项目“type=webrtc”对应的标识字符“t1”、与参数项目“isfullscreen=1”对应的标识字符“fs1”,但没有记录与“'relation':'720X1280'”有关的参数项目,从而据此确定该数据包的标识码为“ch123-t1-fs1=relation720x1280”。其中,每个参数项目的标识码连同其可能存在的参数值以连字符“-”连接在等号“=”之前,而缺少记录的参数项目及其参数值直接以字符形式放在了等号“=”之后。可以看出,按照上述标识符映射规则,参数项目及参数值相同的数据包都能够具有相同的标识码,因而可以利用标识码更加简便地加以比较。
在步骤302中,对于每个数据包,在该数据包的标识码不存在于流量数据库中时,将该数据包及其标识码对应存储至流量数据库中,在该数据包的标识码存在于流量数据库中时,将该数据包以覆盖的方式存储为流量数据库中与该标识码对应的数据包。
在一个示例中,流量数据库可以参照上述各个队列的配置方式配置在服务器设备当中,用于存储以标识码进行标识的各个测试数据组。对于新的数据包,可以直接将其存储至流量数据库中;对于标识码已经存在的数据项目,可以将其更新为新的数据包,以保证流量数据库保存的是最新的数据。
在步骤303中,每当一个监听周期结束时,基于该监听周期内存储至流量数据库中的数据包,生成至少一个测试用例。
在步骤304中,利用至少一个测试用例对待测试对象进行测试。
由于每个测试数据组都能够直接提供业务用例样本多样性信息与用例权重信息,因此可以基于流量数据库中存储的测试数据组生成测试用例。在一个示例中,每当一个监听周期结束时,可以收集流量数据库中在本监听周期内存储的测试数据组,从而结合预先配置的用例语料表自动组装测试用例,以利用最新监听到的网络流量的数据包自动生成新的测试用例集,并用来更新先前取得的测试结果。在一个示例中,在添加了新的需求时,数据包中可能会出现新的参数项目及其对应的参数值,对此测试人员可以在标识码对照表中添加其对应的标识字符,并预先填写新的处理流程的用例语料表,用以在每个监听周期结束时生成新的测试用例和测试用例集。
图4是本申请实施例提供的一种软件测试装置的结构框图。参见图4,该软件测试装置应用于上述任一种服务器设备,并包括:监听模块41,用于监听至少一个网络端口,以获取待测试对象的网络流量的数据包;第一处理模块42,用于在获取得到携带有追踪标识的请求类数据包时,将该请求类数据包添加至请求数据队列中;第二处理模块43,用于在获取得到携带有追踪标识的响应类数据包时,在所述请求数据队列中查找与该追踪标识对应的请求类数据包是否存在,并在存在时将与该追踪标识对应的请求类数据包及响应类数据包成对地添加至响应数据队列中;第三处理模块44,用于在获取得到携带有追踪标识的回放类数据包时,在响应数据队列中查找与该追踪标识对应的请求类数据包及响应类数据包是否存在,并在存在时生成由该追踪标识对应的请求类数据包、响应类数据包和回放类数据包组成的测试数据组;其中,所述回放类数据包为测试服务器响应于接收到的请求类数据包的录制数据包所返回的数据包;测试模块45,用于利用包括所述测试数据组的测试数据对所述待测试对象进行测试。
在一些可能的实现方式中,第二处理模块43进一步用于在将任一请求类数据包与对应的响应类数据包成对地添加至响应数据队列中时,将该请求类数据包移出请求数据队列;第三处理模块44进一步用于在生成任一测试数据组时,将该测试数据组中的请求类数据包和响应类数据包移出响应数据队列。
在一些可能的实现方式中,测试模块45进一步用于:在一致性验证的配置参数为开启时,将测试数据组中的回放类数据包与测试数据组中的响应类数据包进行比较,以生成一致性验证的测试结果。
在一些可能的实现方式中,测试模块45进一步用于:在漏洞修复验证的配置参数为开启时,根据测试数据组对应的追踪标识确定测试数据组是否属于漏洞修复项目的测试数据;在测试数据组是否属于漏洞修复项目的测试数据时,根据与测试数据组对应的漏洞修复验证规则对测试数据组进行处理,以生成漏洞修复验证的测试结果。
在一些可能的实现方式中,测试模块45进一步用于:在版本特性验证的配置参数为开启时,加载预先配置的版本特性验证文件,并利用版本特性验证文件中记载的版本特性验证规则对测试数据组进行处理,以生成版本特性验证的测试结果。
在一些可能的实现方式中,测试模块45还用于:在生成测试数据组之后,基于标识码对照表确定测试数据组中的每个数据包的标识码,每个数据包中包括至少一个参数项目的参数值,标识码对照表中包括多个参数项目的标识字符,每个数据包的标识码中包括至少一个参数项目的标识字符和至少一个参数项目的参数值;对于每个数据包,在该数据包的标识码不存在于流量数据库中时,将该数据包及其标识码对应存储至流量数据库中,在该数据包的标识码存在于流量数据库中时,将该数据包以覆盖的方式存储为流量数据库中与该标识码对应的数据包。
在一些可能的实现方式中,测试模块45进一步用于:每当一个监听周期结束时,基于该监听周期内存储至流量数据库中的数据包,生成至少一个测试用例;利用至少一个测试用例对待测试对象进行测试。
本申请实施例提供的软件测试装置,其实现过程与本申请实施例提供的软件测试方法一致,所能达到的效果也与本申请实施例提供的软件测试方法相同,在此不再赘述。
图5是本申请实施例提供的一种服务器设备的结构框图。参见图5,该服务器设备包括处理器51和用于存储该处理器51的可执行指令的存储器52;其中,该处理器51用于执行所述可执行指令,以实现上述任意一种的软件测试方法。以上文所述的任意一种服务器设备为例,本申请实施例的服务器设备能够帮助减少测试人员对于处理数据包的工作量,还能由此实现自动化的验证和测试过程,有助于提升基于流量录制与回放的软件测试的测试效率,实现更高速且高业务覆盖率的测试过程。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质为非易失性的存储介质,且该存储介质存储有处理器的可执行指令,该可执行指令被配置为在被处理器执行时使处理器实现上述任意一种的软件测试方法。以上述存储器52为例,本申请实施例的计算机可读存储介质能够用来帮助减少测试人员对于处理数据包的工作量,还能由此实现自动化的验证和测试过程,有助于提升基于流量录制与回放的软件测试的测试效率,实现更高速且高业务覆盖率的测试过程。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。