本申请涉及自动测试领域,尤其涉及一种测试脚本的运行方法及装置、设备、计算机可读存储介质。
背景技术:
对浏览器进行测试的目的在于,模仿用户对于浏览器的使用过程,收集浏览器在被使用过程中的各项信息,以定位浏览器可能存在的各种问题。
现有的自动化测试,往往还是需要测试人员编写测试脚本,通过运行测试脚本实现对于浏览器的自动测试。然而因为现有的浏览器不支持不同的账户同时登录同一网站,所以在自动测试过程中,不可能对不同账户使用同一浏览器登录同一网站的过程进行连续测试,而是在针对一个用户的自动测试完成后,手动切换用户登录。因此,针对浏览器的自动测试的效率有待提高。
技术实现要素:
本申请提供了一种测试脚本的运行方法及装置、设备、计算机可读存储介质,目的在于解决如何提高浏览器的自动测试的效率的问题。
为了实现上述目的,本申请提供了以下技术方案:
一种测试脚本的运行方法,包括:
获取测试脚本,所述测试脚本中包括用于实现测试用例的代码,其中,第一被测事件和第二被测事件被包含在同一个测试用例中,所述第一被测事件与所述第二被测事件的访问对象为同一域名,所述第一被测事件与所述第二被测事件的访问发起主体不同;
在运行所述测试脚本的过程中,查询所述测试脚本中的目标代码单元对应的cookie;所述目标代码单元为任意一个代码单元;
如果所述目标代码单元对应的cookie已存在,使用浏览器中所述cookie对应的页面运行所述目标代码单元;
如果所述目标代码单元对应的cookie不存在,在所述浏览器中启动新页面运行所述目标代码单元;
使用运行所述目标代码单元的页面对应的cookie访问所述域名。
可选的,所述用于实现测试用例的代码以倒序编写,所述倒序为与被测事件的执行顺序相反的顺序;
所述测试脚本中还包括:
指示目标代码单元的依赖代码单元的注释;其中,所述目标代码单元为任意一个代码单元,所述依赖代码单元为所述测试用例执行过程中,在所述目标代码单元之前执行的代码单元。
可选的,在所述在运行所述测试脚本的过程中,查询所述测试脚本中的目标代码单元对应的cookie之前,还包括:
通过所述注释递归查询所述测试用例的根代码单元,所述根代码单元为首先运行的代码单元;
从所述根代码单元起,依据所述注释,依次运行所述测试脚本中的各个代码单元。
可选的,还包括:
依据封装指令,将所述测试脚本中的代码单元进行封装,得到测试用例单元;其中,封装至一个所述测试用例单元的代码单元包括:使用同一页面运行的各个代码单元、按照具有预设执行顺序的代码单元、或者被多个代码单元依赖的依赖代码单元。
可选的,所述查询所述测试脚本中的目标代码单元对应的cookie,包括:
从预设的存储空间查询所述测试脚本中的目标代码单元对应的cookie,其中,所述存储空间用于存储得到浏览器运行中产生的cookie。
可选的,所述浏览器包括:
pc浏览器和/或手机浏览器。
一种测试脚本的运行装置,包括:
获取模块,用于获取测试脚本,所述测试脚本中包括用于实现测试用例的代码,其中,第一被测事件和第二被测事件被包含在同一个测试用例中,所述第一被测事件与所述第二被测事件的访问对象为同一域名,所述第一被测事件与所述第二被测事件的访问发起主体不同;
查询模块,用于在运行所述测试脚本的过程中,查询所述测试脚本中的目标代码单元对应的cookie;所述目标代码单元为任意一个代码单元;
运行模块,用于如果所述目标代码单元对应的cookie已存在,使用浏览器中所述cookie对应的页面运行所述目标代码单元;如果所述目标代码单元对应的cookie不存在,在所述浏览器中启动新页面运行所述目标代码单元;使用运行所述目标代码单元的页面对应的cookie访问所述域名。
可选的,所述测试脚本的运行装置基于selenium和appium框架设置。
一种测试脚本的运行设备,包括处理器和存储器;所述存储器用于存储程序,所述处理器用于运行所述程序,以实现上述的测试脚本的运行方法。
一种计算机可读存储介质,其上存储有程序,在所述程序被计算设备运行时,实现上述的测试脚本的运行方法。
本申请所述的测试脚本的运行方法及装置,获取包括用于实现测试用例的代码的测试脚本,其中,访问对象为同一域名但访问发起主体不同的第一被测事件和第二被测事件被包含在同一个测试用例中,在运行测试脚本的过程中,查询测试脚本中的目标代码单元对应的cookie,如果目标代码单元对应的cookie已存在,使用浏览器中cookie对应的页面运行目标代码单元,如果目标代码单元对应的cookie不存在,在浏览器中启动新页面运行目标代码单元,使用运行目标代码单元的页面对应的cookie访问域名。可见,能够对不同账户使用同一浏览器登录同一网站的过程进行连续测试,因此提高浏览器的自动测试的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的一种测试脚本的运行方法流程图;
图2为本申请实施例公开的又一种测试脚本的运行方法的流程图;
图3为本申请实施例公开的一种测试脚本的运行装置的结构示意图;
图4为本申请实施例公开的一种测试脚本的运行设备的结构示意图。
具体实施方式
本申请实施例提供的测试脚本的运行方法以及装置,可以应用在自动测试设备或装置中,使得浏览器能够使用不同的cookie访问同一域名,以提高自动测试的效率。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例公开的一种测试脚本的运行方法,包括以下步骤:
s101、获取测试脚本。
其中,测试脚本中包括用于实现测试用例的代码。被测事件是指用户操作浏览器的模拟流程。
本实施例中,假设第一被测事件与所述第二被测事件的访问对象为同一域名,即第一被测事件与第二被测事件访问同一网站。但第一被测事件与第二被测事件的访问发起主体不同,例如,第一被测事件可以被账户a发起,而第二被测事件被账户b发起。
现有技术中,在自动测试过程中,上述被测事件因为不可能被自动连续执行,所以,往往不会被写入一个测试用例中。而本实施例中,第一被测事件和第二被测事件被包含在同一个测试用例中。
可以理解的是,测试脚本可以由测试人员编写,具体的代码内容可以参见现有技术,这里不再赘述。
s102、运行测试脚本以执行自动测试过程。
s103、在运行测试脚本的过程中,查询测试脚本中的目标代码单元对应的cookie。
其中,目标代码单元为任意一个代码单元。可以理解的是,测试脚本中的代码有类、方法、套件等单元组成,本实施例中,代码单元可以为按照需求设置的上述单元中的一种。目标代码单元为任意一个代码单元。
目标代码单元对应的cookie,为预先与目标代码单元对应存储的、目标代码单元历史运行时生成的cookie。可以理解的是,在目标代码单元首次运行时,对应的cookie为空。
可以理解的是,可以先将浏览器历史运行中产生的cookie存储至预设的存储空间,本步骤中,从预设的存储空间查询所述测试脚本中的目标代码单元对应的cookie。
s103、如果目标代码单元对应的cookie已存在,使用浏览器中cookie对应的页面运行目标代码单元。
如果目标代码单元对应的cookie已存在,说明目标代码单元非首次运行,则可以使用历史运行目标单元的浏览器页面运行目标代码单元。
s104、如果目标代码单元对应的cookie不存在,在浏览器中启动新页面运行目标代码单元。
如果目标代码单元对应的cookie不存在,说明目标代码单元首次运行,则在浏览器中开启新的页面运行目标代码单元。可以理解的是,新页面是不对应任何cookie的,在运行目标代码单元后,与目标代码单元对应的cookie建立对应关系。
s105、使用运行目标代码单元的页面对应的cookie访问域名。
因为第一被测事件和第二被测事件包含在同一个测试实例中,所以,在脚本运行即测试实例被执行的过程中,假设第一被测事件的代码单元先运行以实现第一被测事件,则在第一被测事件完成后,第一被测事件的访问发起主体还在浏览器中处于登录状态,因为第一被测事件和第二被测事件的访问发起主体不同,所以,现有技术中,无法自动运行实现第二被测事件的代码单元,而是需要人为退出第一被测事件的访问发起主体,并登录第二被测事件的访问发起主体。
而本实施例所述的方法,针对上述情况,如果实现第二被测事件的代码单元对应的cookie已存在,则使用该cookie对应的页面实现第二被测事件,如果实现第二被测事件的代码单元对应的cookie不存在,则启动新页面实现第二被测事件,并且,使用当前使用的页码对应的cookie访问域名,相当于实现了不同访问主体的自动登录切换,所以无需人工介入。
综上所述,本实施例所述的测试脚本的运行方法,能够实现对不同账户使用同一浏览器登录同一网站的过程进行连续的自动测试,从而提升了测试效率。
并且,对于不同账户流程构成的被测事件,能够包含在一个测试示例中,使得测试逻辑更加贴近真实的使用过程,从而提升测试效果的准确性。
需要强调的是,本实施例所述的方法,并没有采用将手动切换账户登录的操作使用代码实现,来实现上述目的,而是从浏览器的特点出发,巧妙利用cookie实现发明目的。
可以理解的是,上述方法,仅使用目标代码单元为例进行说明,因为目标代码单元为任意一个代码单元,所以,对于各个目标代码单元进行相同的操作,即可完成对全部代码单元的运行。
图2为本申请实施例公开的又一种测试脚本的运行方法,与上述实施例相比,增加了能够减轻测试人员编写脚本的工作量的技术特征。
图2所示的方法包括以下步骤:
s201、获取测试脚本。
本实施例中,测试脚本中包括用于实现测试用例的代码,且第一被测事件和第二被测事件被包含在同一个测试用例中。
除此之外,用于实现测试用例的代码以倒序编写,倒序为与被测事件的执行顺序相反的顺序。
发明人在研究的过程中发现,不同用户对于同一网站的访问过程,往往前几步具有高度的相似度,不同之处主要体现在流程中相对靠后的步骤。所以,使用倒序编写代码,能够优先编写不同的部分,对于相同的部分,在其他测试用例已经包括相同内容的情况下,可以不再重复编写代码,从而减轻测试脚本的编写量,不仅解放了人力,更为重要的是,也可以进一步提升测试效率。
以招聘网站为例,假设一个完整的招聘流程为:招聘方a登录网站发布招聘信息,应聘方b和应聘方c分别登录网站浏览招聘信息,并且均与招聘方a进行了初步的文字沟通。应聘方b通过网站与招聘方a进行视频沟通,而应聘方c结束文字沟通后关闭对话框。
针对上述被测事件可见,应聘方b和c对于招聘网站的访问流程的前几步相同,所以,在编写应聘方b的测试脚本时,可以从应聘方b的最后一步视频沟通开始,在编写应聘方c的测试脚本时,可以从应聘方c的最后一步关闭对话框开始,因为应聘方b的测试脚本中已经编写了登录网站等步骤,则应聘方c的测试脚本中可以不写这部分相同的内容,也可以直接复制应聘方b的测试脚本的中内容,并且简单修改账户名即可。
因为测试用例在执行过程中,需要按照先后顺序被执行,所以,对于采用倒序编写的测试脚本中,还包括指示目标代码单元的依赖代码单元的注释。其中,依赖代码单元为测试用例执行过程中,在目标代码单元之前执行的代码单元。
s202、通过注释递归查询测试用例的根代码单元。
其中,根代码单元为首先运行的代码单元。
s203、从根代码单元起,依据注释,依次运行测试脚本中的各个代码单元。
s204、在运行、测试脚本的过程中,查询、测试脚本中的目标代码单元对应的cookie。所述目标代码单元为任意一个代码单元;
s205、如果目标代码单元对应的cookie已存在,使用浏览器中cookie对应的页面运行目标代码单元。
s206、如果目标代码单元对应的cookie不存在,在浏览器中启动新页面运行目标代码单元。
s207、使用运行目标代码单元的页面对应的cookie访问域名。
s208、依据封装指令,将测试脚本中的代码单元进行封装,得到测试用例单元。
其中,封装至一个所述测试用例单元的代码单元包括:使用同一页面运行的各个代码单元、按照具有预设执行顺序的代码单元、或者被多个代码单元依赖的依赖代码单元。
具体的,使用同一页面运行的代码单元,依据上述原理,对应相同的cookie。所以封装形成测试用例单元后,之后可以作为测试该cookie的用例直接调用,而无需再编写代码。
按照具有预设执行顺序的代码单元,接上例,不同应聘者登录招聘网站的步骤,作为一个整体被封装为测试用例单元后,后续如需可以直接调用。
被多个代码单元依赖的依赖代码单元,因为被多个代码单元依赖,所以封装为一个测试用例单元后,后续直接调用可以减少代码的编写量。
从图2所示的方法,为测试人员提供倒序编写测试脚本的方式,并且,为了适应这种测试脚本,以注释指示代码单元的执行顺序,所以,在实现对不同账户使用同一浏览器登录同一网站的过程进行连续的自动测试的前提下,还能够减少测试人员工作量,以进一步提高测试效率。
进一步的,将常用的代码单元封装为测试用例单元,后续可以直接调用,能够进一步减少测试人员工作量,更进一步提高测试效率。
需要说明的是,以上方法可以基于现有的自动测试工具实现,例如selenium和appium工具,其中,selenium工具用于实现pc端的自动测试,appium工具用于实现手机端的自动测试,因此,以上方法能够适用于pc浏览器和/或手机浏览器的自动化测试。
图3为本申请实施例公开的一种测试脚本的运行装置,包括:获取模块、查询模块和运行模块。
其中,获取模块用于获取测试脚本,所述测试脚本中包括用于实现测试用例的代码,其中,第一被测事件和第二被测事件被包含在同一个测试用例中,所述第一被测事件与所述第二被测事件的访问对象为同一域名,所述第一被测事件与所述第二被测事件的访问发起主体不同。
查询模块用于在运行所述测试脚本的过程中,查询所述测试脚本中的目标代码单元对应的cookie;所述目标代码单元为任意一个代码单元。
运行模块用于如果所述目标代码单元对应的cookie已存在,使用浏览器中所述cookie对应的页面运行所述目标代码单元;如果所述目标代码单元对应的cookie不存在,在所述浏览器中启动新页面运行所述目标代码单元;使用运行所述目标代码单元的页面对应的cookie访问所述域名。
可选的,所述用于实现测试用例的代码以倒序编写,所述倒序为与被测事件的执行顺序相反的顺序。
所述测试脚本中还包括:指示目标代码单元的依赖代码单元的注释;其中,所述目标代码单元为任意一个代码单元,所述依赖代码单元为所述测试用例执行过程中,在所述目标代码单元之前执行的代码单元。
可选的,所述查询模块还用于:在所述在运行所述测试脚本的过程中,查询所述测试脚本中的目标代码单元对应的cookie之前,通过所述注释递归查询所述测试用例的根代码单元,所述根代码单元为首先运行的代码单元。
所述运行模块还用于:从所述根代码单元起,依据所述注释,依次运行所述测试脚本中的各个代码单元。
可选的,所述装置还可以包括:封装模块,用于依据封装指令,将所述测试脚本中的代码单元进行封装,得到测试用例单元;其中,封装至一个所述测试用例单元的代码单元包括:使用同一页面运行的各个代码单元、按照具有预设执行顺序的代码单元、或者被多个代码单元依赖的依赖代码单元。
可选的,查询模块用于查询所述测试脚本中的目标代码单元对应的cookie,包括:查询模块具体用于,从预设的存储空间查询所述测试脚本中的目标代码单元对应的cookie,其中,所述存储空间用于存储得到浏览器运行中产生的cookie。
可选的,本实施例所述的测试脚本的运行装置,可以基于selenium和appium框架设置,以适应于pc浏览器和/或手机浏览器的自动化测试。
图3所示的测试脚本的运行装置,使得浏览器可以自动切换cookie访问网站,所以,能够实现对于访问同一网站的不同账户之间的连续的自动测试,从而提升自动测试的效率。进一步的,还能够降低测试人员的工作量。
图4为本申请实施例公开的一种测试脚本的运行设备,包括处理器和存储器,处理器与存储器通过总线完成相互间的通信。所述存储器用于存储程序,所述处理器用于运行所述程序,以实现上述方法实施例所述的测试脚本的运行方法。
本申请实施例还公开了一种计算机可读存储介质,其上存储有程序,在所述程序被计算设备运行时,实现上述方法实施例所述的测试脚本的运行方法。
本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。