代码测试方法和电子设备与流程

文档序号:31174816发布日期:2022-08-17 09:58阅读:53来源:国知局
代码测试方法和电子设备与流程

1.本技术涉及互联网技术领域,具体而言,涉及代码测试方法和电子设备。


背景技术:

2.在应用程序开发过程中,通常需要对应用程序的代码进行测试,以确定是否存在漏洞、应用程序的稳定性等,因此需要提供针对代码进行测试的解决方案。


技术实现要素:

3.本技术实施例的目的在于提供代码测试方法和电子设备,用于针对应用程序的代码进行测试。
4.本技术实施例第一方面提供了一种代码测试方法,所述方法包括:
5.获取目标容器镜像,其中,该目标容器镜像利用模板生成;
6.通过dockerfile中的from指令将所述目标容器镜像指定为基础镜像;
7.根据所述模板的结构,通过dockerfile中的add指令将待测试代码添加至所述基础镜像的预设位置;
8.根据添加待测试代码后的基础镜像生成新容器镜像,以用于通过所述新容器镜像的运行,对所述待测试代码进行测试。
9.于一实施例中,所述方法还包括:将所述新容器镜像存储至容器镜像仓库habor。
10.于一实施例中,所述方法还包括:
11.通过docker-compose的方式,部署所述容器镜像仓库habor;以及,
12.在所述容器镜像仓库habor创建第一使用账户和代码测试项目,并设置所述第一使用账户对所述代码测试项目的权限。
13.于一实施例中,所述方法还包括:从代码仓库gitlab获取所述待测试代码。
14.于一实施例中,所述方法还包括:
15.利用容器部署所述代码仓库gitlab;
16.在所述代码仓库gitlab创建第二使用账户和应用程序开发项目,并设置所述第二使用账户对所述应用程序开发项目的权限;以及,
17.开启所述代码仓库gitlab的web hook。
18.于一实施例中,所述方法还包括:通过心跳检测的方式,监控所述代码仓库gitlab的运行状态。
19.于一实施例中,所述方法还包括:
20.在持续集成工具jenkins中所设置的定时任务被触发的情况下,通过运行所述新容器镜像对所述待测试代码进行测试。
21.于一实施例中,在测试完成后,生成测试报告。
22.于一实施例中,根据添加待测试代码后的基础镜像生成新容器镜像,具体包括:
23.通过dockerfile中的cmd指令,将添加待测试代码后的基础镜像指向main.py文
件;
24.利用docker build-t指令将添加待测试代码后的基础镜像,打包生成所述新容器镜像
25.本技术实施例第二方面提供了一种电子设备,包括:
26.处理器;
27.用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行本技术实施例第一方面任意一项所述的方法。
28.采用本技术实施例所提供的代码测试方法,包括获取目标容器镜像,然后通过dockerfile中的from指令将该目标容器镜像指定为基础镜像,并根据用于生成该目标容器镜像的模板的结构,通过dockerfile中的add指令将待测试代码添加至该基础镜像的预设位置,然后根据添加待测试代码后的基础镜像生成新容器镜像,从而能够通过新容器镜像的运行,对待测试代码进行测试。
附图说明
29.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
30.图1为本技术一实施例提供的代码测试方法的具体流程示意图;
31.图2为本技术一实施例提供的代码测试装置的具体结构示意图;
32.图3为本技术一实施例提供的电子设备的结构示意图。
具体实施方式
33.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。在本技术的描述中,诸如“第一”、“第二”、“第三”等术语仅用于区分描述,而不能理解为指示或暗示相对重要性或先后顺序。
34.如前所述,在应用程序开发过程中,通常需要对应用程序的代码进行测试,以确定是否存在漏洞、应用程序的稳定性等,因此需要提供针对代码进行测试的解决方案。
35.基于此,本技术实施例提供一种代码测试方法,能够用于对代码进行测试。如图1所示为该方法的具体流程示意图,该方法包括如下步骤:
36.步骤s11:获取目标容器镜像,其中,该目标容器镜像利用模板生成。
37.在实际应用中,可以预先在电子设备(该电子设备可以作为客户端或服务器,从而执行本技术的方法,以实现对代码进行测试。)中部署容器镜像仓库habor,该容器镜像仓库habor能够用于存储容器镜像。
38.其中,容器镜像仓库habor是以registry为基础进行二次开发的镜像仓库,该registry为docker官方所提供的,用于搭建私有仓库的镜像服务。
39.对于在电子设备中部署容器镜像仓库habor的具体方式,可以是通过docker-compose的方式,部署该容器镜像仓库habor,比如可以先在电子设备安装docker-compose,然后对docker-compose进行文件授权,然后下载容器镜像仓库habor的安装文件,并通过运
行该安装文件来部署容器镜像仓库habor。
40.另外,在部署容器镜像仓库habor之后,还可以进行相关的配置,比如在该容器镜像仓库habor创建第一使用账户和代码测试项目,并设置该第一使用账户对代码测试项目的权限。这样,测试人员能够通过该第一使用账户进行登录,并根据对应的权限对该代码测试项目进行处理。
41.对于步骤s11获取目标容器镜像的具体方式,可以是从容器镜像仓库habor中获取该目标容器镜像。比如,针对某个代码测试项目而言,容器镜像仓库habor中通常会存储多个不同版本的容器镜像,可以将任意一个容器镜像作为该目标容器镜像,还可以将某个指定的容器镜像作为该目标容器镜像,比如可以将该代码测试项目中最新版本的容器镜像,作为该目标容器镜像。
42.需要说明的是,步骤s11中的目标容器镜像利用模板生成,比如通过在模板中添加相应的配置参数,进而能够用于生成该目标容器镜像。
43.于一实施例中,针对某个代码测试项目,可以在模板中添加相应的配置参数,进而生成容器镜像,然后在代码测试过程中,通过对配置参数进行不断地调试,能够生成新版本的容器镜像,从而使容器镜像仓库habor中通常会存储多个不同版本的容器镜像,此时可以将最新版本的容器镜像作为目标容器镜像。
44.步骤s12:通过dockerfile中的from指令指定目标容器镜像为基础镜像。
45.步骤s13:根据该模板的结构,通过dockerfile中的add指令将待测试代码添加至基础镜像的预设位置。
46.这里可以对上述的步骤s12和步骤s13进行说明,在实际应用中,该待测试代码可以从代码仓库gitlab获取得到。其中,代码仓库gitlab是使用mit许可证的,基于网络的git仓库管理工具,且具有wiki和issue跟踪功能。该代码仓库gitlab能够用于存储应用程序的代码,比如可以将该待测试代码预先存储与该代码仓库gitlab,进而在需要是,可以从代码仓库gitlab中获取该待测试代码。
47.容器镜像通常由多层镜像构成,包括bootfs层的镜像、基础镜像、jdk层的镜像、tomcat层的镜像、container层的镜像等,其中,bootfs层的镜像包含操作系统上的常见目录结构以及一些基本的文件和命令。
48.dockerfile是一个文本文件,该文本文件包含了多条的指令(instruction),这些指令中包括用于构建一层镜像的指令。比如,dockerfile中的指令包括from指令、add指令、run指令等,其中,from指令能够用于构建基础镜像,比如利用from指令能够指定某个容器镜像为基础镜像;add指令能够用于向基础镜像(或其它层的镜像)中添加本地文件。
49.当然,还可以进一步添加代码测试所需的基础环境,包括python、自动化测试相关第三方依赖库、谷歌浏览器driver、allure客户端。
50.因此,对于步骤s12的具体实现方式,可以通过dockerfile中的from指令指定目标容器镜像为基础镜像,比如from《image》,能够用于指定目标容器镜像《image》为基础镜像。
51.在指定基础镜像之后,可以进一步通过dockerfile中的add指令将待测试代码添加至基础镜像,在添加待测试代码的过程中,为了确定待测试代码所添加的位置,需要结合模板(用于生成该目标容器镜像的模板)的结构,从而根据该模板的结构,利用add指令将待测试代码添加至基础镜像的预设位置。
52.步骤s14:根据添加待测试代码后的基础镜像生成新容器镜像。
53.在基础镜像中添加待测试代码之后,可以根据添加待测试代码后的基础镜像生成新容器镜像,比如在生成新容器镜像的过程中,可以先通过dockerfile中的cmd指令,将添加待测试代码后的基础镜像指向main.py文件,从而使后续该新容器镜像运行时,能够执行该main.py文件;然后,利用docker build-t指令,将添加待测试代码后的基础镜像打包生成新容器镜像。
54.在生成新容器镜像之后,可以将该新容器镜像存储至容器镜像仓库habor,比如,可以利用docker push指令,将该新容器镜像推送至容器镜像仓库habor,进而存于与该容器镜像仓库habor中。
55.当然,在生成新容器镜像之后,还可以通过运行该新容器镜像,从而对待测试代码进行测试,对于运行该新容器镜像的具体方式,可以是在定时任务被触发的情况下,根据该定时任务自动运行该新容器镜像,也可以有技术人员通过人工操作的方式,运行该新容器镜像。
56.比如,还可以在电子设备上部署持续集成工具jenkins,其中,该持续集成工具jenkins是基于java所开发的一种持续集成工具,能够用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
57.然后,在持续集成工具jenkins中设置的定时任务,并将该定时任务指向该新容器镜像,从而在持续集成工具jenkins中所设置的定时任务被触发的情况下,能够运行该新容器镜像,并通过运行新容器镜像来对待测试代码进行测试。其中,在持续集成工具jenkins中设置的定时任务的具体方式可以是,根据代码测试项目的具体要求,可以将空闲时间,比如每日晚上12点、休息日等,设置为定时任务的执行时间,从而在该空闲时间时,定时任务被触,并通过运行该新容器镜像来对待测试代码进行测试。
58.在实际应用中,在电子设备上部署持续集成工具jenkins之后,也可以进行相关的配置,比如,在持续集成工具jenkins中创建第三使用账户,供相关测试人员进行使用。当然,还可以进一步在持续集成工具jenkins中安装插件,包括dingtalk(用于快捷推送钉钉消息)、email extension(用于发送邮箱报告)、publish over ssh(用于使用和管理ssh远程连接服务器)、allure jenkins plugin(用于生成自动化测试报告)、gitlab hook plugin(用于对接gitlab网络钩子)和gitlab plugin(使jenkins支持gitlab接入)等。
59.还可以针对持续集成工具jenkins中进行集成配置,包括jenkins安全访问配置、对接allure配置、对接gitlab配置、对接gitlab web hook配置、jenkins环境变量配置、对接钉钉机器人配置、邮箱推送配置等。
60.在持续集成工具jenkins完成上述配置后,还可以进一步设置多个任务,一个任务可以是对接代码仓库gitlab中web hook的任务,用于当代码仓库gitlab自动化测试项目的主分支发生变动时,通过触发web hook的功能,推送消息给持续集成工具jenkins,进而使持续集成工具jenkins执行本技术实施例所提供的代码测试方法,包括从容器镜像仓库harbor获取目标容器镜像,然后通过dockerfile中的from指令指定目标容器镜像为基础镜像,根据模板的结构,通过dockerfile中的add指令将待测试代码添加至基础镜像的预设位置,根据添加待测试代码后的基础镜像生成新容器镜像。
61.当然,还可以在持续集成工具jenkins中设置,用于打包备份jenkins和gitlab镜
像的定时任务,具体来说,通过docker commit指定(指定格式可以为:docker commit[容器名称][新镜像名称])从而将持续集成工具jenkins中的配置参数、以及代码仓库gitlab中的代码通过容器镜像进行备份。这样在持续集成工具jenkins、代码仓库gitlab出现故障时,能够通过所备份的容器镜像进行恢复。另外,对于所备份的容器镜像,还可以上传至容器镜像仓库harbor中进行存储,在容器镜像仓库habor中,可以选择push-based模式,源资源过滤器在的名称为“项目名/**”,资源选择默认的image,并填写目的registry的地址以及目的namespace和触发模式。
[0062]
需要进一步说明的是,上述通过新容器镜像来对待测试代码进行测试,在测试完成之后,还可以生成测试报告。并且,通过预先进行配置,可以使测试完成之后,使用allure插件生成测试报告,然后由持续集成工具jenkins的allure插件指定生成的测试报告文件路径,自动识别后会自动生成链接。然后,利用诸如dingtalk、email extension等插件发送该测试报告。其中,对于dingtalk、email extension发送消息的具体格式,可以在相应插件中进行设置。
[0063]
采用本技术实施例所提供的代码测试方法,包括获取目标容器镜像,然后通过dockerfile中的from指令将该目标容器镜像指定为基础镜像,并根据用于生成该目标容器镜像的模板的结构,通过dockerfile中的add指令将待测试代码添加至该基础镜像的预设位置,然后根据添加待测试代码后的基础镜像生成新容器镜像,从而能够通过新容器镜像的运行,对待测试代码进行测试。
[0064]
在实际应用中,本技术实施例所提供的方法还可以包括:在电子设备上利用容器部署代码仓库gitlab。
[0065]
另外,在部署代码仓库gitlab之后,还可以进行相关的配置,比如在代码仓库gitlab中创建第二使用账户和应用程序开发项目,并设置第二使用账户对应用程序开发项目的权限,并设置该第二使用账户对应用程序开发项目的权限。这样,开发人员能够通过该第二使用账户进行登录,并根据对应的权限对该应用程序开发项目进行处理,包括对该应用程序开发项目下的代码进行人工审核、申请合并、添加审核意见等。
[0066]
比如,该应用程序开发项目还可以包括多个分支,并且在该代码仓库gitlab还创建了多个第二使用账户,可以分别设置各个第二使用账户对该应用程序开发项目的权限,比如某个第二使用账户能够在一个或多个分支上传代码、申请合并,或某个第二使用账户能够对所上传的代码进行人工审核、添加审核意见等。
[0067]
于一实施例中,开发人员通过第二使用账户登录代码仓库gitlab,并根据权限在应用程序开发项目对应分值上传代码,然后发生合并请求(用于申请合并)给审核人员,最后等待代码审核人员审核代码。审核人员通过自己的第二使用账户登录代码仓库gitlab,根据相应的权限能够接收到该合并请求,并查看所负责的应用程序开发项目,然后可以针对代码进行人工审核,包括审核代码的规范性、语法的准确性等,在人工审核通过后,还可以进行测试执行,若均通过,则可以将该分支的代码合并至该应用程序开发项目的主分支,如果人工审核或测试执行不通过,则可以针对需要修改之处添加审核意见,并驳回合并请求。
[0068]
需要说明的是,在部署代码仓库gitlab,并进行相关的配置之后,还可以开启代码仓库gitlab的web hook(网络钩子)功能,该web hook能够触发持续集成工具jenkins中,用
于打包备份jenkins和gitlab镜像的定时任务。实现原理是代码仓库gitlab在项目中开启web hook功能,并且在持续集成工具jenkins中设置用于打包备份jenkins和gitlab镜像的定时任务,在触发器中选择高级设置,后选择“按正则表达式过滤分支(filter branches by regex)”,接着在target branch regex中填入“.*master”,最后点击右下角的“generate”生成secret token,用于与持续集成工具jenkins中的web hook连接,代码仓库gitlab在项目设置中选择“intergrations”,然后填写url和secret token信息,勾选push event,最后取消最下面的ssl验证,点击“add webhook”并点击test测试,返回http 200表示连接完成。当设置完成之后,只要当代码仓库gitlab中,应用程序开发项目的主分支发生变化是,会触发web hook功能,向持续集成工具jenkins发送通知。
[0069]
需要进一步说明的是,在实际应用中,为了确保容器镜像仓库habor、持续集成工具jenkins、代码仓库gitlab的正常运行,通常还可以通过心跳检测的方式,监控容器镜像仓库habor、持续集成工具jenkins和代码仓库gitlab的运行状态,其中,该运行状态可以包括正常运行和故障。
[0070]
比如,可以在电子设备上部署监控服务liveness monitor,从而通过liveness monitor来监控容器镜像仓库habor、持续集成工具jenkins和代码仓库gitlab的运行状态。
[0071]
其中,liveness monitor具体的部署方式可以是,将服务文件livensee-monitor.service放至系统服务目录(/lib/systemd/system/)下,然后将配置文件livensee-monitor.conf放至工作目录下(/etc/liveness-monitor/)下,然后修改配置文件,设置所需监控的容器镜像仓库habor、持续集成工具jenkins、代码仓库gitlab以及管理员邮箱地址,然后命令ln-s链接livensee-monitor.service至/etc/systemd/system/multi-user.target.wants/livensee-monitor.service中,达到开机服务自启的效果,最后#systemctl start livensee-monitor.service启动liveness monitor。
[0072]
liveness monitor在监控过程中,可以通过心跳检测的方式判断三个受监控对象是否正常运行(没有正常运行时,说明为故障),如果没有正常运行,可以将监控对象进行重启或者重建的方式进行救济处理。
[0073]
其中,通过心跳检测的方式判断某个受监控对象是否正常运行的具体方式可以是:liveness monitor初始定义受监控对象的运行状态为unknown(未知),随后每间隔一个监控周期(比如10秒等),向该受监控对象的api接口发送http请求,以获取对应的服务列表信息,如果该受监控对象返回值是200,则说明该受监控对象的运行状态为health(正常运行),若返回值为非200,或在预设时间段内没有收到返回值,则说明该受监控对象的运行状态为unhealth(故障)。此时,可以将监控对象进行重启或者重建的方式进行救济处理,比如调用电子设备的docker.sock去restart使用持续集成工具jenkins和代码仓库gitlab的容器镜像,并利用该容器镜像实现软重启的效果。软重启后服务状态改为restart,并延迟下一次的健康检测请求至5分钟以后,5分钟以后如果返回值为200,则运行状态为health,如果返回值还是非200,则会触发重建,此时会先删掉容器,并使用最新版镜像运行新的容器,触发后服务状态会改为rebuild,并会发生此次日志至管理员邮箱中。
[0074]
当然,如果是容器镜像仓库habor的运行状态为故障,可以直接进行重建,比如使用docker-compose down&&docker-compose up实现重建。
[0075]
基于与本技术实施例所提供的代码测试方法相同的发明构思,本技术实施例还提
供了一种代码测试装置,对于该装置实施例,如有不清楚之处,可以参考方法实施例的相应内容。如图2所示为该装置20的具体结构示意图,该装置20包括:获取单元201、基础镜像指定单元202、代码添加单元203以及新容器镜像生成单元204,其中:
[0076]
获取单元201,用于获取目标容器镜像,其中,该目标容器镜像利用模板生成;
[0077]
基础镜像指定单元202,用于通过dockerfile中的from指令将所述目标容器镜像指定为基础镜像;
[0078]
代码添加单元203,用于根据所述模板的结构,通过dockerfile中的add指令将待测试代码添加至所述基础镜像的预设位置;
[0079]
新容器镜像生成单元204,用于根据添加待测试代码后的基础镜像生成新容器镜像,以用于通过所述新容器镜像的运行,对所述待测试代码进行测试。
[0080]
采用本技术实施例所提供的装置20,由于该装置20采用与本技术实施例所提供的代码测试方法相同的发明构思,在该代码测试方法能够解决技术问题的前提下,该装置20也能够解决技术问题,这里对此不再赘述。
[0081]
另外,在实际应用中,通过将该装置20与具体硬件设备、云技术等相结合所取得的技术效果,也在本技术的保护范围之内,比如采用分布式集群的方式将该装置20中的不同单元布设于分布式集群中的不同节点中,从而提高效率等;或,将该装置20中的部分单元布设于云端,从而降低成本等。
[0082]
该装置20还可以包括容器镜像存储单元,用于将所述新容器镜像存储至容器镜像仓库habor。
[0083]
该装置20还可以包括容器镜像仓库部署设置单元,用于通过docker-compose的方式,部署所述容器镜像仓库habor;以及,在所述容器镜像仓库habor创建第一使用账户和代码测试项目,并设置所述第一使用账户对所述代码测试项目的权限。
[0084]
该装置20还可以包括待测试代码获取单元,用于从代码仓库gitlab获取所述待测试代码。
[0085]
该装置20还可以包括代码仓库部署设置单元,利用容器部署所述代码仓库gitlab;在所述代码仓库gitlab创建第二使用账户和应用程序开发项目,并设置所述第二使用账户对所述应用程序开发项目的权限;以及,开启所述代码仓库gitlab的web hook。
[0086]
该装置20还可以包括运行状态监控单元,用于通过心跳检测的方式,监控所述代码仓库gitlab的运行状态。
[0087]
该装置20还可以包括代码测试单元,用于在持续集成工具jenkins中所设置的定时任务被触发的情况下,通过运行所述新容器镜像对所述待测试代码进行测试。
[0088]
该装置20还可以包括测试报告生成单元,用于在测试完成后,生成测试报告。
[0089]
在实际应用中,该新容器镜像生成单元204可以具体包括第一子单元和第二子单元,其中:第一子单元,用于通过dockerfile中的cmd指令,将添加待测试代码后的基础镜像指向main.py文件;第二子单元,用于利用docker build-t指令将添加待测试代码后的基础镜像,打包生成所述新容器镜像。
[0090]
如图3所示,本实施例还提供了一种电子设备3,包括:至少一个处理器31和存储器32,图3中以一个处理器为例。处理器31和存储器32可以通过总线30连接,存储器32存储有可被处理器31执行的指令,指令被处理器31执行,以使电子设备3能够实现实本技术实施例
中方法的全部或部分流程。
[0091]
在实际应用中,该电子设备3可以是手机、笔记本电脑、台式电脑或其组成的大型服务器或服务器集群等。
[0092]
本发明实施例还提供了一种存储介质,该存储介质存储有计算机程序,计算机程序可由处理器执行以完成本技术实施例中方法的全部或部分流程。其中,存储介质可为磁盘、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等。存储介质还可以包括上述种类的存储器的组合。
[0093]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1