CN104063311B - 一种应用测试方法及装置 - Google Patents
一种应用测试方法及装置 Download PDFInfo
- Publication number
- CN104063311B CN104063311B CN201310201800.5A CN201310201800A CN104063311B CN 104063311 B CN104063311 B CN 104063311B CN 201310201800 A CN201310201800 A CN 201310201800A CN 104063311 B CN104063311 B CN 104063311B
- Authority
- CN
- China
- Prior art keywords
- test
- ndk
- application
- development
- measured
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明适用于测试技术领域,提供了一种应用测试方法及装置,所述方法包括:加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层;根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;输出对所述待测NDK开发应用的测试结果。实现对NDK开发的应用程序进行系统测试。
Description
技术领域
本发明属于测试技术领域,尤其涉及一种应用测试方法及装置。
背景技术
目前安卓(Android)上涉及代码层的自动测试技术都是Java层的,例如,instrumentation及基于它的相关技术,其中,instrumentation为Google提供的使用Java编写Java开发的Android程序单元测试的测试框架与方法,Robotium是在它的基础上封装的一些测试接口。NDK(NativeDevelopmentKit)为Google提供的使用C\CPP编写Android程序的编程环境,对于NDK平台开发的Android应用,由于该类应用为使用C\CPP开发的应用,对于该类C\CPP开发的Android应用通常采用手动方法或者调试的方法对程序进行测试,因此,现有技术无法对NDK开发的应用程序进行系统测试。
发明内容
本发明实施例的目的在于提供一种应用测试方法,旨在解决现有技术无法对NDK开发的应用程序进行系统测试问题。
为了实现上述目的,本发明实施例提供如下技术方案:
本发明第一方面提供了一种应用测试方法,所述方法包括:
加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层;
根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
输出对所述待测NDK开发应用的测试结果。
本发明第二方面提供了一种应用测试装置,所述装置包括:。
加载单元,用于加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层;
测试单元,用于根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
结果输出单元,用于输出对所述待测NDK开发应用的测试结果。
本发明实施例与现有技术相比,有益效果在于:加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试,输出对所述待测NDK开发应用的测试结果,实现对NDK开发的应用程序进行系统测试。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的应用测试方法的实现的流程图;
图2是本发明实施例二提供的应用测试方法的实现的流程图;
图3是本发明实施例一提供的对自定义控件体系进行随机按键测试的测试程序的生成过程的流程图;
图4是本发明实施例二提供的对NDK应用功能自动化测试的测试程序的生成过程的流程图;
图5是本发明实施例三提供的应用测试装置的结构图;
图6是本发明实施例四提供的应用测试装置的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中,通过把测试代码放进NDK层,当进行测试时,加载预先编辑的测试代码及待测NDK开发应用,根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试,输出对所述待测NDK开发应用的测试结果。实现对C\CPP程序的自动化测试。
以下结合具体实施例对本发明的实现进行详细描述:
实施例一
图1示出了本发明实施例一提供的应用测试方法的实现的流程图,所述方法可以用于对NDK开发的C\CPP应用进行测试,例如,遍历或随机操作自定义控件、操作和识别控件进行自动化测试和监控、直接调用待测NDK开发应用接口的自动化测试和监控,所述方法详述如下:
在S101中,加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层;
在S102中,根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
本实施例中,在具体的测试过程中,可以结合现有的测试框架进行测试,例如,结合instrumentation测试框架,当然,还可以采用其它SDK层(Java层)或NDK层(C/C++层)的测试技术和框架,包括但不限于现有单元测试框架,例如,TUT(TemplateUnitTests)、GTest(GoogleTest)等。
在S103中,输出对所述待测NDK开发应用的测试结果。
本实施例中,在每个测试用例中断言并实时输出对所述待测NDK开发应用的测试结果;或者通过测试执行管理集中输出所有测试用例对所述待测NDK开发应用的测试结果,请参阅表1为测试结果的一个实现实例,其中,该结果例子为对一个游戏平台的游戏下载、更新、运行随机按键的测试结果(RESULT),其通过测试用例函数的返回True或者False,用例管理根据测试用例返回的True或者False,断言是否通过,并且提供一个Info字段让函数返回一些测试中的信息。
表1
本实施例中,加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试,输出对所述待测NDK开发应用的测试结果,实现对NDK开发的应用程序进行系统测试。
实施例二
图2示出了本发明实施例二提供的应用测试方法的实现的流程图,详述如下:
在S201中,当接收NDK开发应用测试指令时,启动新的测试线程;
本实施例中,当接到测试指令时,开启一个或多个新的测试线程,使得测试线程与主线程(主线程是UI线程)和逻辑线程分开执行,以避免线程阻塞以及影响应用本身逻辑。
在S202中,加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例、测试执行管理和测试线程管理,其中,所述测试用例的全部或者部分位于NDK层;
本实施例中,所述预先编辑的测试代码为与待测NDK开发应用一起打包的文件,或者所述预先编辑的测试代码为单独打包的文件,然后与待测NDK开发应用进行打包,所述打包的文件可以为.so文件,或者也可以为静态链接库.a文件。
本实施例中,所述测试用例包括测试基础用例,所述测试基础用例为对被测应用执行测试的逻辑代码。
本实施例中,请参阅表1为本实施中测试代码的层次图:
测试基础用例:对待测NDK开发应用执行测试的逻辑代码,可以包括一些针对应用封装的统一接口(例如获取控件的接口、操作控件的接口),由于要大量使用到应用的代码,所以必须写在NDK层。
测试用例:此部分是把相对独立的测试用基础用例集中在一个函数或者一个类里面的部分,完成一个完整的测试功能;它主要调用测试基础函数,也会调用到应用代码,所以此部分主要逻辑优选的写在NDK层,但是可以通过给用例函数提供JNI接口让Java层调用;可选的,此可以将测试用例与测试基础用例合并,但更多情况是定义统一的模版以便于用例执行管理。
测试执行管理:此部分管理多个测试用例的执行的顺序(执行用例的开始时间、先后关系等)和方式(例如,是多个用例函数连续执行,还是每次执行用例前后需要专门的函数清理环境,还是多线程并发执行),此部分和测试执行函数的模版相关联,对于所有自动测试通用。
测试线程管理:对测试线程进行管理。
结果输出:测试结果可以在测试用例函数中做断言并实时输出,也可以在测试执行管理中统一输出,输出方式可以是文件形式或者控制台形式,在此不用以限制本发明。
综上,所述测试执行管理位于java层或者NDK层,所述测试线程管理位于java层或者NDK层,当所述测试执行管理和/或所述测试线程管理位于java层时,所述测试代码还包括java本地接口(javaNative,Interface,JNI),以使java层调用所述测试执行管理和/或所述测试线程管理。所述测试用例包括测试基础用例,由于测试用例及测试基础用例需要使用到应用的代码,因此,所述测试用例及测试基础用例可以全部位于NDK层,当然,也可以根据实际需要使所述测试用例的部分测试用例位于java层。
表1
为了便于理解,以下通过具体的实现示例对本实施例中测试代码的生成过程进行说明,但不以本实现示例的情况为限:
作为本发明的一个实现示例,请参阅图3,该图示出了对自定义控件体系进行随机按键测试的测试程序的生成过程,其中,被测程序使用NDK开发的C\CPP应用,所述测试代码为C\CPP代码:
在S301中,获取所述定义控件体系当前界面的所有控件;
在S302中,生成随机数,根据所述随机数,在所有控件中随机选取控件;
在S303中,根据所述自定义控件体系的API操作,对所述选取控件编写测试基础用例;
在S304中,编写错误捕获和结果输出代码;
在S305中,编写随机传入参数代码(包括运行时间及随机种子);
在S306,整合所述测试基础用例、及结果输出代码及随机传入参数代码,生成测试用例;
在S307中,编写MK代码,根据控件体系相关库,生成测试库;
在S308中,执行ndk-build打包测试库文件test.so;
在S309中,将所述test.so文件打包进待测试应用。
作为本发明的另一个实现实例,请参阅图4,该图示出了NDK应用功能自动化测试的测试程序的生成过程,其中,被测程序使用NDK开发的C\CPP应用,所述测试代码为C\CPP代码:
在S401中,通过对被测试程序进行操作和判定,生成测试基础用例;
在S402中,根据测试基础用例,生成测试用例;
在S403中,编写测试执行管理代码,即保存测试用例的执行顺序和当前执行的ID以及提供执行当前测试用例及其JNI接口;
在S404中,将测试代码(包含测试执行管理代码和测试基础用例、测试用例)打包为test.so文件;
在S405中,使用instrumentation编写待测试的测试工程,在测试用例中调用执行当前用例接口;
在S406中,将测试代码与待测应用分别打包成apk包,其中test.so打包进测试代码apk包。
本实施例中,使用instrumentation做结果输出和线程管理,用例执行控制部分主要在NDK层的方式。
在S203中,通过只读文件方式或者通过Android系统跨进程通信机制,获取外部数据,所述外部数据包括对NDK开发应用进行测试的测试数据和/或测试控制指令;
在S204中,根据所述预先编辑的测试代码及外部数据,对所述待测NDK开发应用执行测试;
其中,所述外部数据包括对NDK开发应用进行测试的测试数据和/或测试控制指令,例如,对浏览器进行测试时,需要加载URL网址测试数据,对测试进行控制的随机操作的时间和操作范围,控制执行那一部分测试代码等。
在S205中,输出对所述待测NDK开发应用的测试结果。
在S206中,关闭所述测试线程。
本实施例中,当接收NDK开发应用测试指令时,启动新的测试线程,加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试,输出对所述待测NDK开发应用的测试结果,并在测试结束时,关闭测试线程,实现对NDK开发的应用程序进行系统测试。。
实施例三
图5示出了本发明实施例三提供的应用测试装置的结构图,为了便于说明,仅示出了与本发明实施例相关的部分。
所述装置包括:加载单元51、测试单元52和结果输出单元53。
加载单元51,用于加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层;
可选的,所述加载单元51,用于通过只读文件方式或者通过Android系统跨进程通信机制,加载预先编辑的测试代码及待测NDK开发应用。
测试单元52,用于根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
结果输出单元53,用于输出对所述待测NDK开发应用的测试结果。
所述结果输出单元53,用于在每个测试用例中断言并实时输出对所述待测NDK开发应用的测试结果;或者通过测试执行管理集中输出所有测试用例对所述待测NDK开发应用的测试结果。
本发明实施例提供的应用测试装置可以使用在前述对应的方法实施例一中,详情参见上述实施例一的描述,在此不再赘述。
实施例四
图6示出了本发明实施例四提供的应用测试装置的结构图,为了便于说明,仅示出了与本发明实施例相关的部分。
所述装置包括:线程启动单元61、加载单元62、外部数据获取单元63、测试单元64、结果输出单元65以及线程关闭单元66。
本实施例与实施例三的区别在于:
可选的,所述测试代码还包括测试线程管理,所述线程启动单元61,用于当接收NDK开发应用测试指令时,启动一个或多个新的测试线程;所述线程关闭单元66,用于关闭所述测试线程。
可选的,所述测试执行管理位于java层或者NDK层,所述测试线程管理位于java层或者NDK层;
且当所述测试执行管理和/或所述测试线程管理位于java层时,所述测试代码还包括JNI接口,以使java层调用所述测试执行管理和/或所述测试线程管理。
可选的,外部数据获取单元63,用于通过只读文件方式或者通过Android系统跨进程通信机制,获取外部数据,所述外部数据包括对NDK开发应用进行测试的测试数据和/或测试控制指令;
所述测试单元64,用于根据所述预先编辑的测试代码及外部数据,对所述待测NDK开发应用执行测试。
本发明实施例提供的应用测试装置可以使用在前述对应的方法实施例二中,详情参见上述实施例二的描述,在此不再赘述。
值得注意的是,上述实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种应用测试方法,其特征在于,所述方法包括:
加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层,其中,所述测试用例包括测试基础用例,所述测试基础用例为对被测应用执行测试的逻辑代码,其中,所述测试基础用例为对待测NDK开发应用执行测试的逻辑代码,测试用例是把相对独立的测试用基础用例集中在一个函数或者一个类里面的部分,完成一个完整的测试功能,测试执行管理用于管理多个测试用例的执行的顺序和方式;
根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
输出对所述待测NDK开发应用的测试结果。
2.如权利要求1方法,其特征在于,所述测试代码还包括测试线程管理,所述加载预先编辑的测试代码及待测NDK开发应用之前,所述方法还包括:
当接收NDK开发应用测试指令时,启动一个或多个新的测试线程;
所述根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试之后,所述方法还包括:
关闭所述测试线程。
3.如权利要求2方法,其特征在于,所述测试执行管理位于java层或者NDK层,所述测试线程管理位于java层或者NDK层;
且当所述测试执行管理和/或所述测试线程管理位于java层时,所述测试代码还包括JNI接口,以使java层调用所述测试执行管理和/或所述测试线程管理。
4.如权利要求1方法,其特征在于,所述输出对所述待测NDK开发应用的测试结果具体为:
在每个测试用例中断言并实时输出对所述待测NDK开发应用的测试结果;或者通过测试执行管理集中输出所有测试用例对所述待测NDK开发应用的测试结果。
5.如权利要求1方法,其特征在于,所述根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试之前,所述方法还包括:
通过只读文件方式或者通过Android系统跨进程通信机制,获取外部数据,所述外部数据包括对NDK开发应用进行测试的测试数据和/或测试控制指令;
所述根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试具体为:
根据所述预先编辑的测试代码及外部数据,对所述待测NDK开发应用执行测试。
6.一种应用测试装置,其特征在于,所述装置包括:
加载单元,用于加载预先编辑的测试代码及待测NDK开发应用,所述测试代码包括测试用例和测试执行管理,其中,所述测试用例的全部或者部分位于NDK层,其中,所述测试用例包括测试基础用例,所述测试基础用例为对被测应用执行测试的逻辑代码,其中,所述测试基础用例为对待测NDK开发应用执行测试的逻辑代码,测试用例是把相对独立的测试用基础用例集中在一个函数或者一个类里面的部分,完成一个完整的测试功能,测试执行管理用于管理多个测试用例的执行的顺序和方式;
测试单元,用于根据所述预先编辑的测试代码,对所述待测NDK开发应用执行测试;
结果输出单元,用于输出对所述待测NDK开发应用的测试结果。
7.如权利要求6所述的装置,其特征在于,所述测试代码还包括测试线程管理,所述装置还包括:
线程启动单元,用于当接收NDK开发应用测试指令时,启动一个或多个新的测试线程;以及线程关闭单元,用于关闭所述测试线程。
8.如权利要求6所述的装置,其特征在于,所述测试执行管理位于java层或者NDK层,所述测试线程管理位于java层或者NDK层;
且当所述测试执行管理和/或所述测试线程管理位于java层时,所述测试代码还包括JNI接口,以使java层调用所述测试执行管理和/或所述测试线程管理。
9.如权利要求6所述的装置,其特征在于,所述结果输出单元,用于在每个测试用例中断言并实时输出对所述待测NDK开发应用的测试结果;或者通过测试执行管理集中输出所有测试用例对所述待测NDK开发应用的测试结果。
10.如权利要求6所述的装置,其特征在于,所述装置还包括:
外部数据获取单元,用于通过只读文件方式或者通过Android系统跨进程通信机制,获取外部数据,所述外部数据包括对NDK开发应用进行测试的测试数据和/或测试控制指令;
所述测试单元,用于根据所述预先编辑的测试代码及外部数据,对所述待测NDK开发应用执行测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310201800.5A CN104063311B (zh) | 2013-05-27 | 2013-05-27 | 一种应用测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310201800.5A CN104063311B (zh) | 2013-05-27 | 2013-05-27 | 一种应用测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104063311A CN104063311A (zh) | 2014-09-24 |
CN104063311B true CN104063311B (zh) | 2016-02-03 |
Family
ID=51551033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310201800.5A Active CN104063311B (zh) | 2013-05-27 | 2013-05-27 | 一种应用测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104063311B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577611A (zh) * | 2017-11-01 | 2018-01-12 | 四川久远银海软件股份有限公司 | 应用调试装置与方法 |
CN110971890B (zh) * | 2018-09-30 | 2022-04-19 | 青岛海尔多媒体有限公司 | 电视生产测试的方法、装置及计算机存储介质 |
CN110046479B (zh) * | 2019-03-21 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作系统的链接库文件反调试方法及装置 |
CN110955593B (zh) * | 2019-10-28 | 2023-07-14 | 北京三快在线科技有限公司 | 客户端测试方法、装置、电子设备及可读存储介质 |
CN113297083B (zh) * | 2021-05-27 | 2022-08-19 | 山东云海国创云计算装备产业创新中心有限公司 | 一种跨平台ic测试方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402483A (zh) * | 2011-12-27 | 2012-04-04 | 苏州佰思迈信息咨询有限公司 | 软件测试方法 |
CN102495802A (zh) * | 2011-12-26 | 2012-06-13 | 华为技术有限公司 | 测试软件系统的方法和装置以及计算机系统 |
-
2013
- 2013-05-27 CN CN201310201800.5A patent/CN104063311B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495802A (zh) * | 2011-12-26 | 2012-06-13 | 华为技术有限公司 | 测试软件系统的方法和装置以及计算机系统 |
CN102402483A (zh) * | 2011-12-27 | 2012-04-04 | 苏州佰思迈信息咨询有限公司 | 软件测试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104063311A (zh) | 2014-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104063311B (zh) | 一种应用测试方法及装置 | |
CN109933522B (zh) | 一种自动化用例的测试方法、测试系统及存储介质 | |
Savchenko et al. | Microservices validation: Mjolnirr platform case study | |
CN103177210B (zh) | 一种在Android中植入动态污点分析模块的方法 | |
CN105786696B (zh) | 一种测试方法及装置 | |
CN103365770A (zh) | 移动终端软件测试系统及软件测试方法 | |
CN107832207A (zh) | 接口性能测试方法、装置、存储介质和计算机设备 | |
CN104484267B (zh) | 一种测试系统及方法 | |
CN112256321A (zh) | 静态库打包方法、装置、计算机设备和存储介质 | |
CN104731622B (zh) | 一种应用程序的加载方法、装置和移动终端 | |
Kellner et al. | Simulation environments for wireless sensor networks | |
CN108197004B (zh) | Ios应用的方法耗时、加载视图耗时的监测方法及系统 | |
CN109933519A (zh) | 自动化测试方法、装置、系统、介质和电子设备 | |
CN105094878A (zh) | 一种集成系统库文件的方法和装置 | |
Acar et al. | Programming tools for rapid NFV-based media application development in 5G networks | |
CN105162664A (zh) | 一种基于仪表中间层开发的自动化平台测试方法及系统 | |
CN106293687A (zh) | 一种打包流程的控制方法,及装置 | |
CN103049374A (zh) | 一种自动化测试的方法及装置 | |
CN105677560A (zh) | 一种测试方法、装置及系统 | |
US9582397B2 (en) | Method and system for obtaining run-time information associated with executing an executable | |
CN113448690A (zh) | 监测方法及装置 | |
An et al. | Model-driven generative framework for automated omg dds performance testing in the cloud | |
US20130111432A1 (en) | Validation of a system model including an activity diagram | |
Carvalho et al. | Experimental evaluation of distributed middleware with a virtualized java environment | |
Chen | Modeling and simulation for and in service-orientated computing paradigm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20160106 Address after: The South Road in Guangdong province Shenzhen city Fiyta building 518057 floor 5-10 Nanshan District high tech Zone Applicant after: Shenzhen Tencent Computer System Co., Ltd. Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403 Applicant before: Tencent Technology (Shenzhen) Co., Ltd. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |