程序测试方法、装置、可读存储介质和计算机设备与流程

文档序号:15200147发布日期:2018-08-19 10:43阅读:148来源:国知局

本发明涉及计算机技术领域,特别是涉及一种程序测试方法、装置可读存储介质和计算机设备。



背景技术:

一般研发人员完成一程序后,需要进行测试,以便于研发人员尽早发现错误,保证开发产品的质量。

现有技术中,一般通过jenkins结合docker进行部署程序测试环境。研发人员提交程序至集成服务器,例如jenkins服务器,由jenkins服务器进行编译和打包后发送至测试服务器。研发人员利用docker容器可以打包开发的程序以及依赖包至一个可移植的容器中。通过启动docker容器,执测试jenkins服务器发送的待测试程序。

现有的技术中进行程序测试时,程序的源代码的安全性是研发人员考虑的重要因素之一。现有的程序测试通常将一个程序作为一个整体打包发送至测试服务器中,程序的发送和测试过程中,其源代码容易泄露,安全性不高。



技术实现要素:

鉴于上述状况,有必要针对现有技术中程序测试安全较低的问题,提供一种程序测试方法、装置可读存储介质和计算机设备。

本发明实施例提供了一种程序测试方法,所述程序拆分为多个子程序,所述程序测试方法包括:

获取集成服务器发送的多个所述子程序,并将多个所述子程序保存至docker工具配置文件所在的目录下;

分别启动多个所述子程序对应的docker容器,并建立相关联的所述子程序对应的docker容器之间的通信连接。

上述程序测试方法,还包括:

当获取到集成服务器发送的一更新的子程序时,将对应的原子程序替换为所述更新的子程序;

删除所述原子程序对应的docker容器,并建立新docker容器;

启动所述新docker容器和相关docker容器,并建立所述新docker容器与所述相关docker容器之间的通信连接,其中,所述相关docker容器为与所述更新的子程序相关联的子程序所对应的docker容器。

上述程序测试方法,其中,所述删除所述原子程序对应的docker容器的步骤之前还包括:

判断所述原子程序对应的docker容器是否运行;

若否,确定删除所述原子程序对应的docker容器。

上述程序测试方法,其中,所述启动所述新docker容器和相关docker容器的步骤包括:

利用所述相关docker容器获取所述新docker容器的访问地址;

根据所述访问地址,利用所述相关docker容器循环访问所述新docker容器,以查询所述新docker容器是否启动;

当所述相关docker容器判断出所述新docker容器启动时,启动所述相关docker容器。

上述程序测试方法,其中,所述将多个所述子程序保存至docker工具配置文件所在的目录下的步骤包括:

将多个所述子程序以磁盘挂载的方式挂在到所述docker工具配置文件中。

本发明还提供了一种程序测试装置,包括:

获取和存储单元,用于获取集成服务器发送的多个所述子程序,并将多个所述子程序保存至docker工具配置文件所在的目录下;

第一通信建立单元,用于分别启动多个所述子程序对应的docker容器,并建立相关联的所述子程序对应的docker容器之间的通信连接。

上述程序测试装置,还包括:

替换单元,用于当获取到集成服务器发送的一更新的子程序时,将对应的原子程序替换为所述更新的子程序;

容器删除和建立单元,用于删除所述原子程序对应的docker容器,并建立新docker容器;

第二通信建立单元,用于启动所述新docker容器和相关docker容器,并建立所述新docker容器与所述相关docker容器之间的通信连接,其中,所述相关docker容器为与所述更新的子程序相关联的子程序所对应的docker容器。

上述程序测试装置,还包括:

判断单元,用于判断所述原子程序对应的docker容器是否运行;

确定单元,用于当所述原子程序对应的docker容器没有运行,确定删除所述原子程序对应的docker容器。

进一步的第二通信建立单元还用于:

利用所述相关docker容器获取所述新docker容器的访问地址;

根据所述访问地址,利用所述相关docker容器循环访问所述新docker容器,以查询所述新docker容器是否启动;

当所述相关docker容器判断出所述新docker容器启动时,启动所述相关docker容器。

进一步的,获取和存储单元还用于:

将多个所述子程序以磁盘挂载的方式挂在到所述docker工具配置文件中。

本发明实施例还提供了一种可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述方法的步骤。

本发明还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。

本发明实施例通过将待测试的程序拆分为多个子程序进行测试,确保了程序的源代码的安全性。测试服务器在执行程序测试时,首先建立相关联的子程序对应的docker容器之间的通信连接,实现数据共享,以确保程序测试正常进行,保证测试结果的可靠性。

附图说明

图1为本发明第一实施例中的程序测试方法流程图;

图2为本发明第一实施例中程序测试的流程图;

图3为本发明第二实施例中的程序测试方法流程图;

图4为本发明第三实施例中的程序测试装置的结构框图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

请参阅图1,为本发明第一实施例中的程序测试方法,应用于测试服务器,该测试服务器一般为测试人员使用的计算机设备,也是docker容器的宿主机。本实施例通过集成服务器,如jenkins服务器和docker进行部署项目测试环境。研发人员新开发的程序需要进行持续集成时,在测试服务器中构建对应的docker容器,并通过启动对应的docker容器对程序进行测试。本实施例中,为了增强使程序的源代码的安全性,将待测试的程序拆分为多个子程序,每个子程序有其相应的源代码。所述程序测试方法包括步骤s11~s12。

步骤s11,获取集成服务器发送的多个所述子程序,并将多个所述子程序保存至docker工具配置文件所在的目录下。

研发人员将待测试程序分成多个子程序,然后在测试服务器中,针对每个子程序分别建立一个docker容器。其中,docker工具为dockercompose,其配置文件为docker-compose.yaml文件。在docker-compose.yaml中可以定义每个服务,并制定每个服务所依赖的镜像和各镜像运行后生成的容器之间的依赖关系,通过docker-compose.yaml文件,dockercompose完成管理和配置各个子程序对应的docker容器。

如图2所示,研发人员将各个子程序提交到代码库中,集成服务器从代码库中获取各个子程序,进行构建和部署,并将各子程序打包发送至测试服务器。测试服务器接收到各子程序的代码包时,进行解压,并将解压后的子程序保存至docker-compose.yaml文件所在的目录中。

待测试程序一般以编译型语音进行编写的,如c++语言或c语言等。具体实施时,集成服务器在接收到子程序时,对子程序的源代码进行编译,得到编译后的二进制程序,编译后的二进制程序不易破解,可直接打包发送至测试器中,既能保证代码的安全性,也能提高程序测试效率。

步骤s12,分别启动多个所述子程序对应的docker容器,并建立相关联的所述子程序对应的docker容器之间的通信连接。

将一个程序拆分为多个子程序时,各个子程序的运行相互有依赖关系,即某一个子程序的运行依赖一个或多个其他的子程序的数据。研发人员首先要确定各个子程序之间的依赖关系,并根据子程序的依赖关系确定相互关联的docker容器。因此,测试服务器接收到各个子程序时,启动多个所述子程序对应的docker容器并建立相关联的子程序对应的docker容器之间的通信连接,以便于相关联的docker容器之间可进行信息交互。

程序测试时,通过docker-compose.yaml文件启动docker容器,执行程序,用户根据程序执行情况检测程序是否正确。

本实施例通过将待测试的程序拆分为多个子程序进行测试,确保了程序的源代码的安全性。测试服务器在执行程序测试时,首先建立相关联的子程序对应的docker容器之间的通信连接,实现数据共享,以确保程序测试正常进行,保证测试结果的可靠性。

程序进行测试后,研发人员针对测试结果修改和完善程序的源代码。因此程序的测试一般需要持续进行。请参阅图3,为本发明第二实施例中的程序测试方法,本实施例是在第一实施例的基础上进行优化,当任意一所述子程序更新时,所述程序测试方法还包括步骤s21~s23。

步骤s21,当获取到集成服务器发送的一更新的子程序时,将对应的原子程序替换为所述更新的子程序。

当程序的其中一个或多个子程序的源代码更新时,研发人员将更新的子程序提交到代码库中。集成服务器获取更新的子程序进行编译,并将编译后的程序打包发送至测试服务器。测试服务其接收到更新后的子程序时,将docker-compose.yaml文件所在的目录中的旧子程序删除,并解压更新的子程序。

步骤s22,删除所述原子程序对应的docker容器,并建立新docker容器。所述新docker容器为所述更新的子程序对应的docker容器。

当测试服务器接收到一更新的子程序时,判断原子程序对应的docker容器是否在运行。当原子程序对应的docker容器正在运行时,如果只是单单更新容器的数据,在测试过程中,会发生程序更新不到位,影响程序测试结果的准确性。因此,当测试服务器检测到对应的docker容器正在运行,则停止原子程序对应的docker容器,并删除,即将原docker容器删除。然后,再建立一个与更新的子程序代码对应的新docker容器,用来对更新的子程序进行测试。

步骤s23,启动所述新docker容器和相关docker容器,并建立所述新docker容器与所述相关docker容器之间的通信连接。其中,所述相关docker容器为与所述更新的子程序相关联的子程序所对应的docker容器。

当原docker容器删除后,原docker容器和与之其相关联的docker容器之间的通信连接也不存在了。而建立的新docker容器与相关docker容器之间没有建立通信连接,无法进行信息交互。因此,需要重新建立新docker容器与相关docker容器之间的通信连接。

进一步的,在步骤22之前,还可以判断原子程序对应的docker容器是否运行,当原子程序对应的docker容器正在运行时,执行步骤s22。当原子程序对应的docker容器没有运行,即说明原子程序对应的docker容器没有启动或启动失败,导致这种情况的原因可能是程序错误,研发人员对程序进行更新。因此,测试服务器接收到更新的子程序时,只需要相应的更新原docker容器中的数据,并重新启动原docker容器,以建立原docker容器与相关docker容器之间的通信连接。因此无需删除原容器,提高测试效率。

启动新docker容器和相关docker容器可通过在相关docker容器中挂载预先写好的脚本程序,相关docker容器初始化执行该脚本,通过等待新docker容器正常启动后,再启动相关docker容器。具体实施过程如下:

利用相关docker容器获取新docker容器的访问地址;

根据访问地址,利用相关docker容器循环访问新docker容器,以查询新docker容器是否启动;

当相关docker容器判断出新docker容器启动时,启动相关docker容器。

相关docker容器循环访问新docker容器,以查询新docker容器是否启动,当查询到新docker容器启动时,启动相关docker容器。

对于存在依赖关系的多个docker容器,由于更新其中一docker容器,会出现与其相互依赖的docker容器出现通信中断的现象。因此通过循环访问机制,确保新的第一docker容器与第二docker容器一直时处于通信连接状态。可以理解的,所有相关联的docker容器均可采用该机制建立通信连接。

传统方式在测试环境部署时,待测试程序跟镜像统一打包,若遇到不同程序,但依赖的运行环境一样时,就会导致依赖环境对应的基础镜像被重复复制,造成测试服务器空间的浪费。基于这一问题,本实施例中,将子程序以磁盘挂载的方式挂在到docker-compose.yaml文件中。优选的,在docker-compose.yaml文件中,通过利用volumes,将各子程序挂载到容器进行运行。这样在程序测试时,无需每次更新子程序时均更新基础镜像,提高程序测试效率,且相同运行环境的子程序可共有一个基础镜像,避免测试服务器的存储空间的浪费。

请参阅图4,为本发明第三实施例中的程序测试装置,包括:

获取和存储单元100,用于获取集成服务器发送的多个所述子程序,并将多个所述子程序保存至docker工具配置文件所在的目录下;

第一通信建立单元200,用于分别启动多个所述子程序对应的docker容器,并建立相关联的所述子程序对应的docker容器之间的通信连接。

进一步的,该程序测试装置还包括:

替换单元300,用于当获取到集成服务器发送的一更新的子程序时,将对应的原子程序替换为所述更新的子程序;

容器删除和建立单元400,用于删除所述原子程序对应的docker容器,并建立新docker容器;

第二通信建立单元500,用于启动所述新docker容器和相关docker容器,并建立所述新docker容器与所述相关docker容器之间的通信连接,其中,所述相关docker容器为与所述更新的子程序相关联的子程序所对应的docker容器。

进一步的,该程序测试装置还包括:

判断单元600,用于判断所述原子程序对应的docker容器是否运行;

确定单元700,用于当所述原子程序对应的docker容器没有运行,确定删除所述原子程序对应的docker容器。

进一步的第二通信建立单元500还用于:

利用所述相关docker容器获取所述新docker容器的访问地址;

根据所述访问地址,利用所述相关docker容器循环访问所述新docker容器,以查询所述新docker容器是否启动;

当所述相关docker容器判断出所述新docker容器启动时,启动所述相关docker容器。

进一步的,获取和存储单元100还用于:

将多个所述子程序以磁盘挂载的方式挂在到所述docker工具配置文件中。

本实施例的装置,可以用于执行图1和图3任一所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本发明还提供了一种可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述实施例1至2中任意一个的方法的步骤。

本发明还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例1至2中任意一个的方法的步骤。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。

计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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