自动化测试的方法、装置、设备、介质
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种自动化测试的方法、装置、设备、存储介质。
背景技术
应用测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
自动化测试是把以人为主体的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试。
但是目前编写自动化测试过程中上下游外部依赖多,构建和维护测试数据困难。上下游外部依赖是指系统中的一个对象,需要被测试的部分代码要与这个对象发生交互,但系统并不能控制这个对象例如测试数据等。常见的依赖包括系统时间、Web服务、文件系统、数据库服务、内存等。
发明内容
本发明欲解决的技术问题
现有技术中的自动化测试过程往往需要完整的测试环境和测试数据,单机无法进行完整的自动化测试;并且测试结果无法进行快速反馈;测试变量等测试数据不可控,以及外部测试环境易出现故障,测试环境中存在干扰数据等问题。
本发明正是为了解决上述课题而完成,其目的在于提供一种简单高效的,减少外部依赖的自动化测试的方法、装置、设备、存储介质。
用于解决问题的技术方案
为了解决上述技术问题,本发明实施例提供一种自动化测试的方法,采用了如下所述的技术方案:
所述方法包括,搭建平台步骤,通过配置组合外部依赖的方式,搭建出用于测试的外部依赖模拟平台;
环境实现步骤,在所述外部依赖模拟平台中使用测试工具实现自动化测试的环境;
定义抽象接口步骤,通过为所述外部依赖模拟平台定义统一的抽象接口,将对于外部依赖的调用定义为对于所述抽象接口的调用;
自动化测试步骤,运用模拟程序通过所述抽象接口调用对应的所述测试工具以实现应用的自动化测试。
进一步地,所述测试工具实现自动化测试的环境至少包括以下方式:
A、通过存储所述外部依赖的内存实现;
B、通过使用代码生成工具生成模拟代码实现;
C、通过使用真实线上代码,配置线下测试服务器地址实现;
D、通过自定义配置专用代码实现。
进一步地,所述外部依赖模拟平台中的所述测试工具包括不同的数据库集群和缓存集群。
进一步地,所述自动化测试所需要的环境包括线上生产环境和线下开发测试环境,所述抽象接口也允许所述线上生产环境直接接入。
进一步地,还包括反馈步骤,对所述自动化测试的结果进行反馈。
进一步地,所述外部依赖模拟平台根据自动化测试来控制测试变量和/或配置测试工具。
本发明的另一方面提供了一种自动化测试的装置,其特征在于,包括:
搭建平台模块,通过配置组合外部依赖的方式,搭建出用于测试的外部依赖模拟平台;
环境实现模块,在所述外部依赖模拟平台中使用测试工具实现自动化测试的环境;
定义抽象接口模块,通过为所述外部依赖模拟平台定义统一的抽象接口,将对于外部依赖的调用定义为对于所述抽象接口的调用;
自动化测试模块,运用模拟程序通过所述抽象接口调用对应的所述测试工具以实现应用的自动化测试。
进一步地,还包括反馈模块,对所述自动化测试的结果进行反馈。
本发明的另一方面提供了一种终端设备,包括存储器和处理器,所述存储器中存储有应用程序,所述处理器执行所述应用程序时实现如前述任一项所述的自动化测试的方法的步骤。
本发明的另一方面提供了一种非暂态计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述任一项所述的自动化测试的方法的步骤。
发明效果
本发明的自动化测试方法不需要完整的测试环境和测试数据,单机即可进行,并且测试在进程内存中进行,可以获得快速反馈;测试变量等测试数据可以根据情况进行控制,以及不受外部测试环境故障、测试环境中存在干扰数据等问题的影响。
附图说明
图1是本发明可以应用于其中的示例性系统架构图;
图2根据本发明的减少外部依赖的自动化测试的方法的一个实施例的流程图;
图3根据本发明的减少外部依赖的自动化测试的方法的一个实施例的示意图;
图4是根据本发明的终端设备的一个实施例的结构示意图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明;本发明的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本发明的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本发明方案,下面将结合附图,对本发明实施例中的技术方案进行清楚、完整地描述。
[系统结构]
首先,说明本发明的一个实施例的系统的结构。如图1所示,系统结构100可以包括终端设备101、102、103,网络104和服务器105。网络104是用以在终端设备101、102、103和服务器105之间提供通信链路的介质。其中,终端设备101为小屏显示器设备,终端设备102和/或103为大屏显示器设备。
在本实施例中,减少外部依赖的自动化测试的方法运行于其上的电子设备(例如图1所示的终端设备101或102或103)可以通过网络104进行各种信息的传输。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、WiMAX连接、Zigbee连接、UWB(ultrawideband)连接、以及其他现在已知或将来开发的无线连接方式。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。
需要说明的是,本发明实施例所提供的减少外部依赖的自动化测试的方法一般由服务器与终端设备共同执行。在本实施例中,服务器用于与终端设备101、102、103进行信息传输,例如向终端设备101、102、103的提供各种测试工具即各种数据库集群和缓存集群。
在本实施例中,服务器提供的数据库集群是指利用至少两台或者多台数据库服务器,构成一个虚拟单一数据库逻辑映像,像单数据库系统那样,向客户端提供透明的数据服务。服务器提供的缓存集群是指一组相互独立的、通过高速网络互相联通的节点,构成一个组并以单一系统的模式加以管理。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[实施例装置]
为了实现本发明实施例中的技术方案,本发明提供了一种减少外部依赖的自动化测试的装置,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中,图2所示的方法将在下面详细描述。
本实施例所述的减少外部依赖的自动化测试的装置包括:搭建平台模块、环境实现模块、定义抽象接口模块、自动化测试模块、反馈模块。
搭建平台模块,用于执行搭建平台步骤S201,通过配置组合外部依赖例如系统时间、Web服务、文件系统、数据库服务、内存等的方式,搭建出测试需要的外部依赖模拟平台。这里,外部依赖模拟平台是指应用开发过程中的一个类,可以是Java设计语言中最常用的工厂模式(Factory Pattern),当然也可以是其他设计语言中的类似设计模式,凡是在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象的模式的类均可以是本发明中的外部依赖模拟平台。
环境实现模块,用于执行环境实现步骤S202,在外部依赖模拟平台中使用测试工具实现自动化测试所需要的环境。这里,外部依赖模拟平台中的所述测试工具包括不同的数据库集群和缓存集群,这里,数据库集群和缓存集群可以是mysql,redis,也可以是其他测试相关的开源库。
1.Ginkgo,面向Behavior的测试开发库。可以有效组织测试代码,提高测试代码复用;
2.factory-go,用于生成测试fixture,减少代码冗余;
3.go-randomdata和kolpa,生成随机的测试数据。
这里,自动化测试所需要的环境包括线上生产环境和线下开发测试环境,所述抽象接口也允许所述线上生产环境直接接入。这里,线上生产环境即用户产生交互的服务端环境,能够最真实的反映程序的运行环境。线下开发测试环境是根据线上生产环境克隆出来作为测试用途的环境,和线上生产环境非常相似,但存在一些细微的差异。
定义抽象接口模块,用于执行定义抽象接口步骤S203,通过为外部依赖模拟平台定义统一的抽象接口,将对于各种外部依赖的调用定义为对于所述抽象接口的调用。例如,对于redis,外部依赖模拟平台进行设计定义统一的redis client的抽象接口interface{},并对goredis增加一层封装类来实现这个接口。
自动化测试模块,用于执行自动化测试步骤S204,运用模拟程序通过抽象接口调用对应的所述测试工具以实现应用的自动化测试。这里,模拟程序是用来复制一个移动设备的内部工作的,用于开发和测试移动应用程序,当然,这里模拟程序也可以是真实的移动终端设备。
反馈模块,用于执行反馈步骤S205,对自动化测试的结果进行快速反馈。这里,由于自动化测试在进程的内存中完成,因此可以获得快速反馈。
[实施例方法]
继续参考图2,示出了根据本发明的减少外部依赖的自动化测试的方法的一个实施例的流程图。所述减少外部依赖的自动化测试的方法,包括以下步骤:
搭建平台步骤S201,通过配置组合外部依赖例如系统时间、Web服务、文件系统、数据库服务、内存等的方式,搭建出测试需要的外部依赖模拟平台。这里,外部依赖模拟平台是指应用开发过程中的一个类,可以是Java设计语言中最常用的工厂模式(FactoryPattern),当然也可以是其他设计语言中的类似设计模式,凡是在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象的模式的类均可以是本发明中的外部依赖模拟平台。
环境实现步骤S202,在外部依赖模拟平台中使用测试工具实现自动化测试所需要的环境。这里,外部依赖模拟平台中的所述测试工具包括不同的数据库集群和缓存集群,这里,数据库集群和缓存集群可以是mysql,redis,也可以是其他测试相关的开源库。
1.Ginkgo,面向Behavior的测试开发库。可以有效组织测试代码,提高测试代码复用;
2.factory-go,用于生成测试fixture,减少代码冗余;
3.go-randomdata和kolpa,生成随机的测试数据。
这里,自动化测试所需要的环境包括线上生产环境和线下开发测试环境,所述抽象接口也允许所述线上生产环境直接接入。这里,线上生产环境即用户产生交互的服务端环境,能够最真实的反映程序的运行环境。线下开发测试环境是根据线上生产环境克隆出来作为测试用途的环境,和线上生产环境非常相似,但存在一些细微的差异。
这里,测试工具实现自动化测试的环境至少包括以下方式:
A、通过存储所述外部依赖的内存实现,该种实现方式的特点是,方便每次测试前快速生成数据和销毁数据,其中的某个外部依赖(mysql/redis)只要实现一次就可以在所有项目中通用;
B、通过使用代码生成工具生成模拟代码实现,该种实现方式的特点是,可以实现按需使用,其中的大部分代码可以通过代码生成工具生成,在测试时只制定外部依赖的输入输出即可;
C、通过使用真实线上代码,配置线下测试服务器地址实现,该种实现方式的特点是,成本比较低,只要进行对应的代码进行简单的配置即可;
D、通过自定义配置专用代码实现,该种实现方式的特点是,可以针对测试对象专用的代码,适配性较高。
定义抽象接口步骤S203,通过为外部依赖模拟平台定义统一的抽象接口,将对于各种外部依赖的调用定义为对于所述抽象接口的调用。例如,对于redis,外部依赖模拟平台进行设计定义统一的redis client的抽象接口interface{},并对goredis增加一层封装类来实现这个接口。
自动化测试步骤S204,运用模拟程序通过抽象接口调用对应的所述测试工具以实现应用的自动化测试。这里,模拟程序是用来复制一个移动设备的内部工作的,用于开发和测试移动应用程序,当然,这里模拟程序也可以是真实的移动终端设备。这里,在自动化测试过程中,外部依赖模拟平台根据自动化测试需要控制测试变量和/或配置测试工具。
这里,自动化测试步骤中,主要包括编写测试用例、执行测试用例、查找最新测试用例、自动发送测试报告、定时执行测试用例等应用测试中常用的流程。
反馈步骤S205,对自动化测试的结果进行快速反馈。这里,由于自动化测试在进程的内存中完成,因此可以获得快速反馈。
[实施例]
下面,参照图3一个实施例的示意图对本发明的减少外部依赖的自动化测试的方法进行详细描述。
如图3所示,外部依赖31为现有技术中自动化测试的各种上下游外部依赖,例如系统时间、Web服务、文件系统、数据库服务、内存等。
外部依赖模拟平台32为通过配置组合外部依赖的方式,搭建出的测试需要的工厂模式(Factory Pattern)的一个类。其中,工厂模式(Factory Pattern)的类相当于一个框架,在框架下实现自动化测试所需要的线上生产环境和线下开发测试环境。
在工厂模式(Factory Pattern)的类下,针对业务上的不同外部依赖,即构建不同类型的依赖,即构造不同的数据库集群和缓存集群也即测试工具33,不同的数据库集群和缓存集群可以在外部依赖模拟平台32中模拟外部独立的各种依赖,其可以是mysql,redis,也可以是其他测试相关的开源库,例如:
1.Ginkgo,面向Behavior的测试开发库。可以有效组织测试代码,提高测试代码复用;
2.factory-go,用于生成测试fixture,减少代码冗余;
3.go-randomdata和kolpa,生成随机的测试数据。
通过为外部依赖模拟平台32定义统一的抽象接口34,当需要进行自动化测试时,不需要完整的测试环境和测试数据,单机即可通过对于抽象接口32的调用实现对不同的数据库集群和缓存集群也即测试工具33的调用,进行完整的自动化测试。例如,对于redis,外部依赖模拟平台32进行设计定义统一的redis client的抽象接口34interface{}。对于定义的抽象接口34interface{},除了线上生产环境的标准实现外,线下测试开发环境的实现还可以通过:
A、通过存储所述外部依赖的内存实现,该种实现方式的特点是,方便每次测试前快速生成数据和销毁数据,其中的某个外部依赖(mysql/redis)只要实现一次就可以在所有项目中通用;
B、通过使用代码生成工具生成模拟代码实现,该种实现方式的特点是,可以实现按需使用,其中的大部分代码可以通过代码生成工具生成,在测试时只制定外部依赖的输入输出即可;
C、通过使用真实线上代码,配置线下测试服务器地址实现,该种实现方式的特点是,成本比较低,只要进行对应的代码进行简单的配置即可;
D、通过自定义配置专用代码实现,该种实现方式的特点是,可以针对测试对象专用的代码,适配性较高。
在具体实践中,mysql数据库的测试实现可以使用sqlite的内存模式。
redis和etcd的测试实现可以使用内存kv数据库ledisdb进行模拟。
对于RPC服务的测试实现可以使用GoMock生成mock代码进行模拟。
在进行自动化测试时,外部依赖模拟平台32可完全控制测试变量(如流量降级开关中的随机数),无需担心外部测试环境故障、测试环境干扰数据等问题的存在。
并且,由于自动化测试在进程的内存中完成,因此可以获得快速反馈。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非暂态计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
为解决上述技术问题,本发明实施例还提供终端设备。具体请参阅图4,图4为本实施例终端设备基本结构框图。
所述终端设备4包括通过系统总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件41-43的终端设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的终端设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述终端设备可以是手机、平板电脑、桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可以与用户通过触摸屏、键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述终端设备4的内部存储单元,例如该终端设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述终端设备4的外部存储设备,例如该终端设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器41还可以既包括所述终端设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述终端设备4的操作系统和各类应用软件,例如减少外部依赖的自动化测试的方法的程序代码等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器42在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述终端设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的程序代码或者处理数据,例如运行所述减少外部依赖的自动化测试的方法的程序代码。
所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述终端设备4与其他电子设备之间建立通信连接。
本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有减少外部依赖的自动化测试的程序,所述减少外部依赖的自动化测试的程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的减少外部依赖的自动化测试的方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
显然,以上所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,附图中给出了本发明的较佳实施例,但并不限制本发明的专利范围。本发明可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本发明的公开内容的理解更加透彻全面。尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本发明说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本发明专利保护范围之内。