测试方法、装置、可读介质及电子设备与流程

文档序号:31053721发布日期:2022-08-06 09:50阅读:120来源:国知局
测试方法、装置、可读介质及电子设备与流程

1.本公开涉及docker容器技术领域,具体地,涉及一种测试方法、装置、可读介质及电子设备。


背景技术:

2.docker是一个开源的应用容器引擎,旨在提供一种应用的自动化部署解决方案,能够让开发者打包他们的应用及依赖包到一个可移植的容器中,容器即为轻量级虚拟机。现有技术中,在利用docker技术进行测试时,通常是把测试代码及依赖包打包封装到一个容器中。因此,使用现有技术提供的方案进行代码测试存在以下问题:在创建容器后,无法修改测试代码,无法对测试代码进行调试,使用不便;当需要测试新的测试代码,需要将新的测试代码打包,构建新的容器,费时费力。


技术实现要素:

3.本公开的目的是提供一种测试方法、装置、可读介质及电子设备,已解决在创建容器后,无法修改测试代码,无法对测试代码进行调试,使用不便;及当需要测试新的测试代码,需要将新的测试代码打包,构建新的容器,费时费力的问题。
4.为了实现上述目的,本公开提供一种测试方法,所述方法包括:
5.构建基础镜像,所述基础镜像包括容器运行的基础环境,所述基础环境包括宿主机与所述容器进行映射的端口号和目录,所述目录包括测试目录和配置目录,所述测试目录用于存储测试文件,所述配置目录用于存储所述容器的配置文件;
6.将测试文件拷贝至所述宿主机的所述测试目录下,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的目录与所述容器的目录进行映射,并启动所述容器进行测试,得到所述测试文件的测试结果;
7.其中,所述将所述宿主机的目录与所述容器的目录进行映射的步骤包括:将所述宿主机的测试目录与所述容器的测试目录进行映射,将所述宿主机的配置目录与所述容器的配置目录进行映射。
8.可选地,所述测试文件有至少两个,所述基础镜像包括至少两个所述容器运行的基础环境,每个所述容器与所述测试文件一一对应,所述基础环境包括所述宿主机的与每个所述容器进行映射的端口号和目录;
9.所述将测试文件拷贝至所述宿主机的所述测试目录下,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的测试目录与所述容器的测试目录进行映射,并启动所述容器进行测试,得到所述测试文件的测试结果的步骤包括:将每个所述测试文件拷贝至所述宿主机的目标测试目录下,将所述宿主机的每个端口号与每个所述容器的端口号进行映射,将所述宿主机的每个目录与每个所述容器的目录进行映射,并启动与每个所述测试文件对应的容器进行测试,得到每个所述测试文件的测试结果,其中,所述目标测试目录为每个所述测试文件对应的容器映射到所述宿主机的测试目录;
10.其中,所述将所述宿主机的每个目录与每个所述容器的目录进行映射的步骤包括:将所述宿主机的每个测试目录与每个所述容器的测试目录进行映射,将所述宿主机的每个配置目录与每个所述容器的配置目录进行映射。
11.可选地,所述配置文件包括:所述容器对应的宿主机的端口号与容器域名的映射关系,所述容器域名为访问所述容器所用的域名;所述方法还包括:
12.将所述容器域名代理至所述宿主机的ip地址,以使测试人员通过所述容器域名能访问所述宿主机。
13.可选地,所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录;
14.所述将所述宿主机的目录与所述容器的目录进行映射的步骤还包括:将所述宿主机的日志目录与所述容器的日志目录进行映射。
15.本公开实施例还提供一种测试装置,所述测试装置包括:
16.镜像构建模块,用于构建基础镜像,所述基础镜像包括容器运行的基础环境,所述基础环境包括宿主机与所述容器进行映射的端口号和目录,所述目录包括测试目录和配置目录,所述测试目录用于存储测试文件,所述配置目录用于存储所述容器的配置文件;
17.容器测试模块,用于将测试文件拷贝至所述宿主机的所述测试目录下,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的目录与所述容器的目录进行映射,并启动所述容器进行测试,得到所述测试文件的测试结果;
18.其中,所述将所述宿主机的目录与所述容器的目录进行映射的步骤包括:将所述宿主机的测试目录与所述容器的测试目录进行映射,将所述宿主机的配置目录与所述容器的配置目录进行映射。
19.可选地,所述测试文件有至少两个,所述基础镜像包括至少两个所述容器运行的基础环境,每个所述容器与所述测试文件一一对应,所述基础环境包括所述宿主机的与每个所述容器进行映射的端口号和目录;
20.所述容器测试模块,还用于将每个所述测试文件拷贝至所述宿主机的目标测试目录下,将所述宿主机的每个端口号与每个所述容器的端口号进行映射,将所述宿主机的每个目录与每个所述容器的目录进行映射,并启动与每个所述测试文件对应的容器进行测试,得到每个所述测试文件的测试结果,其中,所述目标测试目录为每个所述测试文件对应的容器映射到所述宿主机的测试目录;
21.其中,所述将所述宿主机的每个目录与每个所述容器的目录进行映射包括:将所述宿主机的每个测试目录与每个所述容器的测试目录进行映射,将所述宿主机的每个配置目录与每个所述容器的配置目录进行映射。
22.可选地,所述配置文件包括:所述容器对应的宿主机的端口号与容器域名的映射关系,所述容器域名为访问所述容器所用的域名;所述测试装置还包括:
23.代理模块,用于将所述容器域名代理至所述宿主机的ip地址,以使测试人员通过所述容器域名能访问所述宿主机。
24.可选地,所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录;
25.所述将所述宿主机的目录与所述容器的目录进行映射还包括:将所述宿主机的日
志目录与所述容器的日志目录进行映射。
26.本公开实施例还提供一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。
27.本公开实施例还提供一种电子设备,包括:
28.存储器,其上存储有计算机程序;
29.处理器,用于执行所述存储器中的所述计算机程序,以实现上述方法的步骤。
30.通过上述技术方案,在构建基础镜像时,部署了宿主机的与容器进行映射的端口号和目录,该目录包括用于存放测试文件的测试目录和用于存储容器配置文件的配置目录。在需要修改测试代码或者需要测试新的测试代码时,可以直接修改宿主机的测试目录下的测试代码,或在宿主机的测试目录下用新的测试代码替代原来的测试代码,即可实现更改容器运行的测试代码。因此,通过上述技术方案,实现了对测试代码进行调试,及对新的测试代码进行测试而不需要重新构建容器。从而,通过上述技术方案进行测试,使用方便,省时省力。
31.本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
32.附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
33.图1是本公开实施例提供的一种测试方法的流程图。
34.图2是本公开实施例提供的一种宿主机的目录部署结构图。
35.图3是本公开实施例提供的一种测试装置的方框示意图。
36.图4是本公开实施例提供的一种电子设备的方框示意图。
具体实施方式
37.以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
38.需要说明的是,本公开中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
39.本公开实施例提供一种测试方法。图1是根据本公开一实施例示出的一种测试方法的流程图。如图1所示,该方法包括以下步骤:
40.步骤s10,构建基础镜像,所述基础镜像包括容器运行的基础环境,所述基础环境包括宿主机与所述容器进行映射的端口号和目录,所述目录包括测试目录和配置目录,所述测试目录用于存储测试文件,所述配置目录用于存储所述容器的配置文件。
41.具体实施时,构建容器(测试实例)运行的基础镜像,如imagex,并规划部署根目录,例如:/home/work/containers。约定宿主机目录(用于与容器目录进行映射),例如:/home/work/containers/om2.tyqf.com/8001。其中,8001是该容器映射到宿主机的端口号。宿主机目录包括测试目录和宿主机配置目录。其中,宿主机的测试目录用于与容器的测试目录进行映射,用于存储测试文件(静态资源),例如为/home/work/containers/
om2.tyqf.com/8001/web。类似地,宿主机的配置目录用于与容器的配置目录进行映射,用于存储容器的配置文件,如容器内部nginx配置等,例如为/home/work/containers/om2.tyqf.com/8001/conf。宿主机的内部结构可以如图2所示。
42.步骤s20,将测试文件拷贝至所述宿主机的所述测试目录下,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的目录与所述容器的目录进行映射,并启动所述容器进行测试,得到所述测试文件的测试结果。
43.其中,所述将所述宿主机的目录与所述容器的目录进行映射的步骤包括:将所述宿主机的测试目录与所述容器的测试目录进行映射,将所述宿主机的配置目录与所述容器的配置目录进行映射。
44.为了更清楚的说明步骤s20,沿用步骤s10中的举例,步骤s20即为:将测试文件(测试实例资源)部署到宿主机的测试目录(/home/work/containers/om2.tyqf.com/8001/web)下;采用如下代码,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的测试目录与所述容器的测试目录进行映射,将所述宿主机的配置目录与所述容器的配置目录进行映射,并启动容器进行测试,得到所述测试文件的测试结果。
45.docker run-d
‑‑
name om-tyqf-com-8001-p 8001:80
[0046]-v/home/work/containers/om2.tyqf.com/conf:/home/jindi/tyfw/nginx/default.d
[0047]-v/home/work/containers/om2.tyqf.com/8001/web:/home/jindi/data/wwwimagex:latest
[0048]
通过上述技术方案,在构建基础镜像时,部署了宿主机的与容器进行映射的端口号和目录,该目录包括用于存放测试文件的测试目录和用于存储容器配置文件的配置目录。在需要修改测试代码或者需要测试新的测试代码时,可以直接修改宿主机的测试目录下的测试代码,或在宿主机的测试目录下用新的测试代码替代原来的测试代码,即可实现更改容器运行的测试代码。因此,通过上述技术方案,实现了对测试代码进行调试,及对新的测试代码进行测试而不需要重新构建容器。从而,通过上述技术方案进行测试,使用方便,省时省力。
[0049]
请再次参阅图2,为了对测试结果进行分析,可选地,所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录。步骤s20中,将所述宿主机的目录与所述容器的目录进行映射的步骤还包括:将所述宿主机的日志目录与所述容器的日志目录进行映射。
[0050]
其中,宿主机的日志目录用于与容器的日志目录进行映射,用于存储所述容器运行所述测试文件产生的日志文件,例如为/home/work/containers/om2.tyqf.com/8001/logs。步骤s20启动容器进行测试的代码如下:
[0051]
docker run-d
‑‑
name om-tyqf-com-8001-p 8001:80
[0052]-v/home/work/containers/om2.tyqf.com/conf:/home/jindi/tyfw/nginx/default.d
[0053]-v/home/work/containers/om2.tyqf.com/8001/web:/home/jindi/data/www
[0054]-v/home/work/containers/om2.tianyanqifu.com/8001/logs:/home/jindi/tyfw/logsimagex:latest
[0055]
通过上述技术方案,设置日志目录来储存容器运行测试文件产生的日志文件,可以便于用户对测试结果进行分析查看。
[0056]
基于上述技术方案,还可以对多个(至少两个)测试文件进行并行测试,及基于上述基础镜像,可以构建多个容器,该多个容器用于运行该多个测试文件,每个所述容器与所述测试文件一一对应。
[0057]
步骤s10即为:构建基础镜像,所述基础镜像包括至少两个所述容器运行的基础环境,每个所述容器与所述测试文件一一对应,所述基础环境包括所述宿主机的与每个所述容器进行映射的端口号和目录。
[0058]
示例地,假设测试文件有3个,则这3个测试文件并行测试时,需要3个容器。步骤s10包括:构建容器(测试实例)运行的基础镜像,如imagex,并规划部署根目录,例如:/home/work/containers。当这3个测试文件是一个项目的3个代码分支时,可以规划这个项目的部署目录为/home/work/containers/om2.tyqf.com。这个项目的部署目录结构如图2所示:8001、8002、8003分别是3个容器映射到宿主机的端口号。这3个容器映射到宿主机的目录分别为:/home/work/containers/om2.tyqf.com/8001、/home/work/containers/om2.tyqf.com/8002、/home/work/containers/om2.tyqf.com/8003。3个容器的测试目录映射的宿主机的测试目录,分别用于存储每个测试文件,例如为:/home/work/containers/om2.tyqf.com/8001/web、/home/work/containers/om2.tyqf.com/8002/web、/home/work/containers/om2.tyqf.com/8003/web。3个容器的配置目录映射的宿主机的配置目录,分别用于存储各个容器的配置文件,例如为:/home/work/containers/om2.tyqf.com/8001/conf、/home/work/containers/om2.tyqf.com/8002/conf、/home/work/containers/om2.tyqf.com/8003/conf。
[0059]
同理,为了对测试结果进行分析,可选地,所述目录还包括用于存储每个所述容器运行每个所述测试文件产生的日志文件的日志目录。则,3个容器的日志目录映射的宿主机的日志目录,分别用于存储每个容器运行每个测试文件产生的日志文件,例如为:/home/work/containers/om2.tyqf.com/8001/logs、/home/work/containers/om2.tyqf.com/8002/clogs、/home/work/containers/om2.tyqf.com/8003/logs。
[0060]
步骤s20即为:将每个所述测试文件拷贝至所述宿主机的目标测试目录下,将所述宿主机的每个端口号与每个所述容器的端口号进行映射,将所述宿主机的每个目录与每个所述容器的目录进行映射,并启动与每个所述测试文件对应的容器进行测试,得到每个所述测试文件的测试结果,其中,所述目标测试目录为每个所述测试文件对应的容器映射到所述宿主机的测试目录。
[0061]
其中,所述将所述宿主机的每个目录与每个所述容器的目录进行映射的步骤包括:将所述宿主机的每个测试目录与每个所述容器的测试目录进行映射,将所述宿主机的每个配置目录与每个所述容器的配置目录进行映射。
[0062]
为了更清楚的说明步骤s20,沿用上述步骤s10中的举例,步骤s20即为:将3个测试文件(测试实例资源)分别部署到宿主机的3个测试目录(/home/work/containers/om2.tyqf.com/8001/web、/home/work/containers/om2.tyqf.com/8002/web、/home/work/containers/om2.tyqf.com/8003/web)下;将所述宿主机的每个端口号与每个所述容器的端口号进行映射,将所述宿主机的每个测试目录与每个所述容器的测试目录进行映射,将
所述宿主机的每个配置目录与每个所述容器的配置目录进行映射,并启动容器进行测试,得到所述测试文件的测试结果(代码与上述雷同,此处省略)。
[0063]
同理,为了对测试结果进行分析,当所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录时,步骤s20中,将所述宿主机的每个目录与每个所述容器的目录进行映射的步骤还包括:将所述宿主机的每个日志目录与每个所述容器的日志目录进行映射。
[0064]
通过上述技术方案,在构建基础镜像时,部署了多个容器映射到宿主机的端口号和目录,每个容器与测试文件对应,将每个测试文件拷贝到宿主机的目标测试目录下,启动与每个测试文件对应的容器进行测试,即可得到每个测试文件的测试结果。现有技术中,在测试多个测试文件时,会针对每个测试文件构建一个镜像,及基于每个镜像和每个测试文件构建一个容器。而本公开提供的技术方案,在测试多个测试文件时,仅构建一个基础镜像及基于该基础镜像和多个测试文件构建多个容器。因此,与现有技术相比,本公开提供的技术方案,可以共享硬件资源,随着测试文件的增加,可以减少硬件成本支出。
[0065]
可选地,所述配置文件包括:所述容器对应的宿主机的端口号与容器域名的映射关系,所述容器域名为访问所述容器所用的域名。所述方法还包括:将所述容器域名代理至所述宿主机的ip地址,以使测试人员通过所述容器域名能访问所述宿主机。
[0066]
例如,可以通过配置nginx反向代理的方式,对于上述的3个容器,映射三个容器域名,如om2.test1.tyqf.com、om2.test2.tyqf.com、om2.test3.tyqf.com,分别映射到宿主机的端口8001、8002、8003上。将3个容器域名om2.test1.tyqf.com、om2.test2.tyqf.com、om2.test3.tyqf.com代理至所述宿主机的ip地址。
[0067]
通过上述技术方案,将每个容器域名与宿主机的每个端口进行映射,并将每个容器域名代理至宿主机的ip地址。测试人员通过容器域名能访问宿主机,宿主机在接到访问请求后,根据容器域名反向代理到宿主机的端口号,通过宿主机的端口号与容器的对应关系,即可根据宿主机的端口号访问容器提供的服务,对测试文件进行测试,得到测试结果。
[0068]
基于上述发明构思,本公开实施例还提供一种测试装置。图3是根据本公开一实施例示出的一种测试装置的框图。如图3所示,测试装置包括:
[0069]
镜像构建模块10,用于构建基础镜像,所述基础镜像包括容器运行的基础环境,所述基础环境包括宿主机与所述容器进行映射的端口号和目录,所述目录包括测试目录和配置目录,所述测试目录用于存储测试文件,所述配置目录用于存储所述容器的配置文件。
[0070]
容器测试模块20,用于将测试文件拷贝至所述宿主机的所述测试目录下,将所述宿主机的端口号与所述容器的端口号进行映射,将所述宿主机的目录与所述容器的目录进行映射,并启动所述容器进行测试,得到所述测试文件的测试结果。
[0071]
其中,所述将所述宿主机的目录与所述容器的目录进行映射的步骤包括:将所述宿主机的测试目录与所述容器的测试目录进行映射,将所述宿主机的配置目录与所述容器的配置目录进行映射。
[0072]
通过上述技术方案,在构建基础镜像时,部署了宿主机的与容器进行映射的端口号和目录,该目录包括用于存放测试文件的测试目录和用于存储容器配置文件的配置目录。在需要修改测试代码或者需要测试新的测试代码时,可以直接修改宿主机的测试目录下的测试代码,或在宿主机的测试目录下用新的测试代码替代原来的测试代码,即可实现
更改容器运行的测试代码。因此,通过上述技术方案,实现了对测试代码进行调试,及对新的测试代码进行测试而不需要重新构建容器。从而,通过上述技术方案进行测试,使用方便,省时省力。
[0073]
为了对测试结果进行分析,可选地,所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录。所述将所述宿主机的目录与所述容器的目录进行映射还包括:将所述宿主机的日志目录与所述容器的日志目录进行映射。
[0074]
通过上述技术方案,设置日志目录来储存容器运行测试文件产生的日志文件,可以便于用户对测试结果进行分析查看。
[0075]
基于上述技术方案,可选地,还可以对多个(至少两个)测试文件进行并行测试,及基于上述基础镜像,可以构建多个容器,该多个容器用于运行该多个测试文件,每个所述容器与所述测试文件一一对应。
[0076]
此时,镜像构建模块具体用于,构建基础镜像,所述基础镜像包括至少两个所述容器运行的基础环境,每个所述容器与所述测试文件一一对应,所述基础环境包括所述宿主机的与每个所述容器进行映射的端口号和目录。
[0077]
同理,为了对测试结果进行分析,可选地,所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录。
[0078]
此时,容器测试模块具体用于,将每个所述测试文件拷贝至所述宿主机的目标测试目录下,将所述宿主机的每个端口号与每个所述容器的端口号进行映射,将所述宿主机的每个目录与每个所述容器的目录进行映射,并启动与每个所述测试文件对应的容器进行测试,得到每个所述测试文件的测试结果,其中,所述目标测试目录为每个所述测试文件对应的容器映射到所述宿主机的测试目录。
[0079]
其中,所述将所述宿主机的每个目录与每个所述容器的目录进行映射包括:将所述宿主机的每个测试目录与每个所述容器的测试目录进行映射,将所述宿主机的每个配置目录与每个所述容器的配置目录进行映射。
[0080]
同理,为了对测试结果进行分析,当所述目录还包括用于存储所述容器运行所述测试文件产生的日志文件的日志目录时,将所述宿主机的每个目录与每个所述容器的目录进行映射的步骤还包括:将所述宿主机的每个日志目录与每个所述容器的日志目录进行映射。
[0081]
通过上述技术方案,在构建基础镜像时,部署了多个容器映射到宿主机的端口号和目录,每个容器与测试文件对应,将每个测试文件拷贝到宿主机的目标测试目录下,启动与每个测试文件对应的容器进行测试,即可得到每个测试文件的测试结果。现有技术中,在测试多个测试文件时,会针对每个测试文件构建一个镜像,及基于每个镜像和每个测试文件构建一个容器。而本公开提供的技术方案,在测试多个测试文件时,仅构建一个基础镜像及基于该基础镜像和多个测试文件构建多个容器。因此,与现有技术相比,本公开提供的技术方案,可以共享硬件资源,随着测试文件的增加,可以减少硬件成本支出。
[0082]
可选地,所述配置文件包括:所述容器对应的宿主机的端口号与容器域名的映射关系,所述容器域名为访问所述容器所用的域名。所述测试装置还包括:代理模块,用于将所述容器域名代理至所述宿主机的ip地址,以使测试人员通过所述容器域名能访问所述宿主机。
[0083]
通过上述技术方案,将每个容器域名与宿主机的每个端口进行映射,并将每个容器域名代理至宿主机的ip地址。测试人员通过容器域名能访问宿主机,宿主机在接到访问请求后,根据容器域名反向代理到宿主机的端口号,通过宿主机的端口号与容器的对应关系,即可根据宿主机的端口号访问容器提供的服务,对测试文件进行测试,得到测试结果。
[0084]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0085]
图4是根据一示例性实施例示出的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。参照图4,电子设备1900包括处理器1922,其数量可以为一个或多个,以及存储器1932,用于存储可由处理器1922执行的计算机程序。存储器1932中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1922可以被配置为执行该计算机程序,以执行上述的测试方法。
[0086]
另外,电子设备1900还可以包括电源组件1926和通信组件1950,该电源组件1926可以被配置为执行电子设备1900的电源管理,该通信组件1950可以被配置为实现电子设备1900的通信,例如,有线或无线通信。此外,该电子设备1900还可以包括输入/输出(i/o)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如windows server
tm
,mac os x
tm
,unix
tm
,linux
tm
等等。
[0087]
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的测试方法的步骤。例如,该非临时性计算机可读存储介质可以为上述包括程序指令的存储器1932,上述程序指令可由电子设备1900的处理器1922执行以完成上述的测试方法。
[0088]
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的测试方法的代码部分。
[0089]
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
[0090]
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
[0091]
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1