一种测试用例的生成方法、装置和计算设备与流程

文档序号:24403802发布日期:2021-03-26 16:10阅读:67来源:国知局
一种测试用例的生成方法、装置和计算设备与流程

1.本发明涉及互联网系统测试技术领域,尤其涉及一种测试用例的生成方法、装置、计算设备和存储介质。


背景技术:

2.随着网络技术的快速发展,互联网系统更新迭代的速度也随之加快,互联网系统包括应用程序、网站等。互联网系统更新迭代时,使用新版本系统之前对更新代码进行测试,是保障更新迭代后的互联网系统可靠性和稳定性的关键环节。目前,主要是利用测试用例对更新代码进行测试,而测试用例的有效性决定了更新代码测试的效果。其中,测试用例是为实现测试目标而编制的一组由测试输入数据、执行条件以及于其输出结果组成的参数集,通过执行测试用例即可实现测试某个代码是否满足设定需求。
3.目前,为了提高测试用例的质量,现有技术将线上流量进行去重操作,将去重后的线上流量针对接口进行分组,从每个接口中取指定数量流量生成测试用例,或者,选择代码覆盖率高的线上流量作为测试用例。利用上述两种方法得到的测试用例数量降低、冗余减少,但是有效性仍较低。
4.因此,亟需一种测试用例的生成方法,以减少或缓解上述存在的问题。


技术实现要素:

5.为此,本发明提供一种测试用例的生成方法、装置以及计算设备,以力图解决或至少缓解上面存在的问题。
6.根据本发明的一个方面,提供一种测试用例的生成方法,在计算设备中执行,所述计算设备分别与存储装置和测试用例库耦接,所述存储装置中包括待测系统的线上流量、历史测试用例和待测系统的所有接口的线上访问次数,所述方法包括:
7.从所述存储装置获取针对所述待测系统所有接口的线上访问次数;
8.计算各接口的线上访问次数占比;
9.基于各接口线上访问次数占比,确定需要为所述待测系统中各接口拉取测试用例的第一数量;
10.从所述线上流量和所述历史测试用例中分别拉取各接口对应的第一数量的测试用例,作为第一测试用例集。
11.可选地,接口对应的第一数量为预设测试用例总数与该接口线上访问次数占比的乘积。
12.可选地,方法还包括:
13.判断接口对应的第一数量是否小于第一数值,若是,则将接口对应的第一数量设置为所述第一数值。
14.可选地,所述存储装置还包括待测系统的测试历史,所述测试历史是与所述历史测试用例对应的http响应,所述方法还包括:
15.从所述待测系统的每个接口的测试历史中拉取最新一次的http响应;
16.根据已拉取的http响应对各接口对应的所有历史测试用例进行分类;
17.从每一类的历史测试用例中拉取第二数值的测试用例,作为第二测试用例集。
18.可选地,所述根据已拉取的http响应对各接口对应的所有历史测试用例进行分类的步骤包括:
19.判断http响应是否包括json结构,若不包括,则该http响应对应接口下的所有历史测试用例为第一类,若包括,则判断json结构中是否包括节点;
20.若json结构不包括节点,则该http响应对应接口下的所有历史测试用例为第二类;
21.若json结构包括节点,则判断该节点是否为数组,若是数组,则该http响应对应接口下的所有历史测试用例为第三类,若不是数组,则该http响应对应接口下的所有历史测试用例为第四类。
22.可选地,所述从每一类的历史测试用例中提取第二数值的测试用例,作为第二测试用例集的步骤包括:
23.通过聚类算法分别对所述第一类、第二类、第三类以及第四类中的历史测试用例进行聚类;
24.从所述第一类、第二类、第三类以及第四类的历史测试用例的各聚类结果中提取所述第二数值的历史测试用例,作为所述第二测试用例集。
25.可选地,方法还包括:
26.确定所述待测系统的重点接口;
27.基于所述第一测试用例集和所述第二测试用例集确定为所述重点接口已拉取的测试用例的总数量;
28.判断为所述重点接口已拉取的测试用例的总数量是否小于第三数值,若是,则从所述线上流量和所述历史测试用例中再次为所述重点接口拉取测试用例,作为第三测试用例集,直至为所述重点接口拉取测试用例的总数量达到所述第三数值。
29.可选地,方法还包括:
30.基于所述第一测试用例集、所述第二测试用例集和所述第三测试用例集,判断是否为已经为所述待测系统的所有接口拉取测试用例,若否,则为该接口补充人工定义的测试用例,作为第四测试用例集。
31.可选地,所述人工定义的测试用例包括:由人工预先定义好的测试用例和/或根据人工定义的规则生成的多个测试用例。
32.可选地,所述根据人工定义的规则生成的多个测试用例的步骤包括:
33.获取人工定义的规则;
34.从所述人工定义的规则中提取参数;
35.在所述待测系统对应的数据库中查找各参数的数据集;
36.根据各参数的数据集计算笛卡尔积,得到多个测试用例。
37.可选地,方法还包括:
38.将所述第一测试用例集、所述第二测试用例集、所述第三测试用例集和所述第四测试用例集进行合并去重,作为测试用例集合;
39.对所述测试用例集合中的测试用例进行处理;
40.将处理后的所述测试用例集合保存至所述测试用例库。
41.根据本发明的另一个方面,提供一种测试用例的生成装置,在计算设备中执行,所述计算设备与存储装置和测试用例库耦接,所述存储装置中包括待测系统的线上流量和历史测试用例,所述装置包括:
42.获取单元,基于所述获取单元从所述存储装置获取针对所述待测系统所有接口的线上访问次数;以及基于所述获取单元从所述线上流量和所述历史测试用例中分别拉取各接口对应数量的测试用例,作为第一测试用例集;
43.计算单元,基于所述计算单元计算各接口的线上访问次数占比;
44.确定单元,基于各接口线上访问次数占比,以及根据所述确定单元确定从各接口拉取流量和历史测试用例的数量。
45.根据本发明的另一个方面,提供一种测试方法,在计算设备中执行,所述计算设备分别与测试用例库和存储装置耦接,所述测试用例库中包括测试用例,所述方法包括:
46.基于所述测试用例库的测试用例对待测系统进行测试,得到各接口的、与所述测试用例对应的http响应,其中,所述测试用例库中的测试用例是根据上述的测试用例生成方法而生成的,所述测试用例作为所述待测系统下一次测试的历史测试用例,而测试用例对应的http响应作为测试历史;
47.从所述待测系统的每个接口中拉取最新一次的http响应;
48.根据已拉取的http响应对各接口对应的测试用例进行分类;
49.通过聚类算法分别对每一类别的所述测试用例进行聚类;
50.将所述测试用例、与所述测试用例对应的http响应、各接口对应的所述测试用例的类型、以及各类型所述测试用例的聚类结果保存至所述存储装置。
51.可选地,所述根据已拉取的http响应对每个接口对应的测试用例进行分类的步骤包括:
52.判断http响应是否包括json结构,若不包括,则该http响应对应接口下的所有测试用例为第一类,若包括,则判断json结构中是否包括节点;
53.若json结构不包括节点,则该http响应对应接口下的所有测试用例为第二类;
54.若json结构包括节点,则判断该节点是否为数组,若是数组,则该http响应对应接口下的所有测试用例为第三类,若不是数组,则该http响应对应接口下的所有测试用例为第四类。
55.根据本发明的另一个方面,提供一种计算设备,包括:至少一个处理器;和存储有程序指令的存储器,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述方法的指令。
56.根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的方法。
57.本发明提供了一种测试用例的生成方法,通过待测系统线上的真实流量计算各接口的线上访问次数占比,确定待测系统各接口对应的测试用例覆盖量,基于各接口对应的测试用例覆盖量从流量源中为各接口拉取对应数量的测试用例。基于上述方法,由于通过待测系统线上的真实流量计算各接口的线上访问次数占比,使得确定的各接口对应的测试
用例覆盖量可以针对线上实际环境访问情况进行调整,即,重点接口对应的测试用例多,相反的,不重要接口对应的测试用例少。从而基于各接口对应的测试用例覆盖量,从流量源中为各接口拉取对应数量的测试用例,使得生成的测试用例的有效性得到显著提高,同时减少了测试用例量和缓解测试用例的冗余。
58.其次,本发明的流量源包括:包含不同业务场景的真实流量、历史测试用例以及针对真实流量和历史测试用例未覆盖接口的人工定义测试用例,从而使得待测系统中各接口对应的测试用例业务覆盖范围更广,进一步提高了生成测试用例的有效性。
59.另外,当存在遗漏接口的情况下,支持人工为遗漏接口补充测试用例,提高测试用例的覆盖率,从而进一步提高生成测试用例的有效性。即使在遗漏接口对应的线上流量和历史测试用例欠缺的情况下,也能够为遗漏接口通过参数化方式批量生成测试用例,可以更加方便的定义测试用例,提高了生成测试用例的效率。
60.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
61.为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
62.图1示出了根据本发明一个实施例的测试用例的生成系统100的示意图;
63.图2示出了根据本发明一个实施例的计算设备200的框图;
64.图3示出了根据本发明一个实施例的测试用例的生成方法300的流程图;
65.图4a示出了根据本发明一个实施例的从线上流量中随机选取的第一条流量json数据的示意图;
66.图4b示出了根据本发明一个实施例的从线上流量中随机选取的第二条流量json数据的示意图;
67.图5示出了根据本发明一个实施例的批量生成人工定义的测试用例的结果示意图;
68.图6示出了根据本发明一个实施例的测试方法600的流程图;以及
69.图7示出了根据本发明一个实施例的测试用例生成装置700的示意图。
具体实施方式
70.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
71.随着网络技术的快速发展,互联网系统更新迭代的速度也随之加快,互联网系统
包括应用程序、网站等。互联网系统更新迭代时,使用新版本系统之前对更新代码进行测试,是保障更新迭代后的互联网系统可靠性和稳定性的关键环节。目前,主要是利用测试用例对更新代码进行测试,而测试用例的质量决定了更新代码测试的有效性。
72.目前,多通过线上流量直接对更新代码进行测试(线上流量是用户向服务器发送的http请求),此方式无需测试人员编写测试用例,可缩短测试更新代码的时间成本,也减少了对于测试人员编写测试用例的既能要求。但是上述方法,由于直接将线上流量作为测试用例,导致测试用例的质量低、冗余大、无法针对重点接口调整测试用例的覆盖量等问题,使得得到的测试用例有效性低。
73.为了提高测试用例的质量,现有技术将线上流量进行去重操作,将去重后的线上流量针对接口进行分组,从每个接口中取指定数量流量生成测试用例,或者,在测试更新代码之前,利用代码覆盖率工具提前将线上流量在测试环境进行回放,根据测试结构选择代码覆盖率高的线上流量作为测试用例。但是,利用上述两种方法得到的测试用例仍然无法针对重点接口调整测试用例的覆盖量,使得基于上述得到的测试用例的有效性低的问题无法解决。
74.为了解决上述问题,本发明提供一种测试用例的生成系统,图1示出了根据本发明一个实施例的测试用例生成系统100的框图。如图1所示,测试用例生成系统包括存储装置110、计算设备200和测试用例库120。计算设备200分别与存储装置110和测试用例库120耦接。存储装置110用于存储待测系统的线上流量、历史测试用例、与历史测试用例对应的测试历史(测试历史即为历史测试用例对应的http响应)和待测系统的所有接口的访问次数,其中测试历史是与历史测试用例对应的http响应。测试用例库120用于存储根据本发明提供的测试用例生成系统生成的测试用例。
75.在本发明的测试用例生成系统中,计算设备200从存储装置110获取针对待测系统所有接口的访问次数,并计算各接口的线上访问次数占比,基于各接口线上流量访问次数占比,确定为各接口从流量源中拉取测试用例的数量,并从流量源中拉取各接口对应数量的测试用例,作为测试用例集合,将测试用例集合保存至测试用例库120中。其中,流量源包括:包含不用业务场景的真实流量、历史测试用例以及针对真实流量和历史测试用例未覆盖接口的人工定义测试用例。
76.基于上述内容可知,由于通过待测系统线上的真实流量计算各接口的线上访问次数占比,实现针对线上实际环境访问情况调整待测系统中各接口对应的测试用例覆盖量,即,重点接口对应的测试用例多,相反的,不重要接口对应的测试用例少。从而基于各接口对应的测试用例覆盖量,从流量源中拉取各接口对应数量的测试用例,使得生成的测试用例的有效性得到显著提高,同时减少了测试用例量和缓解测试用例的冗余。
77.另外,本发明为待测系统中各接口拉取测试用例的流量源包括:包含不用业务场景的真实流量、历史测试用例以及针对真实流量和历史测试用例未覆盖接口的人工定义测试用例,从而为待测系统中各接口拉取的测试用例覆盖范围更广,进一步提高了生成的测试用例的有效性。
78.待测系统即互联网系统,可以是应用程序,该应用程序可以安装或未安装在计算设备200中。待测系统也可以是在计算设备200中经过网络而访问的网站。
79.存储装置110可以有多个,多个存储装置110共同存储或分别存储待测系统的线上
流量、历史测试用例、与历史测试用例对应的测试历史和所有接口的访问次数。本发明的测试用例生成系统100仅示例性地示出了一个存储装置110的情况。本发明对存储装置110的具体部署、配置情况不做限制。
80.一个实施方式中,存储装置110可以是数据库,进一步地,数据库可以是关系型数据库,例如mysql、sqlserver、access等,存储装置110的数据库可以是驻留于计算设备200中的本地数据库,也可以作为分布式数据库例如hbase等设置于多个地理位置处;存储装置110也可以是缓存,例如redis缓存等,总之存储装置110用于存储待测系统的线上流量、历史测试用例、与历史测试用例对应的测试历史和所有接口的访问次数。
81.同样地,测试用例库120可以有多个,多个测试用例库120共同存储或分别存储根据本发明提供的测试用例生成系统生成的测试用例。本发明的测试用例生成系统100仅示例性地示出了一个测试用例库120的情况。本发明对测试用例库120的具体部署、配置情况不做限制。
82.一个实施方式中,测试用例库120可以是数据库,进一步地,数据库可以是关系型数据库,例如mysql、sqlserver、access等,测试用例库120的数据库可以是驻留于计算设备200中的本地数据库,也可以作为分布式数据库例如hbase等设置于多个地理位置处;测试用例库120也可以是缓存,例如redis缓存等,总之测试用例库120用于存储根据本发明提供的测试用例生成系统生成的测试用例。
83.一个实施方式中,计算设备200可以实现为服务器,例如应用服务器、web服务器等;也可以实现为桌面电脑、笔记本电脑、处理器芯片、平板电脑等,但不限于此。计算设备200可以与存储装置110连接,并获取数据存储装置110中所存储的数据。例如,计算设备200可以直接读取存储装置110中的数据(在存储装置110为计算设备200的本地数据库时),也可以通过有线或无线的方式接入互联网,并通过数据接口来获取存储装置110中的数据。计算设备200还可以与测试用例库120耦接,例如,计算设备200可以直接向测试用例库存储根据本发明提供的测试用例生成系统生成的测试用例(在测试用例库120为计算设备200的本地数据库时),也可以通过有线或无线的方式接入互联网,并通过数据接口向测试用例库120存储测试用例。
84.图2示出了根据本发明一个实施例的计算设备200的框图,需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的测试用例生成方法和测试方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的测试用例生成方法和测试方法的计算设备可以对图2所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
85.如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
86.取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μp)、微控制器(μc)、数字信息处理器(dsp)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器218可以与处理器
204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
87.取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器ram,磁盘中的数据需要加载至物理内存中才能够被处理器204读取。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上由一个或多个处理器204利用程序数据224执行指令。操作系统220例如可以是linux、windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用222包括用于实现各种用户期望的功能的程序指令,应用222例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境ide、编译器等)等,但不限于此。当应用222被安装到计算设备200中时,可以向操作系统220添加驱动模块。
88.在计算设备200启动运行时,处理器204会从存储器206中读取操作系统220的程序指令并执行。应用222运行在操作系统220之上,利用操作系统220以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用222时,应用222会加载至存储器206中,处理器204从存储器206中读取并执行应用222的程序指令。
89.计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个a/v端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个i/o端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
90.网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
91.在根据本发明的计算设备200中,应用222包括用于执行本发明的方法300或600的指令,该指令可以指示处理器204执行本发明的方法300或600。
92.图3示出了根据本发明一个实施例的测试用例的生成方法300的流程图,该方法适于在图2所述的计算设备200中执行。
93.测试用例的生成方法始于步骤s310。在步骤s310中,从存储装置110获取针对待测系统的所有接口的线上访问次数。其中线上访问次数是用户向待测系统各接口发送http请求的次数。一个实施方式中,所有接口的线上访问次数是预先根据待测系统线上流量统计得到的,并将所有接口的线上访问次数存储至存储装置110中。一个实施方式中,可以统计
特定天数或特定某一天的待测系统所有接口的线上访问次数。例如,可以统计当前时间前一天的待测系统所有接口的线上访问次数。计算设备200从存储装置110中获取针对待测系统所有接口的线上访问次数,并对各接口的线上访问次数由高至低排序。一个实施方式中,计算设备200取线上访问次数排名前1000的接口及各接口的线上访问次数。
94.线上流量是从待测系统线上环境拉取的真实流量,由于真实流量的数据结构存在差异,因此从待测系统线上环境拉取真实流量时,不同数据结构的流量对应一个流量拉取模板。本发明不受限于具体地为不同数据结构的流量设计查询模板的方式,所有可以为不同数据结构的流量设计提取模板的方式均在本发明的保护范围之内。
95.例如,从线上流量中随机选取的第一条流量json的数据如图4a所示,第二条流量json中的数据如图4b所示。第一条流量json数据中的域名是host字段、接口是document_uri字段、参数为query_string字段。而第二条流量json数据中的域名是host_addr字段、接口是autolog_uri_prefix字段,没有单独的参数字段。因此需要针对不同数据结构的流量预先制定相对应的模板。
96.一个实施方式中,还会预先设置已拉取的线上流量和历史测试用例中部分字段的统一格式。在拉取到线上流量和历史测试用例后,从线上流量和历史测试用例中提取与表1中相同含义的字段,并将提取的字段转化为预设字段格式后存储于存储装置110中。其中,预设字段格式如表1所示:
97.表1
98.字段含义id数据库内部idproject_id项目idcase_id用例idapi_id接口标识idmethodhttp请求方法(get/post)protocolhttp协议(http/https)host域名urlhttp请求urlpathhttp请求路径paramhttp请求参数content_typehttp请求格式bodyhttp请求bodyporthttp请求端口iphttp请求ipsource首次添加来源(上传/拉取等)
99.将拉取的线上流量和历史测试用例中与表1中相同含义的字段格式化为表1的格式,并将已拉取的、格式化为相同字段格式的线上流量和历史测试用例保存至存储装置110。
100.接下来在步骤s320中,计算各接口的线上访问次数占比,以及在步骤s330中,基于各接口线上访问次数占比,确定需要为待测系统中各接口拉取测试用例的第一数量。一个
实施方式中,每个接口对应的第一数量为预设测试用例总数与该接口线上访问次数占比的乘积。例如,每个接口对应的第一数量为预设测试用例总数与排名前1000的接口线上流量访问次数占比的乘积。例如,将排名前1000的接口命名为接口1至接口1000,预设测试用例总数为2000条,若接口1的线上流量访问次数占比为0.2%,那么需要为接口1拉取4条线上流量和4条历史测试用例,若接口1000的线上流量访问次数占比为0.1%,那么需要为接口1000拉取2条线上流量和2条历史测试用例。
101.一个实施方式中,会预先为接口拉取测试用例的第一数量设置一个阈值,假设该预设阈值为第一数值,并判断接口对应的第一数量是否小于第一数值,若是,则将接口对应的第一数量设置为第一数值。
102.例如,需要计算接口1对应的第一数量,以及判断接口1对应的第一数量是否小于第一数值。若第一数值为3,也就是说为接口1从不同的流量源拉取的测试用例数量不少于3条。若为接口1拉取线上流量的第一数量为2、拉取历史测试用例的第一数量为4,由于为接口1拉取线上流量的第一数量为2,小于第一数值3,那么将为接口1拉取线上流量的第一数量2设置为3,由于为接口1拉取历史测试用例的第一数量为4,大于第一数值3,那么为接口1拉取历史测试用例的数量不变,仍为4。
103.基于上述方法分别确定为接口拉取流量和历史测试用例的第一数量后,在步骤s340中,从线上流量和历史测试用例中分别拉取各接口对应的第一数量的测试用例,作为第一测试用例集。
104.基于上述方法,由于通过待测系统线上的真实流量计算各接口的线上访问次数占比,使得确定的、为各接口拉取的测试用例数量可以针对线上实际环境访问情况进行调整,为重点接口拉取的测试用例多,相反的,为不重要接口拉取的测试用例少。从而基于确定的、为各接口拉取的测试用例数量,从流量源中为各接口拉取对应数量的测试用例,使得生成的测试用例的有效性得到显著提高,同时减少了测试用例量和缓解测试用例的冗余。
105.然而,针对用户发送的http请求(用户发送的http请求即待测系统线上真实流量),做出的http响应的结果可能存在为空、不为空、报错等情况。由于线上流量只包括http请求,而不包括http响应,因此没有从http响应的角度考虑为各接口从历史测试用例中拉取上述情况对应的测试用例的情形。因此,为了使生成的测试用例中包含上述http响应的各种情况,以进一步提高生成的测试用例的业务场景覆盖率,从而进一步提高生成的测试用例的有效性,需要为各接口从上述各种情况的历史测试用例中再次拉取第二数值的测试用例。例如第二数值可以为2。
106.一个实施方式中,通过历史测试用例的http响应反向为待测系统各接口的所有历史测试用例进行分类,并将分类后的历史测试用例进行聚类,从每一类的历史测试用例中拉取第二数值的测试用例,作为第二测试用例集。
107.对一个接口的历史测试用例进行分类的步骤具体包括:从待测系统的接口的测试历史(测试历史即历史测试用例对应的http响应)中拉取最新一次的http响应,判断http响应是否为json结构,若不是,则该http响应对应接口下的所有历史测试用例为第一类,若是,则判断json结构中是否包括节点,若json结构不包括节点,则该http响应对应接口下的所有历史测试用例为第二类,若json结构包括节点,则判断该节点是否为数组,若是数组,则该http响应对应接口下的所有历史测试用例为第三类,若不是数组,则该http响应对应
接口下的所有历史测试用例为第四类。当然,本发明不受限于具体地为待测系统各接口的所有历史测试用例进行分类的方式,所有可以为待测系统各接口的所有历史测试用例进行分类的方式均在本发明的保护范围之内。
108.例如,判断http响应是否是json结构,若不是,则该http响应对应接口下的所有历史测试用例为第一类。若是json结构,则判断json结构中是否包括$.result节点,若json结构不包括$.result节点,则该http响应对应接口下的所有历史测试用例为第二类。若json结构包括$.result节点,则判断该节点是否为数组。若$.result节点是数组,则该http响应对应接口下的所有历史测试用例为第三类,若不是数组,则该http响应对应接口下的所有历史测试用例为第四类。
109.由于不为空的http请求中数据长度也会不同,因此为了考虑http请求中不同数据长度这一情况,在确定各个接口中所有历史测试用例类型之后,还需要对各个接口中的不同类别的历史测试用例进行聚类,并从不同类别的历史测试用例的各聚类结果中提取第二数值的历史测试用例,作为第二测试用例集。
110.一个实施方式中,在确定待测系统的各个接口中所有历史测试用例的类别之后,通过聚类算法分别对上述得到的第一类、第二类、第三类以及第四类中的历史测试用例进行聚类,并从第一类、第二类、第三类以及第四类的历史测试用例的各聚类结果中提取第二数值的历史测试用例,作为第二测试用例集。当然,本发明不受限于具体地对各类别的历史测试用例进行聚类的方式,所有可以对各类别的历史测试用例进行聚类的方式均在本发明的保护范围之内。
111.例如,若http响应对应接口下的所有历史测试用例为第一类,则基于kmeans聚类算法按照数据长度进行聚类。若http响应对应接口下的所有历史测试用例为第二类,则基于kmeans聚类算法按照数据总长度进行聚类。若http响应对应接口下的所有历史测试用例为第三类,则基于kmeans聚类算法按照数据节点和总长度进行聚类。若http响应对应接口下的所有历史测试用例为第四类,则基于kmeans聚类算法按照元素数及数据总长度进行聚类。并从待测系统的所有接口对应的第一类、第二类、第三类以及第四类的历史测试用例的每个聚类结果中提取2条历史测试用例,作为第二测试用例集。当然,本发明不受限于具体聚类算法,所有可以对各类别的历史测试用例进行聚类的聚类算法均在本发明的保护范围之内。
112.在一个时间段内可能会存在某些重点接口的线上流量访问量不足的情况,使得在为各接口拉取第一、第二测试用例集后,仍然会存在被忽略的重点接口。为了避免因线上流量访问不足而忽略重点接口的情况出现,一个实施方式中,为重点接口从线上流量和历史测试用例中拉取更多的流量和历史测试用例,作为第三测试用例集,直到达到第三数值时停止为重点接口拉取测试用例。具体地,确定待测系统的重点接口,其中需要为重点接口多拉取测试用例,重点接口可以由测试人员预先设定,本发明不受限于具体地确定重点接口的方式,所有可以确定重点接口的方式均在本发明的保护范围之内。接下来基于上述生成的第一测试用例集和第二测试用例集确定为重点接口已拉取的测试用例的总数量,判断为重点接口已拉取的测试用例的总数量是否小于第三数值,若是,则从线上流量和历史测试用例中再次为重点接口拉取测试用例,作为第三测试用例集,直至为重点接口拉取测试用例的总数量达到第三数值。例如,只有一个重点接口1,假设第三数值为50,根据第一、第二
测试用例集可知,已经为重点接口1拉取了35条测试用例,因此还需要为重点接口1从线上流量和历史测试用例中拉取15条测试用例,再次为重点接口1拉取的15条测试用例作为第三测试用例集,只有为重点接口1拉取的测试用例为50时才会停止为重点接口1拉取测试用例。
113.若有两个重点接口1和重点接口2,假设第三数值为50,根据第一、第二测试用例集可知,已经为重点接口1和2分别拉取了35条、30条测试用例,因此还需要为重点接口1和重点接口2从线上流量和历史测试用例中分别拉取15条、20条测试用例,再次为重点接口1和2拉取的15条、20条测试用例作为第三测试用例集,只有为重点接口1和重点接口2拉取的测试用例为50时才会停止为重点接口1和重点接口2拉取测试用例。
114.在为待测系统的接口从线上流量和历史测试用例中拉取流量和历史测试用例后,本发明中再次从线上流量和历史测试用例中为待测系统的重点接口拉取更多的流量和历史测试用例,作为第三测试用例集,直到达到第三数值时停止为重点接口拉取测试用例,从而避免因线上流量访问不足而忽略重点接口的情况出现,更好地实现为调整重点接口对应的测试用例覆盖量,进一步提高生成的测试用例的有效性。
115.在计算各接口的线上访问次数占比时,由于在当前时间段内待测系统的某一接口的线上访问次数可能为0,这就会导致遗漏接口的情况出现。为了进一步提高生成的测试用例的有效性,本发明中会为遗漏的接口通过人工定义的测试用例进行补充。
116.具体地,基于第一测试用例集、第二测试用例集和第三测试用例集,判断是否为已经为待测系统的所有接口拉取测试用例,若否,则为遗漏接口补充人工定义的测试用例,作为第四测试用例集。其中,人工定义的测试用例包括:由人工预先定义好的测试用例,可以基于人工定义好的测试用例可以直接为遗漏接口补充测试用例,或者根据人工定义的规则生成的多个测试用例。本发明不受限于具体地生成测试用例的人工定义规则,所有可以生成多个测试用例的人工定义规则均在本发明的保护范围之内。
117.一个实施方式中,根据人工定义的规则生成的多个测试用例具体包括:获取人工定义的规则,从人工定义的规则中提取参数,在待测系统对应的数据库中查找各参数的数据集,根据各参数的数据集计算笛卡尔积,得到多个测试用例。本发明不受限于具体地生成多个测试用例的方式,所有可以通过人工定义生成多个测试用例的方式均在本发明的保护范围之内。
118.例如,人工定义的测试用例规则为:请求的url为:/send?xcode=ugc&guid=${uid},body为:
[0119][0120]
时,则从人工定义的测试用例规则中提取的参数包括:uid、user、reminddesc,并基于测试人员预先定义的excel或者sql语句从对应的业务数据库中查询与上述参数相关的数据集。例如从指定的数据库中查询到包含参数uid的数据集为1500条、包含参数user的
数据集为3条、包含参数reminddesc的数据集为2条,那么根据笛卡尔积计算生成1500*3*2=9000条包含不同参数的测试用例。
[0121]
假设在数据库中查询到参数uid包括3条数据:1、3、8;在数据库中查询到user是查库sql为select userid as user from records where isdel=0limit 2的数据,包括2条数据:1001、1002;在数据库中查询到参数reminddesc包括1条数据:“通知”。则通过遍历笛卡尔积生成3*2*1=6条测试用例,如图5所示,图5为批量生成人工定义的测试用例的结果示意图。图5中第一列中“种子”对应的行(即第一行)是定义的测试用例生成规则,实质是人工定义的一条测试用例模板,例如由测试人员定义的一条测试用例模板。图5中第一列1

6所对应的行即为得到的6条测试用例。
[0122]
通过上述方法,当为待测系统中部分接口拉取流量时存在遗漏的情况下,支持人工为遗漏接口补充测试用例,提高测试用例的覆盖率,从而进一步提高生成测试用例的有效性。另外,即使在遗漏接口对应的线上流量和历史测试用例欠缺的情况下,也能够通过参数化方式批量生成测试用例,可以更加方便的定义测试用例,提高了生成测试用例的效率。
[0123]
在为待测系统中遗漏接口补充测试用例后,为待测系统各接口提取的测试用例可能会存在冗余,为了缓解冗余,一个实施方式中,将上述得到的第一测试用例集、第二测试用例集、第三测试用例集和第四测试用例集进行合并去重,作为测试用例集合。对测试用例集合中的测试用例进行处理可以包括:解析url、在测试用例中增加参数、替换参数替换、删除参数等。并将处理后的测试用例集合保存至测试用例库120,以供待测系统进行测试时使用。
[0124]
基于上述内容可知,由于通过待测系统线上的真实流量计算各接口的线上访问次数占比,实现针对线上实际环境访问情况调整待测系统中各接口对应的测试用例覆盖量,即,重点接口对应的测试用例多,相反的,不重要接口对应的测试用例少。从而基于各接口对应的测试用例覆盖量,从流量源中拉取各接口对应数量的测试用例,使得生成的测试用例的有效性得到显著提高,同时缓解测试用例的冗余和减少了测试用例量。
[0125]
其次,本发明为待测系统的各接口拉取测试用例的流量源包括:包含不用业务场景的真实流量、历史测试用例以及针对真实流量和历史测试用例未覆盖接口的人工定义测试用例,从而为待测系统的接口拉取的测试用例覆盖范围更广,进一步提高了生成的测试用例的有效性。
[0126]
并且,在为待测系统的各个接口从线上流量和历史测试用例中拉取流量和历史测试用例后,本发明中再次从线上流量和历史测试用例中为待测系统的重点接口拉取更多的流量和历史测试用例,作为第三测试用例集,直到达到第三数值时停止为重点接口拉取测试用例,从而避免因线上流量访问不足而忽略重点接口的情况出现,更好地实现为调整重点接口对应的测试用例覆盖量,进一步提高生成的测试用例的有效性。
[0127]
另外,当为待测系统中接口拉取流量时存在遗漏接口的情况下,支持人工为遗漏接口补充测试用例,提高测试用例的覆盖率,从而进一步提高生成测试用例的有效性。并且,即使在遗漏接口对应的线上流量和历史测试用例欠缺的情况下,也能够通过参数化方式批量生成测试用例,可以更加方便的定义测试用例,提高了生成测试用例的效率。
[0128]
图6示出了根据本发明一个实施例的测试方法600的流程图,该方法适于在图2所述的计算设备200中执行,计算设备分别与测试用例库和存储装置耦接,测试用例库中包括
测试用例。
[0129]
测试方法始于步骤s610。在步骤s610中,基于测试用例库的测试用例对待测系统进行测试,得到各接口的、与测试用例对应的http响应。其中,测试用例库中的测试用例是根据上述的测试用例生成方法而生成的。并且测试用例也作为待测系统下一次测试的历史测试用例,而测试用例对应的http响应作为测试历史。接下来在步骤s620中,待测系统的每个接口中拉取最新一次的http响应。
[0130]
以及在步骤s630中,根据已拉取的http响应对各接口对应的测试用例进行分类。具体地,判断http响应是否包括json结构,若不包括,则该http响应对应接口下的所有测试用例为第一类,若包括,则判断json结构中是否包括节点;若json结构不包括节点,则该http响应对应接口下的所有测试用例为第二类;若json结构包括节点,则判断该节点是否为数组,若是数组,则该http响应对应接口下的所有测试用例为第三类,若不是数组,则该http响应对应接口下的所有测试用例为第四类。
[0131]
之后在步骤s640中,通过聚类算法分别对每一类别的所述测试用例进行聚类。其中,聚类算法可以为kmeans聚类算法。当然,本发明不受限于具体聚类算法,所有可以对各类别的历史测试用例进行聚类的聚类算法均在本发明的保护范围之内。
[0132]
最后在步骤s650中,将测试用例、与测试用例对应的http响应、各接口对应的测试用例的类型、以及各类型测试用例的聚类结果保存至存储装置110,以供待测系统进行下一次测试时使用。具体地,从测试用例中提取与表1中相同含义的字段,并将提取的字段转化为与表1中字段相同格式后存储于存储装置110中。
[0133]
上述对待测系统进行测试的方法中,由于利用了高有效性的测试用例对待测系统进行测试,提高测试时业务场景的覆盖率,从而提高测试的准确性。另外,上述测试方法中的测试用例是经过去冗余的,可以提高测试效率。
[0134]
图7示出了根据本发明一个实施例的测试用例的生成装置700的示意图,装置700在计算设备200中执行。参照图7,装置700包括:
[0135]
获取单元710,基于所述获取单元710从所述存储装置获取针对所述待测系统所有接口的线上访问次数;以及基于所述获取单元从所述线上流量和所述历史测试用例中分别拉取各接口对应数量的测试用例,作为第一测试用例集;
[0136]
计算单元720,基于所述计算单元720计算各接口的线上访问次数占比;
[0137]
控制单元730,基于各接口线上访问次数占比,以及根据所述控制单元730确定从各接口拉取流量和历史测试用例的数量。
[0138]
获取单元710、计算单元720和控制单元730所执行的具体步骤,可参照上述方法300,这里不做赘述。
[0139]
综上所述,通过待测系统线上的真实流量计算各接口的线上访问次数占比,确定待测系统各接口对应的测试用例覆盖量,基于各接口对应的测试用例覆盖量从流量源中拉取各接口对应数量的测试用例。基于上述方法,由于通过待测系统线上的真实流量计算各接口的线上访问次数占比,实现针对线上实际环境访问情况调整待测系统中各接口对应的测试用例覆盖量,即,重点接口对应的测试用例多,相反的,不重要接口对应的测试用例少。从而基于各接口对应的测试用例覆盖量,从流量源中拉取各接口对应数量的测试用例,使得生成的测试用例的有效性得到显著提高,同时减少了测试用例量和缓解测试用例的冗
余。
[0140]
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd

rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
[0141]
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的测试用例的生成方法和测试方法。
[0142]
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
[0143]
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0144]
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0145]
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
[0146]
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
[0147]
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权
利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0148]
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0149]
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
[0150]
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0151]
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1