测试用例的执行方法、装置、终端及计算机可读存储介质与流程

文档序号:17773323发布日期:2019-05-28 19:42阅读:177来源:国知局
测试用例的执行方法、装置、终端及计算机可读存储介质与流程

本发明涉及测试技术领域,特别是涉及一种测试用例的执行方法、装置、终端及计算机可读存储介质。



背景技术:

测试是指对产品质量进行检查和评价的过程,通过测试能够检查出产品中的质量问题,对产品做出客观准确的评价,因此,测试在整个产品的生产过程中至关重要。而测试用例是测试中常用的一种描述文档,包括测试目标、测试环境、输入数据、测试步骤及预期结果等,通过执行测试用例可以实现产品测试。

相关技术中,为了对一款产品按照某个需求进行测试,可以为该产品设置一个或多个测试用例,并执行每个测试用例,使该产品按照多个测试用例中的每个测试用例运行,从而得到多个测试结果。那么当测试需求改变时,或者待测试的产品改变时,则需要重新编写与之前不同的测试用例。

发明人在实现本发明的过程中发现,相关技术中不同测试用例之间缺少关联,存在着测试用例难以大规模复用的问题。



技术实现要素:

本发明提供了一种测试用例的执行方法、装置、终端及计算机可读存储介质,以解决相关技术所存在的测试用例难以大规模复用的问题。

为了解决上述问题,根据本发明的一个方面,本发明公开了一种测试用例的执行方法,包括:

预先存储多个功能测试用例;

根据测试产品的测试需求,从预先存储的所述多个功能测试用例中,获取待执行的功能测试用例;

获取所述待执行的功能测试用例对应的预设执行顺序;

按照所述预设执行顺序,运行所述待执行的功能测试用例,得到测试结果。

根据本发明的另一方面,本发明还公开了一种测试用例的执行装置,包括:

存储模块,用于预先存储多个功能测试用例;

第一获取模块,用于根据测试产品的测试需求,从预先存储的所述多个功能测试用例中,获取待执行的功能测试用例;

第二获取模块,用于获取所述待执行的功能测试用例对应的预设执行顺序;

运行模块,用于按照所述预设执行顺序,运行所述待执行的功能测试用例,得到测试结果。

根据本发明的又一方面,本发明还公开了一种终端,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的测试用例的执行程序,所述测试用例的执行程序被所述处理器执行时实现如上述任意一项所述的测试用例的执行方法的步骤。

根据本发明的再一方面,本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有测试用例的执行程序,所述测试用例的执行程序被处理器执行时实现如上述任意一项所述的测试用例的执行方法中的步骤。

与现有技术相比,本发明包括以下优点:

本发明实施例通过预先开发多个功能测试用例并存储,那么当需要对产品进行测试时,则可以根据测试需求,从预先存储的多个功能测试用例中,灵活的选择与该测试需求匹配的待执行的功能测试用例,并通过获取该待执行的功能测试用例对应的预设执行顺序,最后,按照该预设执行顺序,运行该待执行的功能测试用例,得到测试结果。本发明实施例能够根据测试需求的不同,而灵活的选择一个或多个功能测试用例进行灵活组合和复用,实现了对测试用例的大规模复用,并降低了测试用例的维护成本。

附图说明

图1是本发明一个实施例的测试用例的结构示意图;

图2是本发明的一种测试用例的执行方法实施例的步骤流程图;

图3是本发明的另一种测试用例的执行方法实施例的步骤流程图;

图4是本发明的再一种测试用例的执行方法实施例的步骤流程图;

图5是本发明的又一种测试用例的执行方法实施例的步骤流程图;

图6是本发明的一种测试用例的执行装置实施例的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

为了解决相关技术所存在的测试用例难以大规模复用的问题,本发明预先在开发测试用例时,将测试用例按照级别大小分为三类,级别从小到大依次为原子测试用例、功能测试用例和业务测试用例。

其中,原子测试用例,它的级别最小,是小到无法再进行拆分的测试步骤,因此,可以将一个原子操作函数开发为一个原子测试用例。例如点击操作函数可以开发为一个点击按钮的原子测试用例,再如向输入框输入文本的操作函数,可以开发为向输入框输入文字的原子测试用例。

功能测试用例,由两个或两个以上的原子测试用例组合而成,形成一个单一功能的测试用例,功能测试用例通常是针对单个页面内部的测试,例如,向一个页面中的登录框输入用户名和密码之后,点击登录按钮,验证登录是否成功的登录功能测试用例。

业务测试用例,它的级别最大,其由两个或两个以上的功能测试用例组合而成,形成一个具有完整业务流程的测试用例。业务测试用例通常是几个页面间的联合测试。例如,登录注册业务的测试用例、购物流程的测试用例等。

其中,功能测试用例与业务测试用例可以单独执行互不干扰,也可以联合执行,从而构建复杂的测试逻辑。那么本发明实施例中,在对测试用例进行开发时,通过对测试用例进行不同粒度地拆分细化,从而可以使测试用例的复用性和可维护性得到极大的提高。

例如,原子测试用例可以单独用于对产品进行某一个操作的测试,还可以将多种原子测试用例组合起来用于对产品的某个功能进行测试;类似的,功能测试用例可以单独用于对产品进行某一个功能的测试,还可以和其他功能测试用例组合起来用于对产品的某个业务进行测试,使得开发的原子测试用例、功能测试用例得到了较高的复用。而且,以开发的原子测试用例为例来说,该原子测试用例不仅可以用于该产品的某一个操作的测试,还可以用于对其他产品的该同一个操作的测试,因此,本发明实施例开发的测试用例也可以在不同产品上得到复用。

本发明实施例可以预先存储多个功能测试用例,不同功能测试用例的组合可以构成业务测试用例,而每一个功能测试用例都可以包括多个原子测试用例。

图1示意性的示出了本发明实施例开发的测试用例的结构示意图。

如图1所示,原子测试1(即原子测试用例1)与原子测试2可以组合起来构成功能测试1(即功能测试用例1);类似的,功能测试1和功能测试2还可以组合起来构成业务测试1(即业务测试用例1)。

所以,借助于本发明实施例开发的不同粒度的测试用例,不仅可以降低测试用例的维护成本,还可以灵活的开发出各种功能测试用例,以及各种业务测试用例,提升了测试用例的开发灵活性,并能够使得开发得到的测试用例得到很大程度的复用。

下面参照图2,来对上述实施例开发的测试用例的执行方法作详细介绍。如图2所示,其示出了本发明的一种测试用例的执行方法实施例的步骤流程图,具体可以包括如下步骤:

步骤100,预先存储多个功能测试用例;

其中,不同功能测试用例用于测试不同的功能,本发明实施例可以预先针对不同的页面功能创建不同的页面类,在每个页面类中定义该页面类对应的页面类对象可以执行的操作,即运行函数——run()函数。

因此,一个功能测试用例可以包括一个页面类。

步骤101,根据测试产品的测试需求,从预先存储的所述多个功能测试用例中,获取待执行的功能测试用例;

其中,测试产品可以是待测试的系统、软件、应用程序、网页等。

当需要对测试产品进行测试时,可以根据测试需求为该测试产品确定需要执行哪些功能测试用例。

其中,测试需求可以是接收到的由用户触发的外部指令,该外部指令可以携带测试需求id以及测试需求类型,其中,测试需求类型即为业务测试或者功能测试。

而随着测试需求的不同,这里获取的测试用例也是不同的。

其中,本发明实施例预先可以配置测试需求id以及测试需求类型,与预先存储的多个功能测试用例之间的映射关系。

例如,业务测试需求1对应于功能测试用例1和功能测试用例2;

业务测试需求2对应于功能测试用例1和功能测试用例3;

功能测试需求1对应于功能测试用例2。

那么,当所述测试需求包括业务测试需求时,也就是说,本次的测试需求包括对测试产品的一个业务进行测试,因此,需要使用业务测试用例进行测试,而业务测试用例由多个功能测试用例构成。所以,在执行步骤101时,则可以从预先存储的所述多个功能测试用例中,获取与所述业务测试需求匹配的多个功能测试用例。

例如,业务测试需求为上述业务测试需求1,则这里需要获取功能测试用例1和功能测试用例2。

其中,如上文所述,对于任意一个所述功能测试用例,其均由多个原子测试用例构成,而功能测试用例则用于验证所述测试产品的单一功能。

那么当所述测试需求包括功能测试需求时,也就是说,本次的测试需求包括对测试产品的一个功能进行测试,则在执行步骤101时,可以从预先存储的所述多个功能测试用例中,获取与所述功能测试需求匹配的一个功能测试用例。

例如,功能测试需求为上述功能测试需求1,则这里需要获取功能测试用例2。

当然,该测试需求也可以既包括业务测试需求,也包括功能测试需求,从而执行复杂的测试逻辑。

步骤102,获取所述待执行的功能测试用例对应的预设执行顺序;

其中,当测试需求包括业务测试需求时,则这里获取的预设执行顺序指代的是与该业务测试需求对应的待执行的多个功能测试用例之间的第一预设执行顺序。

在本发明实施例中,预先还可以配置业务测试需求与对应该业务测试需求的多个功能测试用例之间的第一预设执行顺序。

例如可以对业务测试需求1配置预设执行顺序1,即依次执行功能测试用例1和功能测试用例2;

对业务测试需求2配置预设执行顺序2,即依次功能测试用例1和功能测试用例3。

而当测试需求包括功能测试需求时,由于该功能测试需求只对应于一个功能测试用例,但是一个功能测试用例由多个原子测试用例构成,因此,本步骤中获取的该待执行的功能测试用例对应的预设执行顺序,可以为该功能测试用例所包括的多个原子测试用例之间的第二预设执行顺序。

需要说明的是,当测试需求既包括功能测试需求,又包括业务测试需求时,第一预设执行顺序与第二预设执行顺序之间相互独立,对应不同测试需求的两组测试用例在执行时互不干扰。

步骤103,按照所述预设执行顺序,运行所述待执行的功能测试用例,得到测试结果。

具体而言,当测试需求为业务测试需求时,则这里按照所述第一预设执行顺序依次执行与该业务测试需求对应的多个功能测试用例,得到业务测试结果;当测试需求为功能测试需求时,则这里按照第二预设执行顺序执行多个原子测试用例,得到功能测试结果,其中,该功能测试需求对应的功能测试用例包括该多个原子测试用例;当测试需求既包括业务需求测试又包括功能测试需求时,则按照所述第一预设执行顺序依次执行上述多个功能测试用例,得到业务测试结果,以及按照第二预设执行顺序执行上述多个原子测试用例,得到功能测试结果,达到功能测试与业务测试联合测试的目的。

其中,一个测试需求对应的待执行的功能测试用例的运行结果,即为该测试产品的对应于该测试需求的测试结果。

根据该测试结果可以了解该测试产品的质量、性能,从而可以对该测试产品进行检查和评价。

本发明实施例通过预先开发多个功能测试用例并存储,那么当需要对产品进行测试时,则可以根据测试需求,从预先存储的多个功能测试用例中,灵活的选择与该测试需求匹配的待执行的功能测试用例,并通过获取该待执行的功能测试用例对应的预设执行顺序,最后,按照该预设执行顺序,运行该待执行的功能测试用例,得到测试结果。本发明实施例能够根据测试需求的不同,而灵活的选择一个或多个功能测试用例进行灵活组合和复用,实现了对测试用例的大规模复用,并降低了测试用例的维护成本。

此外,本发明实施例利用预先开发的粒度从小到大的原子测试用例、功能测试用例,以及由功能测试用例构成的业务测试用例,来对测试产品进行测试,根据测试需求的不同,灵活的获取与该测试需求相匹配的多个测试用例,以及多个测试用例之间的预设执行顺序,从而达到对测试产品进行符合上述测试需求的测试目的;其中,当测试需求包括业务测试需求时,则可以获取与该需求匹配的多个功能测试用例进行测试;当测试需求包括功能测试需求时,则可以获取与需求匹配的多个原子测试用例进行测试,由于不同粒度的测试用例之间存在关联,从而能够根据测试需求的不同灵活的对不同粒度的测试用例进行灵活组合和复用,能够满足测试用例的大规模复用需求,并降低了测试用例的维护成本。

可选地,在一个实施例中,当所述测试需求包括业务测试需求时,如图3所示,在执行步骤101时,则可以通过s201~s203来实现,而在执行步骤102时,则可以通过s204来实现,而在执行步骤103时,则可以通过s205来实现:

s201,根据测试产品的所述业务测试需求,从预先存储的多个页面类中,识别与所述业务测试需求匹配的多个第一页面类;

其中,本发明实施例在开发功能测试用例时,由于一个功能通常针对一个页面的操作,因此,本发明实施例预先开发了多个页面类(class),每个页面类都有类名称,页面class与测试功能一一对应。

对于预先配置的测试需求与功能测试用例之间的映射关系,在这里可以为测试需求与页面类的类名称之间的映射关系。

例如,业务测试需求1对应于name1class和name2class;

业务测试需求2对应于name1class和name3class;

功能测试需求1对应于name2class。

那么,本步骤中就可以从预先存储的多个页面类中,利用上述映射关系,来识别到与业务测试需求匹配的多个第一页面类;

s202,对所述多个第一页面类分别创建多个第一页面类对象;

其中,在调用页面类中的各个函数时,需要使用该页面类的类对象来调用,因此,本步骤需要对每个第一页面类都创建各自的第一页面类对象,从而得到多个第一页面类对象。

例如该业务测试需求为登录账户,并搜索电影,然后,对搜索得到的电影列表中的一个电影进行播放。

那么该业务测试需求对应于登录页面类、搜索页面类、播放页面类,那么分别创建的页面类对象依次为featurea、featureb、featurec。

s203,获取所述多个第一页面类对象的run()函数;

其中,对于任意一个页面类,在页面类中均定义有该页面类的run()函数,这里可以使用页面类的页面类对象,来调用该页面类中的run()函数,从而达到获取所述多个第一页面类对象的run()函数的目的。

这里获取的run()函数并未运行,可以是一个预加载的过程。

s204,根据所述业务测试需求,获取所述多个第一页面类对象的run()函数之间的第一预设执行顺序;

其中,不同第一页面类对象的run()函数用于验证所述测试产品的不同功能,而在进行一个业务测试时,需要对不同的功能进行联合测试,所以,这里还需要获取到上述多个第一页面类对象的run()函数之间的第一预设执行顺序。

本发明实施例可以预先业务测试需求配置其包括哪些第一页面类,此外,还可以对其配置,这些第一页面类的执行顺序。

继续以上述例子举例:

业务测试需求1对应于name1class和name2class,配置的执行顺序1为,依次执行name1class和name2class;

业务测试需求2对应于name1class和name3class,配置的执行顺序2为,依次执行name1class和name3class。

实际上,各个页面类的执行顺序就是各个页面类的run()函数之间的预设执行顺序。

在一个具体的示例中,由于上述业务测试需求为登录账户,并搜索电影,然后,对搜索得到的电影列表中的一个电影进行播放,因此,对该业务测试需求配置的多个第一页面类的第一预设执行顺序为先执行登录功能用例、再执行搜索功能用例,最后执行播放电影用例。所以可以获取到与该业务测试需求对应的run()函数的预设执行顺序为先执行featurea.run(),再执行featureb.run(),最后执行featurec.run()。

s205,按照所述第一预设执行顺序依次调用所述多个第一页面类对象的run()函数,得到测试结果。

继续以上述举例来说明,依次执行featurea.run()、featureb.run()、featurec.run(),从而得到对应于上述业务测试需求的测试结果。

其中,由于任意一个页面类对象的run()函数的内部逻辑则包括多个原子测试用例,因此,关于featurea.run()、featureb.run()、featurec.run()的各个run()函数的内部执行逻辑,在图4以及图5实施例来说明,这里不再赘述。

其中,下述代码中的featurea、featureb、featurec分别表示这三个页面类对象的run()函数的执行逻辑,具体解释可以参照下述图4实施例的s304~s306和图5实施例。

featurea=driver.page("登录页面").input("id","用户名","username").input("id","密码","12345").click("id","登录");

featureb=driver.page("搜索页面").input("id","搜索框","电影").click("id","搜索").click("type","列表","0");

featurec=featureb.click(“id”,“播放”);

在本发明实施例中,当测试需求包括业务测试需求时,本发明实施例的方法则可以根据业务测试需求来获取与之匹配的多个第一页面类,并对各个第一页面类创建第一页面类对象,并调用每个第一页面类对象的run()函数以及不同第一页面类对象的run()函数之间的第一预设执行顺序,在这里每个第一页面类对象的run()函数用于验证该测试产品在该业务测试需求中的每个功能,而页面类对象以及该页面类对象的run()函数即相当于一个功能测试用例,最后,按照预设执行顺序来依次执行各个页面类对象的run()函数,从而可以实现对测试产品的上述业务测试需求的业务测试,达到执行一个业务测试用例的目的,在业务测试用例执行过程中,对功能测试用例进行了复用,降低了业务测试用例的开发成本并减少了业务测试用例的开发时间。

可选地,当所述测试需求包括功能测试需求时,如图4所示,在执行步骤101时,则可以通过s301~s304来实现,而在执行步骤102时,则可以通过s305来实现,而在执行步骤103时,则可以通过s306来实现:

其中,s304和s305都是通过调用第二页面类对象的run()函数而实现的。

s301,根据测试产品的所述功能测试需求,从预先存储的多个页面类中,识别与所述功能测试需求匹配的第二页面类;

如上文所述,本发明实施例可以预先配置测试需求与功能测试用例之间的映射关系,在这里可以为测试需求与页面类的类名称之间的映射关系,例如功能测试需求1对应于name2class。那么,本步骤中就可以从预先存储的多个页面类中,利用上述映射关系,来识别到与功能测试需求1匹配的类名称为name2的页面类;

例如该功能测试需求为登录功能测试需求,那么与该功能测试需求匹配的页面类为登录页面类(这里的第二页面类)。

s302,对所述第二页面类创建第二页面类对象;

其中,这里可以对该登录页面类创建登录页面类对象(这里的第二页面类对象),例如featurea。

s303,获取所述第二页面类对象的run()函数;

与上述实施例的s203的原理类似,对于任意一个页面类,在页面类中均定义有该页面类的run()函数,这里可以使用页面类的页面类对象,来调用该页面类中的run()函数,从而达到获取所述第二页面类对象的run()函数的目的。

这里获取的run()函数并未运行,可以是一个预加载的过程。

s304,调用所述第二页面类对象的run()函数,以获取所述第二页面类对象的多个原子操作函数、每个原子操作函数的测试参数;

s305,调用所述第二页面类对象的run()函数,以获取所述多个原子操作函数之间的第二预设执行顺序;

由于s304和s305得到的结果,都是由调用第二页面类对象的run()函数而得到的。因此,这里对s304和s305进行统一描述。

在预先构建登录页面类时,例如该类的名称为page,该登录页面类中不仅定义了run()函数的执行逻辑,还定义了登录功能测试用例需要使用的多个原子操作函数的执行逻辑,例如这里的原子操作函数可以包括driver()函数page()函数、input()函数和click()函数。

其中,page()函数的作用是创建登录页面类对象,同时返回结果也是登录页面类型。

此外,在预先构建登录页面类时,登录页面类中的run()函数的执行逻辑可以包括第一执行代码,用于获取登录页面类中定义的各个原子操作函数;第二执行代码,用于获取各个原子操作函数之间的第二预设执行顺序;第三执行代码,用于获取上述每个原子操作函数的测试参数,当然并非每个原子操作函数都具有测试参数,例如driver()函数不具有测试参数。

其中,一个原子测试用例可以包括这里的一个原子操作函数以及所述原子操作函数的测试参数。

那么通过执行featurea.run()时,就可以执行run()函数中的上述三组执行代码,从而达到获取featurea的多个原子操作函数的执行逻辑代码、所述多个原子操作函数之间的第二预设执行顺序、每个原子操作函数的测试参数的目的。

在本发明实施例在具体实现时,可以使用测试工具进行上述执行方法,因此,需要通过测试工具的驱动在测试产品上运行上述任意一个测试用例,所以,在预先构建登录页面类时,该登录页面类中不仅定义有该驱动的driver()函数。driver()函数的作用是使测试用例开始运行,执行测试脚本。

另外,需要说明的是,由于在执行登录功能的测试时,同一个原子操作函数可能被执行多次,因此,在上述第二预设执行顺序中,同一个原子操作函数可以在不同执行位置重复出现。

另外,需要说明的是,登录页面类中的每个函数(包括run()函数、driver()函数、page()函数以及input()函数和click()函数)在执行之后返回的结果类型均为登录页面类的类型,从而使得返回的结果可以继续调用上述登录页面类中定义的每个函数。

s306,根据每个原子操作函数的所述测试参数,按照所述第二预设执行顺序依次调用所述第二页面类对象的多个原子操作函数,得到测试结果。

在执行功能测试用例时,本发明实施例采用链式编码协议来执行功能测试用例的代码,链式编码协议为:

[驱动].[页面](页面名称).[操控](元素参数).[操控](元素参数).[操控](元素参数)…

在上述链式编码协议中括号[]内包含的是某种原子操作函数,小括号()内包含的是该原子操作函数所需的测试参数。

具体释义如下:

[驱动]指的是测试底层驱动,其是功能测试用例的执行入口。

[页面]指的是待测页面,需要传递页面名称来定位具体的页面。

[操控]指的是对指定的元素执行某种测试指令(即执行某种原子操作函数),包括但不限于点击、输入、滑动测试指令等,需要传递具体参数(该参数可以包括元素标识,输入的测试文本等信息)。

在上述链式编码协议中各指令之间通过点“.”的形式来链接在一起,因此,称之为链式编码,可以无限扩展。通过链式编码,可以保证测试代码的复用性,同时语义表达更加简洁,便于测试用例的开发和执行。

这里以登录页面类对应的登录功能测试用例为例,来对s304作进一步阐述。

示例代码如下:

执行featurea.run(),从而可以根据run()函数获取的每个原子操作函数的所述测试参数,按照获取的所述第二预设执行顺序依次执行所述featurea的多个原子操作函数,得到测试结果;

其中,这里的featurea调用多个原子操作函数后的代码执行逻辑为:

driver.page("登录页面").input("id","用户名","username").input("id","密码","12345").click("id","登录");

其中,上述代码中各个函数的括号内的数据均为各个函数的参数。

上述代码表示:利用驱动调用并执行登录页面类的page()函数,从而对页面名称为“登录页面”的页面进行如下操作,具体操作为首先在id为“用户名”的输入框中输入“username”,然后,在id为“密码”的输入框中输入“12345”,最后,点击该页面中id为“登录”的按钮,从而完成对页面名称为“登录页面”的页面的登录功能的测试,得到测试结果。

其中,需要说明的是,在图3的业务测试用例实施例中,在执行s205来任意一个页面类对象的run()函数进行执行时,都可以参照本实施例的s304~s306的具体实现来完成,从而得到每个页面类对象对应的功能测试用例的测试结果。

在本发明实施例中,当测试需求包括功能测试需求时,本发明实施例的方法则可以根据功能测试需求来获取与之匹配的一个第二页面类,并对第二页面类创建第二页面类对象,并通过执行第二页面类对象的run()函数来获取第二页面类对象的多个原子操作函数、多个原子操作函数之间的第二预设执行顺序、每个原子操作函数的测试参数,而一个原子测试用例可以包括一个原子操作函数以及所述原子操作函数的测试参数,最后,根据每个原子测试用例的测试参数,并按照各个原子测试用例的第二预设执行顺来依次执行该第二页面类对象的多个原子测试用例中的多个原子操作函数,从而得到该功能测试的测试结果。在功能测试用例执行过程中,对原子测试用例进行了复用,降低了功能测试用例的开发成本并减少了功能测试用例的开发时间和维护成本。

那么便于读者对图3实施例的业务测试用例的执行方法进行理解,下述代码示出了对应于上述业务测试需求(登录账户,并搜索电影,然后,对搜索得到的电影列表中的一个电影进行播放),对每个功能测试用例执行s205时的执行结果代码:

featurea.run();

featureb.run();

featurec.run();

featurea=driver.page("登录页面").input("id","用户名","username").input("id","密码","12345").click("id","登录");

featureb=driver.page("搜索页面").input("id","搜索框","电影").click("id","搜索").click("type","列表","0");

featurec=featureb.click(“id”,“播放”);

上述代码的释义为:依次执行featurea.run();featureb.run();featurec.run();而在执行featurea.run()时,则可以参照featurea的“=”右侧的多个原子操作函数的执行逻辑代码来依次执行各个原子操作函数,具体而言:

利用驱动调用并执行登录页面类的page()函数,从而对页面名称为“登录页面”的页面进行如下操作,具体操作为首先在id为“用户名”的输入框中输入“username”,然后,在id为“密码”的输入框中输入“12345”,最后,点击该页面中id为“登录”的按钮,从而完成对页面名称为“登录页面”的页面的登录功能的测试。这里不提示测试结果,因为这里不是功能测试,而是业务测试。

而在执行featureb.run()时,则可以参照上述featureb的“=”右侧的多个原子操作函数的执行逻辑代码来依次执行各个原子操作函数,具体而言:

利用驱动调用并执行搜索页面类的page()函数,从而对页面名称为“搜索页面”的页面进行如下操作,具体操作为首先在id为“搜索框”的输入框中输入“电影”,然后,点击id为“搜索”的按钮,从而完成对页面名称为“搜索页面”中的电影搜索,得到电影搜索结果列表,接着,对“type”为“列表”的第0行选项进行点击操作,即对上述电影搜索结果列表中的人眼看到的第一条搜索结果进行点击操作,从而打开搜索结果列表中的第一个电影记录的电影介绍页面。

而在执行featurec.run()时,则可以参照上述featureb的“=”右侧的多个原子操作函数的执行逻辑代码来依次执行各个原子操作函数,具体而言:

这里featurec比较特殊,其引用了featureb对象,从而可以省略对driver.page("搜索页面").input("id","搜索框","电影").click("id","搜索").click("type","列表","0")的引用,而直接对上述电影介绍页面中的“id”为“播放”的按钮进行点击,从而测试电影介绍页面的电影播放功能。

在依次执行完featurea.run()、featureb.run()、featurec.run()后,就可以得到该业务需求测试的测试结果。

另外,需要说明的是,上述各个原子操作函数的执行代码逻辑中,输入的测试文本是固定的文本,例如密码文本为“12345”,而为了确保各个功能和/或业务的正确使用,在实际测试过程中,可以将输入的测试文本参数的数据类型改为宏等,而在宏中配置各种类型的测试文本,从而提升对产品的测试完整性。

例如featurea=driver.page("登录页面").input("id","用户名","username").input("id","密码",kpasswordtext).click("id","登录")。

#definekpasswordtext"12345"。

即,在宏结构中,可以将所有输入的文本使用常量定义出来。如这里所示的常量kpasswordtext定义了输入文本“12345”。

可选地,在执行s303和s305时,如图5所示,可以通过以下步骤来实现:

s401,调用所述第二页面类对象的run()函数,以读取所述第二页面类对象的预设数组,其中,所述预设数组预先存储有所述多个原子操作函数之间的第二预设执行顺序,以及存储有每个原子操作函数与测试参数的关联关系;

其中,在预先构建各个页面类时,还可以在页面类中定义一个预设数组,例如steps数组,在该steps数组中可以存储有该页面类中的各个原子操作函数之间的第二预设执行顺序,以上述登录页面类为例,例如steps[0]=driver,steps[1]=page,steps[2]=input,steps[3]=input,steps[4]=click。此外,该steps数组中还可以存储有该页面类中的每个原子操作函数与各自的测试参数的关联关系,继续以上述登录页面类为例进行说明,例如page()函数与“登录页面”关联,input()函数与“id、用户名、username”关联,input()函数还存在另一个关联关系,其还与“id、密码、12345”关联,click()函数与“id、登录”关联。

由于各个原子操作函数的参数数量不一,因此,这里的steps数组的维度并不限于一维数组,可以是多维数组。

s402,根据所述预设数组,获取所述多个原子操作函数之间的第二预设执行顺序;

其中,可以从该steps数组中读取该页面类中的多个原子操作函数之间的预设执行顺序。

s403,根据所述预设数组中的所述关联关系,获取所述多个原子操作函数中每个原子操作函数的测试参数。

其中,还可以从该steps数组的上述关联关系中,读取与该页面类中的每个原子操作函数相关联的测试参数,这里,一个原子操作函数的测试参数可以是零个、一个、一个以上,本发明对此并不限制。

这样,本发明实施例通过将功能测试用例中多个原子操作函数之间的第二预设执行顺序,以及每个原子操作函数的关联参数均单独存储到一个数组中,从而可以在原子测试用例粒度上,也实现对数据和函数之间的解耦,那么当需要对某个原子测试用例或某个功能测试用例进行修改时,则可以避免对测试用例重新编码,只需局部调整即可。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

与上述本发明实施例所提供的方法相对应,参照图6,示出了本发明一种测试用例的执行装置实施例的结构框图,具体可以包括如下模块:

存储模块61,用于预先存储多个功能测试用例;

第一获取模块62,用于根据测试产品的测试需求,从预先存储的所述多个功能测试用例中,获取待执行的功能测试用例;

第二获取模块63,用于获取所述待执行的功能测试用例对应的预设执行顺序;

运行模块64,用于按照所述预设执行顺序,运行所述待执行的功能测试用例,得到测试结果。

可选地,当所述测试需求包括业务测试需求时,则所述待执行的功能测试用例包括与所述业务测试需求匹配的多个功能测试用例;

当所述测试需求包括功能测试需求时,则所述待执行的功能测试用例包括与所述功能测试需求匹配的一个功能测试用例;

其中,一个功能测试用例由多个原子测试用例构成,且一个功能测试用例用于验证所述测试产品的单一功能。

可选地,所述第一获取模块62包括:

第一获取子模块,用于当所述测试需求包括业务测试需求时,根据测试产品的所述业务测试需求,从预先存储的多个页面类中,识别与所述业务测试需求匹配的多个第一页面类;

第一创建子模块,用于对所述多个第一页面类分别创建多个第一页面类对象;

第二获取子模块,用于获取所述多个第一页面类对象的运行函数;

所述第二获取模块63包括:

第三获取子模块,用于根据所述业务测试需求,获取所述多个第一页面类对象的运行函数之间的第一预设执行顺序,其中,一个第一页面类对象的运行函数用于验证所述测试产品的一个功能;

所述运行模块64包括:

第一运行子模块,用于按照所述第一预设执行顺序依次调用所述多个第一页面类对象的运行函数,得到测试结果。

可选地,第一获取模块62包括:

第四获取子模块,用于当所述测试需求包括功能测试需求时,根据测试产品的所述功能测试需求,从预先存储的多个页面类中,识别与所述功能测试需求匹配的第二页面类;

第二创建子模块,用于对所述第二页面类创建第二页面类对象;

第五获取子模块,用于获取所述第二页面类对象的运行函数;

第一调用子模块,用于调用所述第二页面类对象的运行函数,以获取所述第二页面类对象的多个原子操作函数、每个原子操作函数的测试参数,其中,一个原子测试用例包括一个原子操作函数以及所述原子操作函数的测试参数;

所述第二获取模块63包括:

所述第一调用子模块,用于调用所述第二页面类对象的运行函数,以获取所述多个原子操作函数之间的第二预设执行顺序;

所述运行模块64包括:

第二运行子模块,用于根据每个原子操作函数的所述测试参数,按照所述第二预设执行顺序依次调用所述第二页面类对象的多个原子操作函数,得到测试结果。

可选地,所述第一调用子模块包括:

调用单元,用于调用所述第二页面类对象的运行函数,以读取所述第二页面类对象的预设数组,其中,所述预设数组预先存储有所述多个原子操作函数之间的第二预设执行顺序,以及存储有每个原子操作函数与测试参数的关联关系;

第一获取单元,用于根据所述预设数组,获取所述多个原子操作函数之间的第二预设执行顺序;

第二获取单元,用于根据所述预设数组中的所述关联关系,获取所述多个原子操作函数中每个原子操作函数的测试参数。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

根据本发明的又一个实施例,本发明还提供了一种终端,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的测试用例的执行程序,所述测试用例的执行程序被所述处理器执行时实现如上述任意一个实施例所述的测试用例的执行方法的步骤。

根据本发明的再一个实施例,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有测试用例的执行程序,所述测试用例的执行程序被处理器执行时实现如上述任意一个实施例所述的测试用例的执行方法中的步骤。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种测试用例的执行方法、一种测试用例的执行装置、一种终端、一种计算机可读存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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