基于容器技术的测试方法、装置、电子设备及存储介质与流程

文档序号:26587122发布日期:2021-09-10 19:40阅读:103来源:国知局

1.本公开涉及计算机技术领域,尤其涉及计算机测试技术领域。


背景技术:

2.随着计算机软件的规模越来越大,软件测试在项目中成为保障软件质量的重要一环,软件测试自动化成为必然趋势。一般需要测试人员首先按照测试需求编写测试用例,配置对应的测试环境,然后顺序执行测试,该测试方法适应于单一测试环境,耗时较长且全程需要人工参与。也就是说,现有技术并不能高效、灵活地完成大规模的自动化测试工作。


技术实现要素:

3.本公开提供了一种基于容器技术的测试方法、装置、电子设备以及存储介质。
4.根据本公开的一方面,提供了一种基于容器技术的测试方法,包括以下步骤:
5.将远程的存储空间映射到本地,从该存储空间获取目标资源并构建容器镜像,基于该容器镜像启动服务容器和客户容器;
6.利用该服务容器实时监听该客户容器的状态,在监听到该客户容器处于空闲状态的情况下,向该空闲状态的客户容器分发测试任务;
7.确定该服务容器和客户容器中符合预设条件的容器,发送命令触发该符合预设条件的容器执行更新。
8.根据本公开的另一方面,提供了一种基于容器技术的测试装置,包括:
9.启动模块,用于将远程的存储空间映射到本地,从该存储空间获取目标资源并构建容器镜像,基于该容器镜像启动服务容器和客户容器;
10.执行模块,用于利用该服务容器实时监听该客户容器的状态,在监听到该客户容器处于空闲状态的情况下,向该空闲状态的客户容器分发测试任务;
11.更新模块,用于确定该服务容器和客户容器中符合预设条件的容器,发送命令触发该符合预设条件的容器执行更新。
12.根据本公开的另一方面,提供了一种电子设备,包括:
13.至少一个处理器;以及
14.与该至少一个处理器通信连接的存储器;其中,
15.该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开任一实施例中的方法。
16.根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行本公开任一实施例中的方法。
17.根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现本公开任一实施例中的方法。
18.本公开通过动态分发能够实现测试任务的灵活分配,尤其适用于大量测试任务分发的场景,缩短了测试任务的耗时;本公开通过映射获得目标资源并构建容器镜像,将满足
预设条件的容器进行及时更新,保证了测试用容器的稳定性,提高了整个测试过程的执行效率。
19.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
20.附图用于更好地理解本方案,不构成对本公开的限定。其中:
21.图1是根据本公开一实施例的基于容器技术的测试方法示意图;
22.图2是根据本公开一实施例的服务容器执行示意图;
23.图3是根据本公开一实施例的客户容器执行示意图;
24.图4是根据本公开另一实施例的基于容器技术的测试方法示意图;
25.图5是根据本公开一实施例的容器更新示意图;
26.图6是根据本公开一实施例的基于容器技术的测试装置示意图;
27.图7是用来实现本公开实施例的基于容器技术的测试方法的电子设备框图。
具体实施方式
28.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
29.首先,在对本公开实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
30.容器技术(linux container)是一种内核轻量级的操作系统层的虚拟化技术,相比传统的虚拟化(虚拟机)技术繁琐的移植和部署,容器技术具有极其轻量、秒级部署、易于移植(一次构建、到处运行)的特点。可以加速企业产品的应用自动化流程和应用部署运维、优化企业的it基础设施的利用率和成本,还可使用基于容器的微服务来加速企业的应用架构现代化进程,全面助力企业it的加速发展。
31.docker:是指一种特定的容器化技术,用于支持创建和使用linux容器。docker可提供基于镜像的部署模式。这使得它能够轻松跨多种环境,与其依赖程序共享应用或服务组。docker还可在这一容器环境中自动部署应用。用docker技术生成的容器也叫作docker容器。
32.容器镜像(docker镜像):容器镜像是由一系列的只读镜像层所构成,每一个镜像层都只包含上一个镜像层的增量部分。通过容器镜像创建容器,就是在原来的容器镜像层上面再创建一层可读写的容器层。用户在容器的使用过程中,对容器的所有操作实际是对容器层的操作,并不会对只读部分的镜像产生任何的影响。
33.dockerfile:一个包含用于组合镜像的命令的文本文档。docker可通过读取dockerfile中的指令来自动生成镜像:每条指令都会创建一个镜像层,继而会增加镜像的整体大小。dockerfile通常包括以下信息:基础镜像信息、镜像操作指令和容器启动时执行指令。
34.nginx:nginx(engine x)是一个高性能的超文本传输协议(http)和反向代理互联网服务器。
35.内容分发网络(cdn,content delivery network):cdn是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。cdn的关键技术主要有内容存储和分发技术。
36.现有技术中,自动化测试方法目前普遍采用如下三种方案来解决:
37.(1)基于单一测试环境顺序执行自动化:这种方式只要求一套完整的自动化测试环境即可,然后遍历所有测试案例,依次执行。这是一种顺序的执行方案。
38.该方案适用于测试案例较少、自动化整体执行速度快的场景。如果遇到被测系统对应的测试案例数量较多,整体自动化执行耗时较久的场景,这种方案是不适用的,会阻碍其他分支的自动化回归测试,十分低效。
39.(2)基于docker容器指定启动参数和启动时序执行自动化:这种测试方案是把被测系统做成docker镜像,然后将生成的镜像作为测试任务模板,再基于测试任务模板创建测试任务,但创建出来的测试任务的执行需要依赖启动参数和启动时序。这是一种由配置文件提前指定型的多任务执行方案。
40.该方案适用于测试案例能稳定执行,每个测试案例的耗时可预估且耗时相差不大的场景。如果有的测试案例不稳定,偶尔会卡住,这样会阻塞当前镜像的任务执行;并且如果有的测试案例执行耗时是动态变化的,会无法提前设定好镜像的启动时序。
41.(3)基于docker容器的持续集成方法:这种测试方案是指在构建docker容器的时候会把持续集成环境和待执行测试任务加进去,不同的docker镜像对应不同的测试任务执行。
42.该方案适用于测试案例不会频繁修改和更新的场景。如果被测系统功能更新迭代比较快,测试案例就会被频繁修改,那对应的镜像也要重新制作,这是非常低效并繁琐的。
43.本公开是一种应用于计算机测试技术领域的基于容器技术的测试方法。如图1所示,本公开涉及一种基于容器技术的测试方法,该方法可以包括以下步骤:
44.s101:将远程的存储空间映射到本地,从该存储空间获取目标资源并构建容器镜像,基于该容器镜像启动服务容器和客户容器;
45.一示例中,映射即是通过主机卷映射或共享文件夹映射等手段,将储存目标资源的储存空间映射到本地,使得本地的容器可以共享储存目标资源的储存空间。该目标资源可以包括网络缓存系统、代理服务器和自动化测试脚本,具体地,网络缓存系统指的是内容分发网络(cdn)的缓存系统,代理服务器指的是nginx源站。如果想要容器可以自动化执行测试任务,需要在制作容器镜像的时候在dockerfile中依次完成网络缓存系统,nginx源站,源站依赖的各个模块,自动化代码的安装,即基于目标资源构建容器镜像。通过安装上述目标资源,可以为后续自动化执行测试案例建立好的容器环境基础,如果测试案例发生变化,在此基础上进行更新即可,不需要重新构建容器镜像;通过映射的方式获取目标资源,而不是在每个容器中都储存一份,实现了多容器共享一份源站目标资源,有效减小了容器体积,节省了空间。
46.一示例中,构建好容器镜像后,基于该容器镜像启动服务容器(server容器)和客
户容器(client容器),一个服务容器可以对应多个客户容器。服务容器主要用于测试任务的分发,客户容器主要用于接收测试任务并执行,需要强调的是,服务容器在执行上述分发任务的同时,也可以接收测试任务并执行,即服务容器可以兼任客户容器。
47.s102:利用该服务容器实时监听该客户容器的状态,在监听到该客户容器处于空闲状态的情况下,向该空闲状态的客户容器分发测试任务;
48.一示例中,如图2、图3所示,服务容器先启动,基于所有待测试的案例生成一个任务列表。然后服务容器先判断该任务列表中是否还有未分发的测试任务,如果有,就开始准备与客户容器建立连接并向客户容器下发该测试任务;服务容器和客户容器之间使用多路复用技术建立连接,具体可以使用epoll建立连接,一般需要判断一下是否需要和客户容器建立连接,如果需要即按照前述方法建立连接,如果不需要则说明已经有建立好的连接,建立连接成功后服务容器向空闲的客户容器发送测试任务,客户容器执行该测试任务。一个测试任务执行完之后,服务容器会向空闲的客户容器分发下一个任务,直到任务列表中的测试任务都被分发出去之后,服务容器会向所有客户容器发送测试完结信号(finish信号),所有客户容器收到测试完结信号后,即本次测试完结。
49.需要说明的是,客户容器接收的测试任务中可以包括测试案例、测试脚本和测试环境,在容器环境的基础上安装与具体测试案例相对应的测试环境,这样,可以在测试过程中灵活安装对应的环境,而不需要重新制作镜像,实现了测试案例和测试环境镜相剥离,即使对测试过程进行修改也不会影响镜像,保障了镜像的稳定性。
50.一示例中,如图4所示,上述步骤s102中还包括如下步骤:
51.s401:利用该服务容器实时监听该客户容器是否发送指定信号,该指定信号用于请求接收下一个测试任务;
52.s402:在接收到该指定信号的情况下,确定该客户容器处于空闲状态。在实际执行过程中,服务容器可以监听客户容器每隔预设时间就发送的状态信号,也可以监听客户容器执行完某特定动作后主动发送的信号,比如客户容器每执行结束一个测试任务后给服务容器发送表征测试任务执行完毕,可以接收下一个任务的信号(如next信号),该信号标志着客户容器已经空闲,可以接收下一个任务;服务容器收到next信号后,通过分析该信号确定客户容器已经空闲,会继续发送下一个测试任务,直到任务列表中所有的测试任务都下发结束。通过该方式,动态监听每个docker容器的空闲/忙情况,如果出现空闲的客户容器,就会动态分发一个执行任务,减少了不必要的任务执行前的等待时间,从而大大缩短了整体自动化耗时,提高了测试效率。
53.一示例中,在监听到多个客户容器处于空闲状态的情况下,将多个测试任务并行分发给该多个客户容器。具体地,如果监听到多个客户容器处于空闲状态,就按照任务列表,并行地将多个测试任务分发给上述多个客户容器,这种并行分发的方式可以大大节省分发任务过程中的耗时,提升整体测试效率。
54.一示例中,服务容器在分发完测试列表中的测试案例后,会向客户容器发送测试完结信号(如finish信号),在收到该信号后,客户容器会把自己执行的所有测试任务的结果进行汇总,然后退出进程。而服务容器在判断收到所有客户容器汇总的测试结果后,会把各个客户容器的测试结果按照预定的格式整理、分析后生成测试报告,以邮件的方式发送,然后再退出进程。该示例中自动收集各客户容器的测试结果,全面收集测试过程中的所有
数据后自动化生成规范、标准的测试报告,方便相关人员第一时间了解测试的结果。
55.s103:确定该服务容器和客户容器中符合预设条件的容器,发送命令触发该符合预设条件的容器执行更新。
56.一示例中,在该服务容器和客户容器中,将测试任务执行完成的容器确定为符合预设条件的容器,或者将在执行测试任务的过程中检测到更新指示的容器确定为符合预设条件的容器。因为内容分发网络缓存系统会不停的功能迭代,容器中对应的服务也要及时更新对应的二进制,因此,需要在测试的过程中灵活检测容器是否需要更新。具体地,当服务容器或客户容器刚刚结束一个测试任务的执行后,即可进行更新;或者,在执行测试任务的过程中,该测试任务对应的执行脚本中有更新指示,即可立即进行更新。利用该方法,可以实时、方便、快速地对容器进行更新,而不需要重新构建容器,既满足了测试要求又保证了容器的稳定性。
57.一示例中,与该符合预设条件的容器建立自动化交互套件的会话,通过该会话发送壳命令至该符合预设条件的容器使其执行更新。具体地,在确定要对容器进行更新的情况下,与每个要更新的容器建立会话,通过该会话发送壳命令至该每个容器,以执行更新,具体如图5所示,采用expect加壳命令(shell)的方式实现了一键自动化更新,外层循环遍历所有容器名字,依次对每个容器启动利用expect的自动交互式任务通信语言(spawn)编写的命令,从而把壳命令传递到各个容器内部,然后执行壳命令,最终实现一键完成所有容器的更新,采用该更新方式可以灵活对容器进行实时的自动化更新,不用人为监控或认为操作更新,大大提升了测试效率。
58.本公开通过映射获得所需的目标资源并构建容器镜像,实现了多容器共享一份源站目标资源,有效减小了容器体积;采用服务容器和客户容器的主从模式,实现了多任务动态分发、可以并行执行测试任务;采用expect+shell的方式实现了一键自动化更新;本方案实现了自动化测试案例和测试环境镜相剥离,测试案例的修改不会影响镜像,保障了docker镜像的稳定性,不需要频繁制作镜像,大大提高了整体测试效率。
59.如图6所示,本公开涉及一种基于容器技术的测试装置,该装置具体包括:
60.启动模块601,用于将远程的存储空间映射到本地,从该存储空间获取目标资源并构建容器镜像,基于该容器镜像启动服务容器和客户容器;
61.执行模块602,用于利用该服务容器实时监听该客户容器的状态,在监听到该客户容器处于空闲状态的情况下,向该空闲状态的客户容器分发测试任务;
62.更新模块603,用于确定该服务容器和客户容器中符合预设条件的容器,发送命令触发该符合预设条件的容器执行更新。
63.一示例中,上述测试装置中的执行模块,可以用于:
64.利用该服务容器实时监听该客户容器是否发送指定信号,该指定信号用于请求接收下一个测试任务;
65.在接收到该指定信号的情况下,确定该客户容器处于空闲状态。
66.一示例中,上述测试装置中的执行模块,可以用于:
67.在监听到多个客户容器处于空闲状态的情况下,将多个测试任务并行分发给该多个客户容器。
68.一示例中,上述测试装置中的更新模块,可以用于:
69.在该服务容器和客户容器中,将测试任务执行完成的容器确定为符合预设条件的容器,或者将在执行测试任务的过程中检测到更新指示的容器确定为符合预设条件的容器。
70.一示例中,上述测试装置中的更新模块,可以用于:
71.与该符合预设条件的容器建立自动化交互套件的会话,通过该会话发送壳命令至该符合预设条件的容器使其执行更新。
72.一示例中,上述测试装置汇总的目标资源包括网络缓存系统、代理服务器和自动化测试脚本。
73.本公开实施例各装置中的各模块的功能可以参见上述方法实施例中的对应描述,在此不再赘述。
74.采用上述装置,启动模块通过映射获得所需的目标资源并构建容器镜像,实现了多容器共享一份源站目标资源,有效减小了容器体积;执行模块采用服务容器和客户容器的主从模式,实现了多任务动态分发、可以并行执行测试任务;更新模块对符合条件的容器执行自动化更新,可以及时更新容器的二进制文件。
75.根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
76.图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或要求的本公开的实现。
77.如图7所示,电子设备700包括计算单元701,其可以根据存储在只读存储器(rom)702中的计算机程序或者从存储单元708加载到随机访问存储器(ram)703中的计算机程序来执行各种适当的动作和处理。在ram 603中,还可存储电子设备700操作所需的各种程序和数据。计算单元701、rom 702以及ram 703通过总线704彼此相连。输入输出(i/o)接口705也连接至总线704。
78.电子设备700中的多个部件连接至i/o接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
79.计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理,例如构建镜像、启动镜像、并行分发测试任务等。例如,在一些实施例中,基于容器技术的测试方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由rom 702和/或通信单元709而被载入和/或安装到电子设备700上。当计算机程序加载到ram 703并由计算单元701执行时,可
以执行上文描述的基于容器技术的测试方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行基于容器技术的测试方法。
80.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
81.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
82.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd

rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
83.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入来接收来自用户的输入。
84.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
85.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端

服务器关系的计
算机程序来产生客户端和服务器的关系。
86.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
87.上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!