测试方法、装置、电子设备及计算机可读存储介质与流程

文档序号:14554616阅读:148来源:国知局
测试方法、装置、电子设备及计算机可读存储介质与流程

本公开涉及计算机技术领域,具体涉及一种测试方法、装置、电子设备及计算机可读存储介质。



背景技术:

在互联网o2o业务中,离线数据系统在用户画像建模中有着广泛的应用。通过对海量的用户交互行为(如浏览、点击、下单等)进行统计计算,得到用户行为数据,可以对用户进行刻画。其特点为:数据量大,迭代速度快。例如,在百度外卖这一系统平台中,用户画像在五个月时间内,单个用户字段数量可以从200+增加到800+,其中大多数字段可通过数据库查询得出结果。而为了精确描述和刻画用户,字段准确性备受关注。



技术实现要素:

本公开实施例提供一种测试方法、装置、电子设备及计算机可读存储介质。

第一方面,本公开实施例中提供了一种测试方法。

具体的,所述测试方法,包括:

获取多个测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;所述测试数据被封装在程序代码中;

针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;

执行所述任务,所述任务根据所述测试数据确定测试结果。

结合第一方面,其中,执行所述任务,包括:

执行所述测试数据中所述字段名对应的所述查询语句;

根据所述查询结果确定测试结果。

结合第一方面,本公开在第一方面的第一种实现方式中,所述测试数据还包括所述字段名对应的被测数据以及测试方式。

结合第一方面,本公开在第一方面的第二种实现方式中,针对所述对象列表中预设对象,以协程方式并发产生多个任务,包括:

将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;

所述任务从所述队列中读取一条记录,并执行相应操作。

结合第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中,针对所述对象列表中预设对象,以协程方式并发产生多个任务,还包括:

将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。

结合第一方面的第一种实现方式,本公开在第一方面的第四种实现方式中,根据所述查询结果确定测试结果,包括:

根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。

结合第一方面、第一方面的第一种实现方式、第一方面的第二种实现方式、第一方面的第三种实现方式或第一方面的第四种实现方式,本公开在第一方面的第五种实现方式中,在所述预设对象为多个的情况下,针对所述对象列表中预设对象,以协程方式并发产生多个任务,包括:

对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

第二方面,本公开实施例提供了一种测试装置,包括:

获取模块,被配置为获取多个测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;

第一执行模块,被配置为针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;

任务执行模块,被配置为执行所述任务,所述任务根据所述测试数据确定测试结果。

结合第二方面,其中,所述任务执行模块包括:

第一执行子模块,被配置为执行所述测试数据中所述字段名对应的所述查询语句;

第一测试子模块,被配置为根据所述查询结果确定测试结果。

结合第二方面,本公开在第二方面的第一种实现方式中,所述测试数据还包括所述字段名对应的被测数据以及测试方式。

结合第二方面,本公开在第二方面的第二种实现方式中,所述第一执行模块,包括:

第一队列子模块,被配置为将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;

第二执行子模块,被配置为所述任务从所述队列中读取一条记录,并执行相应操作。

结合第二方面的第二种实现方式,本公开在第二方面的第三种实现方式中,所述第一执行模块,还包括:

第二队列子模块,被配置为将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。

结合第二方面的第一种实现方式,本公开在第二方面的第四种实现方式中,所述第一测试子模块,包括:

第二测试子模块,被配置为根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。

结合第二方面,所述测试数据被封装在程序代码中。

结合第二方面、第二方面的第一种实现方式、第二方面的第二种实现方式、第二方面的第三种实现方式或第二方面的第四种实现方式,本公开在第二方面的第五种实现方式中,在所述预设对象为多个的情况下,所述第一执行模块,包括:

第三执行子模块,被配置为对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。

在一个可能的设计中,测试装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持测试装置执行上述第一方面中测试方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。所述测试装置还可以包括通信接口,用于测试装置与其他设备或通信网络通信。

第三方面,本公开实施例提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现第一方面所述的方法步骤。

第四方面,本公开实施例提供了一种计算机可读存储介质,用于存储测试装置所用的计算机指令,其包含用于执行上述第一方面中测试方法所涉及的计算机指令。

本公开实施例提供的技术方案可以包括以下有益效果:

本公开实施例在测试数据库字段时,通过将待测试的字段以及相应的字段查询语句封装成程序代码,并在测试时,以协程方式一次并发产生多个任务,每个任务针对同一用户分别执行多条不同的查询语句,实现异步查询模式。本公开实施例基于异步协程模式的全自动化测试,并发执行字段查询请求,并根据查询结果获得测试结果,提升了sql查询效率,进而提高了测试效率和测试用例的覆盖度,节省了测试时间,且测试框架的具有可拓展性和广泛的通用性。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:

图1示出根据本公开一实施方式的测试方法的流程图;

图2示出根据图1所示实施方式的步骤s102的流程图;

图3示出根据本公开一实施方式的测试装置的结构框图;

图4示出根据图3所示实施方式的第一执行模块302的结构框图;

图5是适于用来实现根据本公开一实施方式的测试方法的电子设备的结构示意图。

具体实施方式

下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。

在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。

另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。

目前大部分字段准确性测试采用的方法为纯人工手动测试或串行半自动化测试。纯人工测试即人工逐个拼写该用户、该字段逻辑的sql查询语句,然后在数据库中单个执行sql查询语句,得到数据库查询结果,再与画像模型产出的该用户的该字段进行人工比对,判断正误。半自动化测试即将逐个人工拼写的sql查询语句封装成脚本文件,利用执行程序逐行读取脚本文件中的sql查询语句,串行自动调用sql查询语句的请求接口,得出数据库查询结果,再与画像模型产出的该用户的该字段进行人工比对,判断正误。

然而,上述纯人工测试方式下,需要人工逐个编写sql查询语句,进行http请求查询,耗时较长,逻辑较复杂的sql查询语句的执行时间甚至长达30分钟以上。由于人工精力有限,所以测试覆盖用户少。测试人员一直在做重复工作,较为繁琐,且效率低下。即使在半自动化的测试方式下,程序一直串行执行sql查询请求,对测试的时间效率和测试用户的覆盖度也是远远达不到要求。

图1示出根据本公开一实施方式的测试方法的流程图。如图1所示,所述测试方法包括以下步骤s101-s103:

在步骤s101中,获取多个测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;所述测试数据被封装在程序代码中;

在步骤s102中,针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;

在步骤s103中,执行所述任务,所述任务根据所述测试数据确定测试结果。

在本实施例中,测试的是被测数据的正确性。而被测数据可以是根据数据库中存储的字段值得到的,例如针对数据库的字段查询开发出的软件计算得到;当然可以理解的是,被测数据可以是任何与数据库字段查询相关且需要进行验证的数据。传统方式下在测试软件输出的被测数据的正确性时,通过将人工编写的sql查询语句得到的查询结果与软件自动计算得到的结果进行比较,来确定软件计算结果的正确性,即测试软件的计算效果。

而本实施例中,测试被测数据的正确性时,将通过程序化方式,将测试数据设计的字段名、字段名对应的查询语句以及字段名对应的对象列表等封装成程序代码的形式,并在程序代码执行过程中,从程序代码中获取测试数据以及对象列表,并以协程方式针对对象列表中的同一预设对象并发产生多个任务,每个任务执行一条测试数据,而一条测试数据对应一个字段名、该字段名对应的一条查询语句,也就是说每个任务执行一个查询语句,多个任务由于是并行执行,互相不需要等待查询结果的返回,因此可以提高查询效率。

本实施例中,测试数据可以预先封装在程序代码中。在测试之前,将待测试的字段名、对应的查询语句的逻辑写入程序代码,同时还可以每个字段对应的测试方法逻辑也写入程序代码,实现测试过程的全自动化,并且采用协程的多任务并发方式,实现多个查询语句的异步执行模式,能够节约查询时间,节省测试成本。

协程与线程不同,协程可以认为是用户空间线程,操作系统对其一无所知,需要开发人员在线程中涉及好调度,用来执行协作式多任务非常合适。操作系统调用到协程所承载的线程后,线程内部再完成对协程的二级调度。因此,本公开实施例通过编写程序代码,使得测试数据对应的查询语句以协程方式并发执行。

在本实施例中,字段名对应的查询语句可以是字段对应的字段值,也可以是一段时间内字段对应的多个字段值按照某种计算逻辑得到的值。例如,字段为用户每天的消费金额,而对应的查询语句可以是用户一年内的平均消费金额。在一实施例中,对象列表可以包括用户id列表和时间列表,每个查询语句针对的是一个字段,但是该字段针对不同用户、不同时间具有不同的字段值,因此对该字段的每一次查询都是需要根据用户id、时间来进行的。可以理解的是,对象列表不限于用户id列表和时间列表,还可以是其他任何作为对象,例如公司名称列表、地址列表等等。

本实施例中,在编写程序代码时,将测试中涉及到的每个字段以及字段对应的查询语句写入代码中,而查询语句中的对象参数可以在执行时从对象列表中获取,也就是说,针对不同的对象,同一字段的测试只需要编写一条查询语句即可。例如以用户作为对象时,字段的查询语句中将用户id作为变量,在执行过程中将不同用户id输入至执行程序中即可完成多个用户记录的同一字段的查询。

在本实施例的一个可选实现方式中,所述步骤s103,即执行所述任务的步骤,包括如下步骤:

执行所述测试数据中所述字段名对应的所述查询语句;

根据所述查询结果确定测试结果。

本实施例中,并发执行的多个任务针对的是同一个预设对象。每个任务针对同一个预设对象执行不同的测试数据。在程序执行时,指定对象列表中的某一对象,并在触发多个任务执行查询语句时,将对应查询语句中的对象id替换为该指定的对象id,并由每个任务并行执行相应的查询语句。

例如,测试数据包括10条,分别针对不同的字段和/或不同的查询语句,而需要对该测试数据进行测试的字段值可以是100个对象id对应的字段值。程序代码中的自动化框架整体采用协程的生产者消费者模式。生产者可以将程序代码中封装的10条测试数据中的字段名以及对应的查询语句存储为某种程序能够识别的数据结构,如字典结构,并读取字典中的测试数据,同时替换查询语句中的对象id等参数后,并将查询语句以及相应对象id一并作为队列的一条记录放到队列里。消费者从队列中取出一条记录进行消费。在消费的过程中,多个任务并发执行多条查询语句。此过程为i/o异步,无需等待返回查询结果,节约了大量等待时间。结果返回后,再调用该字段相应的测试方式,比较查询结果与被测数据,得出测试结果。

在本实施例的一个可选实现方式中,所述测试数据还包括所述字段名对应的被测数据以及测试方式。

该可选的实现方式中,被测数据可以预先写入程序代码中,或者将被测数据的获取方式写入程序代码中。测试方式可以包括查询结果与被测数据的比较方式、以及比较结果对应的测试结果等。例如,比较方式为查询结果和被测数据类型不同时如何比较等,如查询结果为整形,而被测数据位长整形时如何比较。测试结果可以仅仅是正确或错两个结果,也根据需要设置,例如可以包括参与测试的对象列表、每个对象的每个字段的比较结果(true/false)、每个对象比较结果存在错误字段的个数、存在错误记录的字段名以及错误次数、所有字段都对的对象数量与存在错误字段对象数量、执行耗时等等。

在本实施例的一个可选实现方式中,如图2所示,所述步骤s102,针对所述对象列表中预设对象,以协程方式并发产生多个任务的步骤,进一步包括:

在步骤s201中,将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;

在步骤s202中,所述任务从所述队列中读取一条记录,并执行相应操作。

在该可选的实现方式中,查询语句用于查询对应字段的字段值或字段值的某种计算结果。而同一字段下不同对象拥有不同的字段值,因此一个字段对应的一种查询语句可以是通用的,在程序代码中只用一条测试数据即可,而针对不同对象的查询可以在程序代码执行时,通过替换该条测试数据中对象的id来实现,因此程序执行时先将测试数据中查询语句的对象id替换为预设对象后,放入队列中,而每个任务从队列中读取一条记录执行相应的查询语句。也就是说,程序执行时,获取输入的对象id,然后逐个读取多条测试数据,并将对应每条测试数据中查询语句的对象id替换为输入的对象id即预设对象后,放入队列中。不同任务可以从队列中逐个提取记录并执行。

例如,总共有10条测试数据,对每条测试数据都采用100个对象的数据进行测试。首先,程序执行时,从100个对象中获取其中一个预设对象的id,并将10条测试数据中查询语句的对象id逐个替换为预设对象的id后放入队列中,然后并发10个任务,逐个从队列中取出该预设对象对应的10条测试数据进行测试,执行100次就可以实现100个对象数据的测试。

在本实施例的一个可选实现方式中,所述步骤s102,针对所述对象列表中预设对象,以协程方式并发产生多个任务的步骤,进一步还包括:

将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。

该可选的实现方式中,在替换了对象id的查询语句放入队列的同时,将被测数据以及测试方式与查询语句作为一条记录也放入队列中,这样每个任务在执行查询语句并得到查询结果之后,可以基于测试方式将查询结果与被测数据进行比较,并得到测试结果后输出。

在本实施例的一个可选实现方式中,所述步骤s104,根据所述查询结果确定测试结果的步骤,进一步包括:

根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。

在该可选的实现方式中,查询结果是通过查询语句从数据库中得到的正确结果,而被测数据可以是通过其他如软件自动计算等方式得到的,为了验证被测数据的正确性,可以通过将查询结果与被测数据进行比较来完成测试。而查询数据与被测数据可能存在类型等的不同,且测试结果的要求可以根据实际情况而有所不同。因此,可以将测试方式以及被测数据或被测数据的获取方式预先编写在程序代码中,并在执行完查询语句得到查询结果后,基于测试方式得到测试结果。

在本实施例的一个可选实现方式中,在所述预设对象为多个的情况下,所述步骤s102,即针对所述对象列表中预设对象,以协程方式并发产生多个任务的步骤,进一步包括:

对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

在该可选的实现方式中,对于每一条测试数据,可以基于多个不同对象对应的字段值来进行测试。可以预先将测试数据进行分类,不同分类的测试数据使用不同数量和/或不同的对象对应的字段值进行测试。例如,对于准确性要求高的字段类型,可以采用较大量对象对应的字段值进行测试,而对于准确性要求较低的字段类型,可以采用少量对象对应的字段值进行测试,不同字段还可以根据其自身属性有针对性的选择某种类型的对象对应的字段值进行测试等。这样,同一类的测试数据可以作为一组对应相同的对象列表,并以协程方式并发多个任务执行。在测试过程中,针对对象列表中的一个预设对象对应的字段,同时并发启动多个任务测试同一类中多条测试数据,直至对象列表中所有或者部分预设对象对应的字段都测试完毕。对象列表中可以包括所有或者尽可能多的对象id,也可以仅包括一部分对象id;而针对不同分类的测试数据,可以知道对象列表中的某一部分对象作为预设对象进行测试,即在测试时,仅通过查询预设对象对应的字段值来获得查询语句对应的查询结果。通过这种方式,可以针对不同业务场景或资源消耗差异较大的的字段进行分类,然后分类别进行并发自动化测试。

下述为本公开装置实施例,可以用于执行本公开方法实施例。

图3示出根据本公开一实施方式的测试装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图3所示,所述测试装置包括获取模块301、第一执行模块302和任务执行模块303:

获取模块301,被配置为获取多个测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;所述测试数据被封装在程序代码中;

第一执行模块302,被配置为针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;

任务执行模块303,被配置为执行所述任务,所述任务根据所述测试数据确定测试结果。。

在本实施例中,测试的是被测数据的正确性。而被测数据可以是根据数据库中存储的字段值得到的,例如针对数据库的字段查询开发出的软件计算得到;当然可以理解的是,被测数据可以是任何与数据库字段查询相关且需要进行验证的数据。传统方式下在测试软件输出的被测数据的正确性时,通过将人工编写的sql查询语句得到的查询结果与软件自动计算得到的结果进行比较,来确定软件计算结果的正确性,即测试软件的计算效果。

而本实施例中,测试被测数据的正确性时,将通过程序化方式,将测试数据设计的字段名、字段名对应的查询语句以及字段名对应的对象列表等封装成程序代码的形式,并在程序代码执行过程中,从程序代码中获取测试数据以及对象列表,并以协程方式针对对象列表中的同一预设对象并发产生多个任务,每个任务执行一条测试数据,而一条测试数据对应一个字段名、该字段名对应的一条查询语句,也就是说每个任务执行一个查询语句,多个任务由于是并行执行,互相不需要等待查询结果的返回,因此可以提高查询效率。

本实施例中,测试数据可以预先封装在程序代码中。在测试之前,将待测试的字段名、对应的查询语句的逻辑写入程序代码,同时还可以每个字段对应的测试方法逻辑也写入程序代码,实现测试过程的全自动化,并且采用协程的多任务并发方式,实现多个查询语句的异步执行模式,能够节约查询时间,节省测试成本。

协程与线程不同,协程可以认为是用户空间线程,操作系统对其一无所知,需要开发人员在线程中涉及好调度,用来执行协作式多任务非常合适。操作系统调用到协程所承载的线程后,线程内部再完成对协程的二级调度。因此,本公开实施例通过编写程序代码,使得测试数据对应的查询语句以协程方式并发执行。

在本实施例中,字段名对应的查询语句可以是字段对应的字段值,也可以是一段时间内字段对应的多个字段值按照某种计算逻辑得到的值。例如,字段为用户每天的消费金额,而对应的查询语句可以是用户一年内的平均消费金额。在一实施例中,对象列表可以包括用户id列表和时间列表,每个查询语句针对的是一个字段,但是该字段针对不同用户、不同时间具有不同的字段值,因此对该字段的每一次查询都是需要根据用户id、时间来进行的。可以理解的是,对象列表不限于用户id列表和时间列表,还可以是其他任何作为对象,例如公司名称列表、地址列表等等。

本实施例中,在编写程序代码时,将测试中涉及到的每个字段以及字段对应的查询语句写入代码中,而查询语句中的对象参数可以在执行时从对象列表中获取,也就是说,针对不同的对象,同一字段的测试只需要编写一条查询语句即可。例如以用户作为对象时,字段的查询语句中将用户id作为变量,在执行过程中将不同用户id输入至执行程序中即可完成多个用户记录的同一字段的查询。

在本实施例的一个可选实现方式中,所述任务执行模块301,包括:

第一执行子模块,被配置为执行所述测试数据中所述字段名对应的所述查询语句;

第一测试子模块,被配置为根据所述查询结果确定测试结果。

本实施例中,并发执行的多个任务针对的是同一个预设对象。每个任务针对同一个预设对象执行不同的测试数据。在程序执行时,指定对象列表中的某一对象,并在触发多个任务执行查询语句时,将对应查询语句中的对象id替换为该指定的对象id,并由每个任务并行执行相应的查询语句。

例如,测试数据包括10条,分别针对不同的字段和/或不同的查询语句,而需要对该测试数据进行测试的字段值可以是100个对象id对应的字段值。程序代码中的自动化框架整体采用协程的生产者消费者模式。生产者可以将程序代码中封装的10条测试数据中的字段名以及对应的查询语句存储为某种程序能够识别的数据结构,如字典结构,并读取字典中的测试数据,同时替换查询语句中的对象id等参数后,并将查询语句以及相应对象id一并作为队列的一条记录放到队列里。消费者从队列中取出一条记录进行消费。在消费的过程中,多个任务并发执行多条查询语句。此过程为i/o异步,无需等待返回查询结果,节约了大量等待时间。结果返回后,再调用该字段相应的测试方式,比较查询结果与被测数据,得出测试结果。

在本实施例的一个可选实现方式中,所述测试数据还包括所述字段名对应的被测数据以及测试方式。

该可选的实现方式中,被测数据可以预先写入程序代码中,或者将被测数据的获取方式写入程序代码中。测试方式可以包括查询结果与被测数据的比较方式、以及比较结果对应的测试结果等。例如,比较方式为查询结果和被测数据类型不同时如何比较等,如查询结果为整形,而被测数据位长整形时如何比较。测试结果可以仅仅是正确或错两个结果,也根据需要设置,例如可以包括参与测试的对象列表、每个对象的每个字段的比较结果(true/false)、每个对象比较结果存在错误字段的个数、存在错误记录的字段名以及错误次数、所有字段都对的对象数量与存在错误字段对象数量、执行耗时等等。

在本实施例的一个可选实现方式中,如图4所示,所述第一执行模块302,包括:

第一队列子模块401,被配置为将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;

第二执行子模块402,被配置为任务从所述队列中读取一条记录,并执行相应操作。

在该可选的实现方式中,查询语句用于查询对应字段的字段值或字段值的某种计算结果。而同一字段下不同对象拥有不同的字段值,因此一个字段对应的一种查询语句可以是通用的,在程序代码中只用一条测试数据即可,而针对不同对象的查询可以在程序代码执行时,通过替换该条测试数据中对象的id来实现,因此程序执行时先将测试数据中查询语句的对象id替换为预设对象后,放入队列中,而每个任务从队列中读取一条记录执行相应的查询语句。也就是说,程序执行时,获取输入的对象id,然后逐个读取多条测试数据,并将对应每条测试数据中查询语句的对象id替换为输入的对象id即预设对象后,放入队列中。不同任务可以从队列中逐个提取记录并执行。

例如,总共有10条测试数据,对每条测试数据都采用100个对象的数据进行测试。首先,程序执行时,从100个对象中获取其中一个预设对象的id,并将10条测试数据中查询语句的对象id逐个替换为预设对象的id后放入队列中,然后并发10个任务,逐个从队列中取出该预设对象对应的10条测试数据进行测试,执行100次就可以实现100个对象数据的测试。

在本实施例的一个可选实现方式中,所述第一执行模块302,还包括:

第二队列子模块,被配置为将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。

该可选的实现方式中,在替换了对象id的查询语句放入队列的同时,将被测数据以及测试方式与查询语句作为一条记录也放入队列中,这样每个任务在执行查询语句并得到查询结果之后,可以基于测试方式将查询结果与被测数据进行比较,并得到测试结果后输出。

在本实施例的一个可选实现方式中,所述第一测试子模块,包括:

第二测试子模块,被配置为根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。

在该可选的实现方式中,查询结果是通过查询语句从数据库中得到的正确结果,而被测数据可以是通过其他如软件自动计算等方式得到的,为了验证被测数据的正确性,可以通过将查询结果与被测数据进行比较来完成测试。而查询数据与被测数据可能存在类型等的不同,且测试结果的要求可以根据实际情况而有所不同。因此,可以将测试方式以及被测数据或被测数据的获取方式预先编写在程序代码中,并在执行完查询语句得到查询结果后,基于测试方式得到测试结果。

在本实施例的一个可选实现方式中,在所述预设对象为多个的情况下,所述第一执行模块302,包括:

第三执行子模块,被配置为对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

在该可选的实现方式中,对于每一条测试数据,可以基于多个不同对象对应的字段值来进行测试。可以预先将测试数据进行分类,不同分类的测试数据使用不同数量和/或不同的对象对应的字段值进行测试。例如,对于准确性要求高的字段类型,可以采用较大量对象对应的字段值进行测试,而对于准确性要求较低的字段类型,可以采用少量对象对应的字段值进行测试,不同字段还可以根据其自身属性有针对性的选择某种类型的对象对应的字段值进行测试等。这样,同一类的测试数据可以作为一组对应相同的对象列表,并以协程方式并发多个任务执行。在测试过程中,针对对象列表中的一个预设对象对应的字段,同时并发启动多个任务测试同一类中多条测试数据,直至对象列表中所有或者部分预设对象对应的字段都测试完毕。对象列表中可以包括所有或者尽可能多的对象id,也可以仅包括一部分对象id;而针对不同分类的测试数据,可以知道对象列表中的某一部分对象作为预设对象进行测试,即在测试时,仅通过查询预设对象对应的字段值来获得查询语句对应的查询结果。通过这种方式,可以针对不同业务场景或资源消耗差异较大的的字段进行分类,然后分类别进行并发自动化测试。

图5是适于用来实现根据本公开实施方式的测试方法的电子设备的结构示意图。

如图5所示,电子设备500包括中央处理单元(cpu)501,其可以根据存储在只读存储器(rom)502中的程序或者从存储部分508加载到随机访问存储器(ram)503中的程序而执行上述图1所示的实施方式中的各种处理。在ram503中,还存储有电子设备500操作所需的各种程序和数据。cpu501、rom502以及ram503通过总线504彼此相连。输入/输出(i/o)接口505也连接至总线504。

以下部件连接至i/o接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至i/o接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。

特别地,根据本公开的实施方式,上文参考图1描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行图1的测试方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。

附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。

作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

a1、一种测试方法,包括:获取多条测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;所述测试数据被封装在程序代码中;针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;执行所述任务,所述任务根据所述测试数据确定测试结果。a2、根据a1所述的测试方法,还包括:执行所述任务,包括:执行所述测试数据中所述字段名对应的所述查询语句;根据所述查询结果确定测试结果。a3、如a1或a2所述的测试方法,所述测试数据还包括所述字段名对应的被测数据以及测试方式。a4、如a1或a2所述的测试方法,针对所述对象列表中预设对象,以协程方式并发产生多个任务,包括:将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;所述任务从所述队列中读取一条记录,并执行相应操作。a5、如a4所述的测试方法,针对所述对象列表中预设对象,以协程方式并发产生多个任务,还包括:将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。a6、如a3所述的测试方法,根据所述查询结果确定测试结果,包括:根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。a7、如a1或a2所述的测试方法,在所述预设对象为多个的情况下,针对所述对象列表中预设对象,以协程方式并发产生多个任务,包括:对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

b8、一种测试装置,包括:获取模块,被配置为获取多条测试数据以及对象列表;所述测试数据包括字段名、所述字段名对应的查询语句;第一执行模块,被配置为针对所述对象列表中预设对象,以协程方式并发产生多个任务,每个任务测试多条所述测试数据中的其中一条;任务执行模块,被配置为执行所述任务,所述任务根据所述测试数据确定测试结果。b9、根据b8所述的测试装置,所述任务执行模块包括:第一执行子模块,被配置为执行所述测试数据中所述字段名对应的所述查询语句;第一测试子模块,被配置为根据所述查询结果确定测试结果。b10、如b8或b9所述的测试装置,所述测试数据还包括所述字段名对应的被测数据以及测试方式。b11、如b8或b9所述的测试装置,所述第一执行模块,包括:第一队列子模块,被配置为将所述测试数据中的所述查询语句针对的对象替换为所述预设对象后,放入队列中;第二执行子模块,被配置为所述任务从所述队列中读取一条记录,并执行相应操作。b12、如b11所述的测试装置,所述第一执行模块,还包括:第二队列子模块,被配置为将所述测试数据中的所述字段名对应的被测数据以及测试方式放入对列中。b13、如b10所述的测试方法,所述第一测试子模块,包括:第二测试子模块,被配置为根据所述测试方式将所述查询结果与所述被测数据进行比较,获得所述测试结果。b14、如b8或b9所述的测试装置,在所述预设对象为多个的情况下,所述第一执行模块,包括:第三执行子模块,被配置为对于一个所述预设对象,依次以协程方式并发产生多个所述任务。

c15、一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现a1-a7任一项所述的方法步骤。

d16、一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现a1-a7任一项所述的方法步骤。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1