CN111382070A - 兼容性测试方法、装置、存储介质和计算机设备 - Google Patents
兼容性测试方法、装置、存储介质和计算机设备 Download PDFInfo
- Publication number
- CN111382070A CN111382070A CN202010137997.0A CN202010137997A CN111382070A CN 111382070 A CN111382070 A CN 111382070A CN 202010137997 A CN202010137997 A CN 202010137997A CN 111382070 A CN111382070 A CN 111382070A
- Authority
- CN
- China
- Prior art keywords
- interface
- test
- calling
- version
- tested
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种兼容性测试方法、装置、计算机可读存储介质和计算机设备,方法包括:分别获取待测试对象当前版本和更新版本的源代码,对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树,获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合,获取与增量调用接口集合中各调用接口对应的接口测试用例,运行各接口测试用例,得到待测试对象的兼容性测试结果。通过对当前版本和更新版本的源码进行解析,得到抽象语法树实现了调用接口的全面获取,简化了测试对象的数量,提高了测试效率,实现了对更新版本的待测试对象全面高效的兼容性测试。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种兼容性测试方法、装置、计算机可读存储介质和计算机设备。
背景技术
随着计算机技术的发展,出现了各种各样的终端设备。在终端设备上可以运行各种应用程序、插件、网页等。由于市场上终端类型繁多,以Android环境中的终端和应用程序为例,由于Android是一种开放式操作***,存在着碎片化的问题,应用程序在不同终端也会因为运行的软件或硬件差异性导致运行时出现兼容性问题。在应用程序或插件等对象在版本更新上线之前,为了避免出现新版本兼容性问题或减小兼容性问题对其新版本正常运行造成的影响,需要对应用程序或插件等进行兼容性测试。
传统技术中,对于应用程序或是插件等对象的兼容性测试,是通过灰度部分用户,根据用户在使用过程中发现隐藏的兼容性问题或是通过编写UI自动化测试用例即用代码模拟用户操作页面,来进行兼容性分析得到的,这两种传统的兼容性测试方法均存在测试不全面且存在测试效率低的问题。
发明内容
基于此,有必要针对难以实现全面的兼容性测试且存在兼容性测试效率低的问题的技术问题,提供一种全面高效的兼容性测试方法、装置、计算机可读存储介质和计算机设备。
一种兼容性测试方法,包括:
分别获取待测试对象当前版本和更新版本的源代码;
对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
获取与增量调用接口集合中各调用接口对应的接口测试用例;
运行各接口测试用例,得到待测试对象的兼容性测试结果。
一种兼容性测试装置,装置包括:
源代码获取模块,用于分别获取待测试对象当前版本和更新版本的源代码;
源代码解析模块,用于对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
增量调用接口确定模块,用于获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
接口测试用例获取模块,用于获取与增量调用接口集合中各调用接口对应的接口测试用例;
兼容性测试模块,用于运行各接口测试用例,得到待测试对象的兼容性测试结果。
一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现以下步骤:
分别获取待测试对象当前版本和更新版本的源代码;
对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
获取与增量调用接口集合中各调用接口对应的接口测试用例;
运行各接口测试用例,得到待测试对象的兼容性测试结果。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
分别获取待测试对象当前版本和更新版本的源代码;
对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
获取与增量调用接口集合中各调用接口对应的接口测试用例;
运行各接口测试用例,得到待测试对象的兼容性测试结果。
上述兼容性测试方法、装置、计算机可读存储介质和计算机设备,一方面,通过对当前版本和更新版本的源码进行解析,通过解析源代码的抽象语法树获得的调用接口是完整的,不会有遗漏,实现了调用接口的全面获取。另一方面,通过比较当前版本和更新版本的调用接口标识,可以获取到新增的调用接口,利用接口测试用例对新增的调用接口进行兼容性测试,可以将问题聚焦在更新版本的增量调用接口,相较于对更新版本的全面检测,简化了测试对象的数量提高了测试效率,从而通过较少的接口测试用例,实现了对更新版本的待测试对象的全面高效的兼容性测试。
附图说明
图1为一个实施例中兼容性测试方法的应用环境图;
图2为一个实施例中兼容性测试方法的流程示意图;
图3为另一个实施例中兼容性测试方法的流程示意图;
图4为再一个实施例中兼容性测试方法的流程示意图;
图5为又一个实施例中兼容性测试方法的流程示意图;
图6为还一个实施例中兼容性测试方法的流程示意图;
图7为再一个实施例中兼容性测试方法的流程示意图;
图8为一个实施例中兼容性测试方法的结构框图;
图9为一个实施例中兼容性测试装置的结构框图;
图10为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中兼容性测试方法的应用环境图。参照图1,该兼容性测试方法应用于兼容性测试***。该兼容性测试***包括服务器110和云测试机集群120。服务器110和云测试机集群120通过网络连接。服务器分别获取待测试对象当前版本和更新版本的源代码,对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树,获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合,获取与增量调用接口集合中各调用接口对应的接口测试用例,在云测试机集群120上运行各接口测试用例,得到待测试对象的兼容性测试结果。其中,云测试机集群120中包括多个测试机,测试机具体可以包括各种型号的手机、平板电脑、笔记本电脑等。服务器110可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
如图2所示,在一个实施例中,提供了一种兼容性测试方法。本实施例主要以该方法应用于上述图1中的服务器110来举例说明。参照图2,该兼容性测试方法具体包括步骤S210至步骤S250。
S210,分别获取待测试对象的当前版本和更新版本的源代码。
待测试对象是指需要进行兼容性测试的对象,具体可以是需要运行在不同类型的终端上的应用程序、插件、小程序或是网页功能等。随着服务升级,待测试对象需要适应性的进行对应的版本更新,以提高服务质量。当前版本是指待测试对象在真实环境中已经上线运行过一段时间的版本。更新版本是指针对当前版本进行迭代更新后的版本。真实环境是指在用户终端中运行的环境,是与测试环境相对的概念。在实施例中,当前版本可以是待测试对象的初始版本,当前版本由于在用户真实环境中运行过一段时间,其存在的兼容性问题可以通过用户反馈和热补丁的方式进行修复。其中,用户反馈是指通过预设的问题反馈通道,获取用户在使用过程中遇到并上传的问题,通过接收用户反馈信息,确定初始版本的兼容性问题,并予以修复。具体地修复方式可以是热补丁修复,热补丁是指能够修复软件漏洞的代码,是一种快速、低成本修复产品软件版本缺陷的方式。通过热补丁修复方式,不会使终端设备当前正在运行的业务中断,即在不重启设备的情况下,可以对终端设备当前版本的缺陷进行修复。
源代码也称源程序,是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。可以理解,源代码是相对目标代码和可执行代码而言的,它是一种是用汇编语言和高级语言写出来的原始代码,具体可以是C/C++、BASIC、C#、JAVA、PASCAL等任何一种语言代码。服务器通过待测试对象的当前版本和更新版本的版本标识,在源代码库中查找得到待测试对象的当前版本和更新版本的源代码。
S220,对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树。
源代码区别于通过编译产生的目标代码和可执行代码,其一般是通过汇编语言和高级语言来进行编写,符合人类可读性。对于源代码的编写,需要符合一定的语法规则,其中,不同的汇编语言具体采用的语法规则可能存在差异,但汇编语言都必须具备对应的逻辑,通过对源代码进行解析,例如词法分析、语法分析等,可以得到源代码的逻辑架构,即为源代码对应的抽象语法树(AbstractSyntaxTree,AST,简称语法树)。抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,在编写源文件时,经常会对文法进行等价的转换,例如,消除左递归,回溯,二义性等。
在其中一个实施例中,如图3所示,对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树包括:
对于当前版本的源代码和更新版本的源代码,分别执行以下步骤S310至步骤S320。
S310,根据预设的构词规则,对源代码的字符流进行单词识别和扫描分类,生成token流。
S320,根据token流的元素层级,将token流转化为抽象语法树。
具体来说,对源代码的解析过程主要包括词法分析和语法分析,这两步是从源代码生成抽象语法树的关键。词法分析也叫扫描scanner,根据源代码的语言类型对应的构词规则,读取源代码中的字符流,并按照构词规则将读取到的字符流合并成一个个的标识token,同时移除空白符、注释等,当词法分析源代码的时候,它会一个一个字符地读取源代码,当它遇到空格、操作符或者特殊符号的时候,认为一个话已经完成了。最后将整个源代码进行分割进一个token列表即一堆数组,语法分析是将词法分析出来的数组转换成树形的形式,同时,验证语法。在生成树的时候,会删除没必要的标识token,比如不完整的括号等。token流中的字符元素具有嵌套的层级结构,根据嵌套的元素层级,将token流转化为抽象语法树。通过对源代码进行词法分析和语法分析,去除源代码的细节,保留源代码的语法结构,从而简化了源代码的特征,便于快速获得源代码中的调用接口,提高处理效率。
S230,获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合。
由于待测试对象的实际应用环境是各个不同的终端,待测试对象在终端运行过程中,需要调用对应的***接口来实现各项功能,若对于更新版本的所有接口,都能在各个不同的终端进行成功调用,则说明该待测试对象可以在各个不同的终端运行,不存在兼容性问题。对于需要调用的接口,在源代码的抽象语法树中都有对应的接口标识来进行标记。通过获取抽象语法树携带的调用接口标识,并将更新版本的抽象语法树中携带的调用接口标识与当前版本的抽象语法树中携带的调用接口标识进行比较,可以得到更新版本相对于当前版本的增量调用接口,从而得到由增量调用接口构成的增量调用接口集合。
在其中一个实施例中,如图4所示,获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合包括步骤S410至步骤S430。
S410,遍历抽象语法树,识别抽象语法树中的调用接口标识,得到当前版本的调用接口标识集以及更新版本的调用接口标识集。
S420,遍历当前版本的调用接口标识集,从更新版本的调用接口标识集中查找与遍历得到的各调用接口标识相同的调用接口标识。
S430,根据未查找到的调用接口标识,确定更新版本相较于当前版本的增量调用接口,构建增量调用接口集合。
在抽象语法树中,携带有源代码中所调用接口的接口标识,通过遍历当前版本的语法抽象树,可以识别出当前版本的抽象语法树中的调用接口标识,同理,更新版本的调用接口标识也可以通过同样的方法得到。在获取到当前版本的调用接口标识和更新版本的调用接口标识之后,将两个版本对应的调用接口标识进行比较,确定出更新版本相较于当前版本的增量调用接口。可以理解,由于要进行兼容性测试的是待测试对象的更新版本,故只需要确定出在更新版本中存在,但在当前版本中不存在的增量调用接口。
在一个具体的实施例中,首先,分别得到当前版本和更新版本的调用接口标识集合,然后,遍历更新版本的调用接口集合,对于遍历到的每一个调用接口,查找在当前版本的调用接口集合中是否存在相同的调用接口,若存在,则舍去该调用接口,若不存在,则保留该调用接口,得到更新版本相较于当前版本的增量调用接口,进而得到增量调用接口集合。避免了在比较过程中由于当前版本存在而更新版本不存在的差量调用接口所带来的干扰,提高了增量调用接口的识别速度,为快速便捷的实现兼容性测试提供了条件。
S240,获取与增量调用接口集合中各调用接口对应的接口测试用例。
在实施例中,增量调用接口集中包括一个接口或多个接口。对于增量调用接口集合中的每一个接口,均需要进行接口兼容性测试。接口兼容性测试通过接口测试用例来实现。接口测试用例是为待测试接口而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足特定需求的模式。具体来说,接口测试用例是一种黑盒测试,在接口测试过程中,并不需要了解待测试对象在各个终端运行时的内部逻辑结构,而是着眼于功能实现,只要能够实现正常的接口调用,返回测试用例的预设结果即可。
接口测试用例可以预先根据所有可能存在的接口需求进行编写,并预先存储于测试用例数据库中。其中,测试用例数据库中的每一个预先编写好的测试用例都携带有对应接口标识,根据增量调用接口集合中的调用接口的接口标识,可以通过对接口测试用例数据库的检索,快速查找到新增的调用接口对应的接口测试用例。
在其中一个实施例中,如图5所示,获取与增量调用接口集合中各调用接口对应的接口测试用例包括步骤S510至S520。
S510,获取增量调用接口集合中各增量调用接口的接口标识。
S520,从预设的测试用例数据库中读取与接口标识对应的接口测试用例。
对于增量调用接口,可以通过单元测试用例来进行兼容性测试。单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(如接口测试用例)测试函数是否功能正常,并且返回了正确的输出。单元测试用例可以实现对接口功能是否正常的测试。在实施例中,单元测试用例可以从预先存储有大量测试用例的测试用例数据库中直接检索得到,通过预设测试用例数据库,可以快速查找得到新增测试用例对应的单元测试用例,提高了测试用例的获取效率。
在其中一个实施例中,待测试对象包括应用于android环境的待测试对象。如图5所示,获取增量调用接口集合中各增量调用接口的接口标识之后,还包括步骤S530至步骤S540。
S530,当从预设的测试用例数据库中未读取到与接口标识对应的接口测试用例时,生成携带有接口标识的接口测试用例编写提示信息。
S540,获取基于android单元测试框架和接口测试用例编写提示信息中的接口标识编写的接口测试用例。
由于预设的测试用例数据库中的接口测试用例是预先编写的,对于增量调用接口可能存在无法查找得到对应接口测试用例的情况,当出现这种情况时,需要通过测试用例编写来得到对应的测试用例。接口测试用例的编写可以通过使用android单元测试框架,编写对应调用接口的接口测试用例,利用android单元测试框架,基于其框架特性,接口测试用例编写简单且容易维护,后续变更不频繁,且仅针对更新版本的增量调用接口进行接口测试用例编写,需要处理的增量调用接口数量有限,所以编写的投入产出比很高。
在一个实施例中饭,以增量调用接口type func A(param a,param b,param c)为例,通过构造参数x、y和z,在单元测试框架下直接调用type func A(x,y,z),检查返回结果。type func A(x,y,z)即一个接口测试用例。通过接口测试的方式来进行增量调用接口的兼容性来得到待测试用例的兼容性,简化了所需的测试用例的编写,一个UI自动化用例编写时间通常要半小时以上,而接口测试用例编写时间是1-2分钟。
对于新编写的接口测试用例,可以根据其对应的调用接口,将携带有调用接口的接口标识的接口测试用例添加至预设的测试用例数据库。由于更新版本仅相对于当前版本进行比较,对于后续对个版本迭代更新后,可能会再次出现相同的增量调用接口,例如,某调用接口A,在第二版本中存在,第三版本中存在,第四版本不存在,第五版本中又再次使用的调用接口,通过在第三版本中的兼容性检测中,该调用接口A作为增量调用接口,需要使用对应的接口测试用例进行测试,通过将该接口测试用例添加至预设的测试用例数据集,那么在进行第五版本的兼容性测试时,即可通过接口标识,快速从预设的测试用例数据库中查找得到该接口的接口测试用例,节省了接口测试用例的编写时间,提高兼容性测试效率。
S250,运行各接口测试用例,得到待测试对象的兼容性测试结果。
接口测试用例的运行可以在云测试机集群环境中进行,云测试机集群是一种包含市场上绝大多数手机等用于待测试对象运行的终端的测试平台,可远程操作平台手机等终端进行兼容性测试。云测试机集群的测试过程实际上是一种云测试过程。便于理解,以Testin云测试为例,其是一种真机自动化云测试服务平台,基于云端部署超过300款、3000部Pad、Phone、Touch、Smart TV等主流智能移动设备,实时上架最新终端,可实现自定义终端进行批量自动化兼容适配测试以及功能、性能、稳定性测试。
通过在云测试机集群中的各个终端上运行接口测试用例,根据返回的运行结果,可以快速得到每一个增量调用接口的兼容性测试结果表,从而根据每一个增量调用接口的兼容性情况,得到待测试对象的兼容性测试结果。具体来说,当增量调用接口集合中的每一个调用接口均具备兼容性时,表征更新版本的待测试对象相较于当前版本的新增接口均能在各个类型的终端设备中正常使用,故更新版本的待测试对象具有兼容性。
上述兼容性测试方法,一方面,通过对当前版本和更新版本的源码进行解析,通过解析源代码的抽象语法树获得的调用接口是完整的,不会有遗漏,实现了调用接口的全面获取。另一方面,通过比较当前版本和更新版本的调用接口标识,可以获取到新增的调用接口,利用接口测试用例对新增的调用接口进行兼容性测试,可以将问题聚焦在更新版本的增量调用接口,相较于对更新版本的全面检测,简化了测试对象的数量提高了测试效率,从而通过较少的接口测试用例,实现了对更新版本的待测试对象的全面高效的兼容性测试。
在一个实施例中,待测试对象包括应用于android环境的待测试APP(Application,应用程序)。如图6所示,运行各接口测试用例,得到待测试对象的兼容性测试结果之前,还包括:
步骤S610,将更新版本的待测试APP安装至云测试机集群中的各测试机。
运行各接口测试用例,得到待测试对象的兼容性测试结果包括步骤S620:
步骤S620,启动各测试机中安装的更新版本的待测试APP,在待测试APP中运行各接口测试用例,得到待测试APP的兼容性测试结果。
android的生态***具有特殊性,android厂商有近百家,每家都由修改***接口实现APP的接入,且没有公开修改的***接口,所以,即便获取了***接口和参数,也无法保证能在各类android手机能正常运行,传统的灰度一部分用户,让用户在使用应用时发现兼容性,并上报bug给业务团队的兼容性评估方式、以及通过编写UI自动化测试用例,找到兼容性问题的方式存在两个问题,第一个是测试不全面:灰度的用户不能涵盖所有机型;UI自动化测试的测试对象取决于编写者的主观选择,UI自动化测试和灰度都无法覆盖所有场景;第二个是耗时长:灰度和编写UI自动化用例均耗时很长,均以天计算。针对android生态***的特殊性,通过自动获取android***上运行应用的所有增量***接口,编写接口单元测试,通过在云测试机集群的各测试端中安装android环境的待测试APP,将增量调用接口的接口测试用例运行在云测试机集群上,一个UI自动化用例运行耗时通常是分钟级别,在数百台测试机运行测试用例集合,通常要几个小时;而接口测试用例运行耗时是在毫秒级别,在各测试机运行,只需要几分钟,可以快速精准检测兼容性问题。
在一个实施例中,运行各接口测试用例,得到待测试对象的兼容性测试结果包括:在云测试机集群上运行待测试APP,调用各接口测试用例,得到各测试机对于各增量调用接口的测试结果,当各增量调用接口的测试结果均为测试通过时,得到待测试APP的更新版本具备兼容性的测试结果。
通过对增量调用接口集合中的每一个增量调用接口进行兼容性测试,根据增量调用接口的测试结果来确定待测试APP的更新版本具备兼容性的测试结果。若存在任意一个接口在任意一个测试端中的测试结果与测试用例的预设返回结果不同时,则表征该待测试APP的更新版本存在兼容性问题,即其在该测试机中运行时会存在不能正常运行的兼容性问题。
通过对增量调用接口进行兼容性测试的方式来进行待测试对象如待测试APP的兼容性测试,可以通过各增量调用接口的兼容性问题快速定位故障点,便于进行修复。
在一个实施例中,提供了一种兼容性测试方法,如图7所示,包括以下步骤S702至S726。
S702,分别获取待测试对象的当前版本和更新版本的源代码。
S704,根据预设的构词规则,对源代码的字符流进行单词识别和扫描分类,生成token流。
S706,根据token流的元素层级,将token流转化为抽象语法树,得到当前版本的抽象语法树以及更新版本的抽象语法树。
S708,遍历抽象语法树,识别抽象语法树中的调用接口标识,得到当前版本的调用接口标识集以及更新版本的调用接口标识集;
S710,遍历当前版本的调用接口标识集,从更新版本的调用接口标识集中查找与遍历得到的各调用接口标识相同的调用接口标识;
S712,根据未查找到的调用接口标识,确定更新版本相较于当前版本的增量调用接口,构建增量调用接口集合。
S714,获取增量调用接口集合中各增量调用接口的接口标识。
S716,从预设的测试用例数据库中读取与接口标识对应的接口测试用例。
S718,当从预设的测试用例数据库中未读取到与接口标识对应的接口测试用例时,生成携带有接口标识的接口测试用例编写提示信息。
S720,获取基于android单元测试框架和接口测试用例编写提示信息中的接口标识编写的接口测试用例。
S722,将更新版本的待测试APP安装至云测试机集群中的各测试机。
S724,启动各测试机中安装的更新版本的待测试APP,在待测试APP中运行各接口测试用例,得到各测试机对于各增量调用接口的测试结果。
S726,当各增量调用接口的测试结果均为测试通过时,得到待测试APP的更新版本具备兼容性的测试结果。
如图8所示,在一个实施例中,确定增量调用接口集合的处理过程包括:获取应用Android环境中待测试APP老版本(即当前版本)的源代码,对老版本的源代码进行解析,得到老版本的抽象语法树,然后基于抽象语法树,得到老版本的调用接口集合,同理,获取新版本(即更新版本)的源代码,对新版本的源代码进行解析,得到新版本的抽象语法树,进而得到新版本的调用接口结合,通过对新老版本的调用接口集合进行比较,即可得到新版本相对于老版本的增量调用接口集合。
图2-图7为一个实施例中兼容性测试方法的流程示意图。应该理解的是,虽然图2-图7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-图7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图9所示,提供了一种兼容性测试装置900,装置包括:源代码获取模块910、源代码解析模块920、增量调用接口确定模块930、接口测试用例获取模块940以及兼容性测试模块950。其中:
源代码获取模块910,用于分别获取待测试对象当前版本和更新版本的源代码。
源代码解析模块920,用于对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树。
增量调用接口确定模块930,用于获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合。
接口测试用例获取模块940,用于获取与增量调用接口集合中各调用接口对应的接口测试用例。
兼容性测试模块950,用于运行各接口测试用例,得到待测试对象的兼容性测试结果。
在其中一个实施例中,源代码解析模块还用于对于当前版本的源代码和更新版本的源代码,分别执行以下步骤:根据预设的构词规则,对源代码的字符流进行单词识别和扫描分类,生成token流;根据token流的元素层级,将token流转化为抽象语法树。
在其中一个实施例中,增量调用接口确定模块还用于遍历抽象语法树,识别抽象语法树中的调用接口标识,得到当前版本的调用接口标识集以及更新版本的调用接口标识集;遍历当前版本的调用接口标识集,从更新版本的调用接口标识集中查找与遍历得到的各调用接口标识相同的调用接口标识;根据未查找到的调用接口标识,确定更新版本相较于当前版本的增量调用接口,构建增量调用接口集合。
在其中一个实施例中,接口测试用例获取模块还用于获取增量调用接口集合中各增量调用接口的接口标识;从预设的测试用例数据库中读取与接口标识对应的接口测试用例。
在其中一个实施例中,待测试对象包括应用于android环境的待测试对象;接口测试用例获取模块还用于当从预设的测试用例数据库中未读取到与接口标识对应的接口测试用例时,生成携带有接口标识的接口测试用例编写提示信息;获取基于android单元测试框架和接口测试用例编写提示信息中的接口标识编写的接口测试用例。
在其中一个实施例中,待测试对象包括应用于android环境的待测试APP;兼容性测试模块还用于将更新版本的待测试APP安装至云测试机集群中的各测试机。启动各测试机中安装的更新版本的待测试APP,在待测试APP中运行各接口测试用例,得到待测试APP的兼容性测试结果。
在其中一个实施例中,兼容性测试模块还用于在云测试机集群上运行待测试APP,调用各接口测试用例,得到各测试机对于各增量调用接口的测试结果;当各增量调用接口的测试结果均为测试通过时,得到待测试APP的更新版本具备兼容性的测试结果。
上述兼容性测试装置,一方面,通过对当前版本和更新版本的源码进行解析,通过解析源代码的抽象语法树获得的调用接口是完整的,不会有遗漏,实现了调用接口的全面获取。另一方面,通过比较当前版本和更新版本的调用接口标识,可以获取到新增的调用接口,利用接口测试用例对新增的调用接口进行兼容性测试,可以将问题聚焦在更新版本的增量调用接口,相较于对更新版本的全面检测,简化了测试对象的数量提高了测试效率,从而通过较少的接口测试用例,实现了对更新版本的待测试对象的全面高效的兼容性测试。
关于兼容性测试装置的具体限定可以参见上文中对于兼容性测试法的限定,在此不再赘述。上述兼容性测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图10示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的服务器110。如图10所示,该计算机设备包括该计算机设备包括通过***总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现兼容性测试方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行兼容性测试方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的兼容性测试装置可以实现为一种计算机程序的形式,计算机程序可在如图10所示的计算机设备上运行。计算机设备的存储器中可存储组成该兼容性测试装置的各个程序模块,比如,图9所示的源代码获取模块910、源代码解析模块920、增量调用接口确定模块930、接口测试用例获取模块940以及兼容性测试模块950。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的兼容性测试方法中的步骤。
例如,图10所示的计算机设备可以通过如图9所示的兼容性测试装置中的源代码获取模块910执行分别获取待测试对象当前版本和更新版本的源代码。计算机设备可通过源代码解析模块920执行对当前版本的源代码和更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树。计算机设备可通过增量调用接口确定模块930执行获取抽象语法树携带的调用接口标识,对各版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合。计算机设备可通过接口测试用例获取模块940执行获取与增量调用接口集合中各调用接口对应的接口测试用例。计算机设备可通过兼容性测试模块950执行运行各接口测试用例,得到待测试对象的兼容性测试结果。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述兼容性测试方法的步骤。此处兼容性测试方法的步骤可以是上述各个实施例的兼容性测试方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述兼容性测试方法的步骤。此处兼容性测试方法的步骤可以是上述各个实施例的兼容性测试方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种兼容性测试方法,包括:
分别获取待测试对象当前版本和更新版本的源代码;
对所述当前版本的源代码和所述更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
获取所述抽象语法树携带的调用接口标识,对各所述版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
获取与所述增量调用接口集合中各调用接口对应的接口测试用例;
运行各所述接口测试用例,得到待测试对象的兼容性测试结果。
2.根据权利要求1所述的方法,其特征在于,所述对所述当前版本的源代码和所述更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树包括:
对于所述当前版本的源代码和所述更新版本的源代码,分别执行以下步骤:
根据预设的构词规则,对源代码的字符流进行单词识别和扫描分类,生成token流;
根据所述token流的元素层级,将所述token流转化为抽象语法树。
3.根据权利要求1所述的方法,其特征在于,所述获取所述抽象语法树携带的调用接口标识,对各所述版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合包括:
遍历所述抽象语法树,识别所述抽象语法树中的调用接口标识,得到所述当前版本的调用接口标识集以及所述更新版本的调用接口标识集;
遍历所述当前版本的调用接口标识集,从所述更新版本的调用接口标识集中查找与遍历得到的各调用接口标识相同的调用接口标识;
根据未查找到的调用接口标识,确定所述更新版本相较于所述当前版本的增量调用接口,构建增量调用接口集合。
4.根据权利要求1所述的方法,其特征在于,所述获取与所述增量调用接口集合中各调用接口对应的接口测试用例包括:
获取所述增量调用接口集合中各增量调用接口的接口标识;
从预设的测试用例数据库中读取与所述接口标识对应的接口测试用例。
5.根据权利要求4所述的方法,其特征在于,所述待测试对象包括应用于android环境的待测试对象;
所述获取所述增量调用接口集合中各增量调用接口的接口标识之后,还包括:
当从预设的测试用例数据库中未读取到与所述接口标识对应的接口测试用例时,生成携带有所述接口标识的接口测试用例编写提示信息;
获取基于android单元测试框架和所述接口测试用例编写提示信息中的接口标识编写的接口测试用例。
6.根据权利要求1所述的方法,其特征在于,所述待测试对象包括应用于android环境的待测试APP;
所述运行各所述接口测试用例,得到待测试对象的兼容性测试结果之前,还包括:
将更新版本的待测试APP安装至云测试机集群中的各测试机;
所述运行各所述接口测试用例,得到待测试对象的兼容性测试结果包括:
启动各所述测试机中安装的更新版本的待测试APP,在各所述待测试APP中运行各所述接口测试用例,得到待测试APP的兼容性测试结果。
7.根据权利要求6所述的方法,其特征在于,所述运行各所述接口测试用例,得到待测试对象的兼容性测试结果包括:
在云测试机集群上运行所述待测试APP,调用各所述接口测试用例,得到各所述测试机对于各增量调用接口的测试结果;
当各所述增量调用接口的测试结果均为测试通过时,得到所述待测试APP的更新版本具备兼容性的测试结果。
8.一种兼容性测试装置,其特征在于,所述装置包括:
源代码获取模块,用于分别获取待测试对象当前版本和更新版本的源代码;
源代码解析模块,用于对所述当前版本的源代码和所述更新版本的源代码进行解析处理,得到各版本的源代码对应的抽象语法树;
增量调用接口确定模块,用于获取所述抽象语法树携带的调用接口标识,对各所述版本对应的调用接口标识进行比较,确定增量调用接口,构建增量调用接口集合;
接口测试用例获取模块,用于获取与所述增量调用接口集合中各调用接口对应的接口测试用例;
兼容性测试模块,用于运行各所述接口测试用例,得到待测试对象的兼容性测试结果。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010137997.0A CN111382070B (zh) | 2020-03-03 | 2020-03-03 | 兼容性测试方法、装置、存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010137997.0A CN111382070B (zh) | 2020-03-03 | 2020-03-03 | 兼容性测试方法、装置、存储介质和计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111382070A true CN111382070A (zh) | 2020-07-07 |
CN111382070B CN111382070B (zh) | 2022-03-04 |
Family
ID=71215282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010137997.0A Active CN111382070B (zh) | 2020-03-03 | 2020-03-03 | 兼容性测试方法、装置、存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111382070B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563051A (zh) * | 2020-07-16 | 2020-08-21 | 平安国际智慧城市科技股份有限公司 | 基于爬虫的数据核验方法、装置、计算机设备及存储介质 |
CN111782556A (zh) * | 2020-08-26 | 2020-10-16 | 中国银行股份有限公司 | 一种自动测试方法及装置 |
CN112202951A (zh) * | 2020-09-29 | 2021-01-08 | 中国银行股份有限公司 | 一种手机兼容性测试方法和相关装置 |
CN113568834A (zh) * | 2021-07-28 | 2021-10-29 | 南方电网数字电网研究院有限公司 | Sdk代码的兼容性检测方法、装置、计算机设备和介质 |
CN113609023A (zh) * | 2021-08-16 | 2021-11-05 | 未鲲(上海)科技服务有限公司 | 精准测试方法、装置、设备及存储介质 |
CN113934642A (zh) * | 2021-11-19 | 2022-01-14 | 四川启睿克科技有限公司 | 一种基于动静态结合的软件兼容性测试方法 |
CN115658374A (zh) * | 2022-12-23 | 2023-01-31 | 深圳市明源云科技有限公司 | 平台兼容性问题修复方法、装置、电子设备及存储介质 |
CN116383088A (zh) * | 2023-05-06 | 2023-07-04 | 中国科学技术大学 | 一种源代码形式化验证方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248405A1 (en) * | 2005-03-21 | 2006-11-02 | Ponczak Joseph M | Method for automating unit test development |
CN103577311A (zh) * | 2012-07-26 | 2014-02-12 | 深圳市世纪光速信息技术有限公司 | 一种测试用例筛选方法及装置 |
US20140331203A1 (en) * | 2013-05-01 | 2014-11-06 | International Business Machines Corporation | Analysis of source code changes |
CN105589801A (zh) * | 2014-10-20 | 2016-05-18 | 网易(杭州)网络有限公司 | 手机集群测试方法和*** |
CN105843614A (zh) * | 2016-03-22 | 2016-08-10 | 东南大学 | 一种面向软件演化的代码可兼容性评估方法 |
CN106951228A (zh) * | 2017-02-21 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 版本迭代中差异的处理方法和装置 |
CN107451050A (zh) * | 2017-06-20 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 函数获取方法和装置、服务器 |
CN109240911A (zh) * | 2018-08-13 | 2019-01-18 | 腾讯科技(北京)有限公司 | 精准测试方法、装置和计算机设备 |
CN109857641A (zh) * | 2018-12-29 | 2019-06-07 | 北京奇安信科技有限公司 | 对程序源文件进行缺陷检测的方法及装置 |
-
2020
- 2020-03-03 CN CN202010137997.0A patent/CN111382070B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248405A1 (en) * | 2005-03-21 | 2006-11-02 | Ponczak Joseph M | Method for automating unit test development |
CN103577311A (zh) * | 2012-07-26 | 2014-02-12 | 深圳市世纪光速信息技术有限公司 | 一种测试用例筛选方法及装置 |
US20140331203A1 (en) * | 2013-05-01 | 2014-11-06 | International Business Machines Corporation | Analysis of source code changes |
CN105589801A (zh) * | 2014-10-20 | 2016-05-18 | 网易(杭州)网络有限公司 | 手机集群测试方法和*** |
CN105843614A (zh) * | 2016-03-22 | 2016-08-10 | 东南大学 | 一种面向软件演化的代码可兼容性评估方法 |
CN106951228A (zh) * | 2017-02-21 | 2017-07-14 | 腾讯科技(深圳)有限公司 | 版本迭代中差异的处理方法和装置 |
CN107451050A (zh) * | 2017-06-20 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 函数获取方法和装置、服务器 |
CN109240911A (zh) * | 2018-08-13 | 2019-01-18 | 腾讯科技(北京)有限公司 | 精准测试方法、装置和计算机设备 |
CN109857641A (zh) * | 2018-12-29 | 2019-06-07 | 北京奇安信科技有限公司 | 对程序源文件进行缺陷检测的方法及装置 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563051A (zh) * | 2020-07-16 | 2020-08-21 | 平安国际智慧城市科技股份有限公司 | 基于爬虫的数据核验方法、装置、计算机设备及存储介质 |
CN111782556A (zh) * | 2020-08-26 | 2020-10-16 | 中国银行股份有限公司 | 一种自动测试方法及装置 |
CN112202951A (zh) * | 2020-09-29 | 2021-01-08 | 中国银行股份有限公司 | 一种手机兼容性测试方法和相关装置 |
CN113568834A (zh) * | 2021-07-28 | 2021-10-29 | 南方电网数字电网研究院有限公司 | Sdk代码的兼容性检测方法、装置、计算机设备和介质 |
CN113609023A (zh) * | 2021-08-16 | 2021-11-05 | 未鲲(上海)科技服务有限公司 | 精准测试方法、装置、设备及存储介质 |
CN113934642A (zh) * | 2021-11-19 | 2022-01-14 | 四川启睿克科技有限公司 | 一种基于动静态结合的软件兼容性测试方法 |
CN113934642B (zh) * | 2021-11-19 | 2024-05-14 | 四川启睿克科技有限公司 | 一种基于动静态结合的软件兼容性测试方法 |
CN115658374A (zh) * | 2022-12-23 | 2023-01-31 | 深圳市明源云科技有限公司 | 平台兼容性问题修复方法、装置、电子设备及存储介质 |
CN116383088A (zh) * | 2023-05-06 | 2023-07-04 | 中国科学技术大学 | 一种源代码形式化验证方法、装置、设备及存储介质 |
CN116383088B (zh) * | 2023-05-06 | 2023-09-05 | 中国科学技术大学 | 一种源代码形式化验证方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111382070B (zh) | 2022-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111382070B (zh) | 兼容性测试方法、装置、存储介质和计算机设备 | |
CN108614707B (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
US11307975B2 (en) | Machine code analysis for identifying software defects | |
CN111026433A (zh) | 基于代码变更历史的软件代码质量问题自动修复方法、***及介质 | |
CN112241360A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN103186463B (zh) | 确定软件的测试范围的方法和*** | |
CN105389262A (zh) | 一种针对界面测试生成测试建议的方法和装置 | |
CN112328499A (zh) | 一种测试数据生成方法、装置、设备及介质 | |
CN117113347A (zh) | 一种大规模代码数据特征提取方法及*** | |
US11163924B2 (en) | Identification of changes in functional behavior and runtime behavior of a system during maintenance cycles | |
CN113094252A (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN112069052A (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN117493188A (zh) | 接口测试方法及装置、电子设备及存储介质 | |
CN112988578A (zh) | 一种自动化测试方法和装置 | |
CN117407312A (zh) | 应用测试方法、装置、计算机设备及存储介质 | |
CN116820996A (zh) | 基于人工智能的集成测试用例自动生成方法和装置 | |
CN111078529A (zh) | 客户端写入模块测试方法、装置、电子设备 | |
CN115438026A (zh) | 一种数据库扫描方法、装置、设备、存储介质及产品 | |
CN114385155A (zh) | vue项目可视化工具生成方法、装置、设备及存储介质 | |
CN115705297A (zh) | 代码调用检测方法、装置、计算机设备以及存储介质 | |
CN113672512A (zh) | 代码检查规则生成方法、代码检查方法、装置、介质 | |
CN109374038B (zh) | 一种基于应用样机的核安全级仪控产品的变更测试方法 | |
CN115269402B (zh) | 测试数据匹配方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |