掌桥专利:专业的专利平台
掌桥专利
首页

一种基于docker的自动化测试方法和装置

文献发布时间:2023-06-19 10:54:12


一种基于docker的自动化测试方法和装置

技术领域

本申请涉及测试技术领域,尤其涉及一种基于docker的自动化测试方法和装置。

背景技术

随着测试技术越来越专业化、流程化、规范化,其中测试过程更加规范,冒烟测试、回归测试、版本迭代测试即会产生大量的重复性工作,使用人工进行大量的重复性劳动,产生审美疲劳是必然,此时需要在工作中掌握自动化测试技术,以避免人工大量重复性工作产生的错误。狭义上来讲,通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。在测试过程中,导入了分层测试的概念,即将系统/软件的整体分成UI界面层(UI功能测试)、业务逻辑层(对应接口测试)和数据处理层(对应单元测试),而自动化测试也是依据分层测试的概念进行了工具、测试流程的划分。传统的自动化测试可以理解为基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。

目前自动化测试工具只能局限于对某一层测试进行自动化测试开发,只能实现单一层的自动化测试,例如UI自动化测试只能实现UI自动化测试,例如单元自动化测试只能实现单元自动化测试。也就是说,目前自动化测试存在测试工具不统一、各层测试工具繁杂等问题。

发明内容

本申请的目的在于提供一种基于docker的自动化测试方法和装置,实现了分布式运行自动化测试。

第一方面,本申请实施例提供的一种基于docker的自动化测试方法,包括:根据测试任务的类型,构建若干个用于实现测试环境的容器镜像,其中,每一个所述容器镜像对应一种接口测试类型;当接收到自动化测试请求时,获取与所述自动化测试请求对应的指定代码;根据指定代码,生成与指定代码对应的自动化测试脚本;根据与所述接口测试任务对应的容器镜像创建相应的容器;在创建的所述容器中根据所述自动化测试脚本对所述接口测试任务涉及的接口进行测试。

一个可选的实施例中,在创建所述容器之前,还包括:根据第一配置信息,编译生成用于部署测试环境的配置文件,其中所述第一配置信息至少包括与所述容器镜像相关的信息;根据所述配置文件,部署测试环境,并生成所述容器。

一个可选的实施例中,所述构建若干个用于实现测试环境的容器镜像包括:获取与各项接口测试任务对应的主流程测试数据和测试脚本;根据所述主流程测试数据和所述测试脚本生成与各项接口测试任务对应的容器镜像文件。

一个可选的实施例中,所述根据所述指定代码,生成与所述指定代码对应的自动化测试脚本的步骤,包括:对所述指定代码执行编译操作;获取所述指定代码执行所述编译操作后生成的编译结果;从预设的脚本数据库中获取与所述自动化测试请求对应的脚本模板;根据所述编译结果与所述脚本模板,生成所述自动化测试脚本。

第二方面,本申请实施例还提供了一种自动化测试装置,包括:

容器镜像构建单元,用于根据测试任务的类型,构建若干个用于实现测试环境的容器镜像,其中,每一个所述容器镜像对应一种接口测试类型;

自动化测试脚本生成单元,用于当接收到自动化测试请求时,获取与所述自动化测试请求对应的指定代码;根据指定代码,生成与指定代码对应的自动化测试脚本;

容器创建单元,用于根据与所述接口测试任务对应的容器镜像创建相应的容器;

测试单元,用于在创建的容器中对该项接口测试任务涉及的各接口进行测试。

一个可选的实施例中,所述容器创建单元具体用于:根据第一配置信息,编译生成用于部署测试环境的配置文件,其中所述第一配置信息至少包括与所述容器镜像相关的信息;根据所述配置文件,部署测试环境,并生成所述容器。

一个可选的实施例中,所述容器镜像构建单元具体用于:获取与各项接口测试任务对应的主流程测试数据和测试脚本;根据所述主流程测试数据和所述测试脚本生成与各项接口测试任务对应的容器镜像文件。

一个可选的实施例中,所述自动化测试脚本生成单元具体用于:对所述指定代码执行编译操作;获取所述指定代码执行所述编译操作后生成的编译结果;从预设的脚本数据库中获取与所述自动化测试请求对应的脚本模板;根据所述编译结果与所述脚本模板,生成所述自动化测试脚本。

第三方面,本申请实施例还提供了一种电子设备,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如第一方面任一项所述的方法。

第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如第一方面任一项所述的方法。

附图说明

为了更清楚地说明本申请的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以用这些附图获得其他的附图。

图1是本申请实施例提供的系统原理图;

图2是本申请实施例提供一种基于docker的自动化测试方法流程图;

图3是本申请实施例提供一种基于docker的自动化测试方法流程图;

图4是本申请实施例提供的一种基于docker的自动化测试装置示意图;

图5是本申请实施例提供的一种容器示意图;

图6是本申请实施例提供的一种电子设备硬件结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提供的一种基于docker的自动化测试方法,使用python语言实现了分层测试中的单元测试、接口测试、UI测试的自动化测试工具的统一,实现了分布式运行自动化测试,避免了自动化工具的环境配置复杂、工具繁琐的弊端,集成了单元测试自动化、接口测试自动化、UI测试自动化,实现了测试自动化的统一部署平台。如图1所示,本发明由服务器端和测试机端两部分组成,服务器端进行代码部署、维护、运行。测试机端(图中以节点node1、node2、node3等示意)是指运行浏览器,进行远程UI自动化测试的主机,或者是APP测试的手机端。

首先,在对本公开实施例进行描述的过程中出现的部分名词或术语适用于如下解释:

容器技术(Linux Container)是一种内核轻量级的操作系统层的虚拟化技术,相比传统的虚拟化(虚拟机)技术繁琐的移植和部署,容器技术具有极其轻量、秒级部署、易于移植(一次构建、到处运行)的特点。可以加速企业产品的应用自动化流程和应用部署运维、优化企业的IT基础设施的利用率和成本,还可使用基于容器的微服务来加速企业的应用架构现代化进程,全面助力企业IT的加速发展。容器镜像是由一系列的只读镜像层所构成,每一个镜像层都只包含上一个镜像层的增量部分。通过容器镜像创建容器,就是在原来的容器镜像层上面再创建一层可读写的容器层。用户在容器的使用过程中,对容器的所有操作实际是对容器层的操作,并不会对只读部分的镜像产生任何的影响。

Dockerfile:一个包含用于组合镜像的命令的文本文档。Docker可通过读取Dockerfile中的指令来自动生成镜像:每条指令都会创建一个镜像层,继而会增加镜像的整体大小。Dockerfile通常包括以下信息:基础镜像信息、镜像操作指令和容器启动时执行指令。

目前常用的Linux系统镜像有CentOS(镜像大小200M左右,例如CentOS版本7的大小为215M)、Ubuntu(镜像大小150M左右,例如Ubuntu trusty版本188M)和Debian(镜像大小100M左右,例如debian wheezy版本的大小为85M)。通过这些基础镜像构建时,Dockerfile的构成如下:

容器,基于容器镜像创建生成。容器可以理解为容器镜像的一个实例,其让用户可以打包应用及程序依赖包到一个可移植的容器内,然后部署到支持容器的Linux设备上(常见Linux发布版本基本都支持)。同时,实现了进程级别的虚拟化。

容器镜像(Image)是构建容器的基础,其是一种分层结构的文件系统。一个只读层被称为容器镜像,一个容器镜像是永久不会变的。由于容器技术使用统一的文件系统,认为整个文件系统是以读写方式挂载的。但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。也就是说,容器镜像提供了只读层,而在只读层上添加了读写层后便构成容器,也即容器镜像在设备上部署为容器。

如图2和图3所示,一种基于docker的自动化测试方法流程图,包括如下步骤:

步骤201:根据测试任务的类型,构建若干个用于实现测试环境的容器镜像,其中,每一个所述容器镜像对应一种接口测试类型。

本步骤中,构建若干个用于实现测试环境的容器镜像包括:获取与各项接口测试任务对应的主流程测试数据和测试脚本;根据主流程测试数据和测试脚本生成与各项接口测试任务对应的容器镜像文件。

通过构建若干个与测试任务相对应、用于实现测试环境的容器镜像,在满足一项接口测试任务的执行条件时,根据与该项接口测试任务对应的容器镜像创建相应的容器,在创建的容器中对该项接口测试任务涉及的各接口进行测试。该技术方案的有益效果在于,利用docker等技术实现的容器可以并发进行多个测试任务,例如测试多个模块,这些模块的测试互不影响,并且可以方便地进行持续集成和回归,以及多模块的全链路测试等等,接口自动化测试效率很高。

步骤202:当接收到自动化测试请求时,获取与所述自动化测试请求对应的指定代码;根据指定代码,生成与指定代码对应的自动化测试脚本。

本步骤中,首先对上述指定代码执行编译操作。然后获取上述指定代码执行编译操作后生成的编译结果,其中,可以通过编译器对上述代码进行编译得到上述编译结果,该编译方法可以采用现有常用的代码编译方案,在此不再赘述。在得到了上述编译结果后,再从预设的脚本数据库中获取与上述自动化测试请求对应的脚本模板。其中,上述脚本数据库内存储有各种类型的脚本模板文件。最后根据上述编译结果与上述脚本模板,生成上述自动化测试脚本,以便后续将生成的上述自动化测试脚本拷贝到上述容器云平台内的Docker镜像中,生成对应的pod,进而在上述pod中执行上述自动化测试脚本以完成自动化测试。具体地,可以参照与上述自动化测试请求对应的脚本模板,将上述编译结果输入至脚本模板的对应位置处来得到该自动化测试脚本。

步骤203:根据与所述接口测试任务对应的容器镜像创建相应的容器。

本步骤中,自动化测试平台根据测试任务的类型,确定相应的容器镜像,例如数据库类型的容器镜像、中间件类型的容器镜像以及应用类型的容器镜像。然后,自动化测试平台利用容器镜像生成用于测试的容器。

步骤204:在创建的所述容器中根据所述自动化测试脚本对所述接口测试任务涉及的接口进行测试。

本步骤中,可以通过postman工具进行手工测试,即针对一个测试任务涉及的各接口,分别进行单接口测试,再将测试数据整合成主流程测试数据。Postman可以通过测试用例生成相应的接口请求,测试接口的功能。

如图4所示,本申请实施例还公开了一种基于docker的自动化测试装置,该装置包括:

容器镜像构建单元401,用于根据测试任务的类型,构建若干个用于实现测试环境的容器镜像,其中,每一个所述容器镜像对应一种接口测试类型。

自动化测试脚本生成单元402,用于当接收到自动化测试请求时,获取与所述自动化测试请求对应的指定代码;根据指定代码,生成与指定代码对应的自动化测试脚本。

容器创建单元403,用于根据与所述接口测试任务对应的容器镜像创建相应的容器。

测试单元404,用于在创建的容器中对该项接口测试任务涉及的各接口进行测试。

如图5所示,对于容器来说,进一步包括:

参数配置模块,可在模块文件内配置执行参数,如:配置测试次数、配置失败重跑、随机运行、出错返回信息、多重校验等参数。图中以单元测试参数配置、接口测试参数配置、UI测试参数配合示例说明。

数据采集处理模块,主要功能为进行测试数据的采集,存储,对数据库数据进行增删改查,以满足自动化测试的要求。

脚本运行模块,主要功能是脚本的运行选择,可选择不同目录下的脚本进行测试。

日志处理模块,主要是系统运行过程中采集到的日志,进行分时分级别的保存,结合测试报告可以定位问题原因。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。

图6示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器610、存储器620、输入/输出接口630、通信接口640和总线650。其中处理器610、存储器620、输入/输出接口630和通信接口640通过总线650实现彼此之间在设备内部的通信连接。

处理器610可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。存储器620可以采用ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器620可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器620中,并由处理器610来调用执行。

输入/输出接口630用于连接输入/输出模块,以实现信息输入及输出。输入/输出模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口640用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线650包括一通路,在设备的各个组件(例如处理器610、存储器620、输入/输出接口630和通信接口640)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器610、存储器620、输入/输出接口630、通信接口640以及总线650,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

相关技术
  • 一种基于docker的自动化测试方法和装置
  • 一种基于Docker容器的多任务调度自动化测试方法及系统
技术分类

06120112722868