CN111258884B - 一种用于自动生成接口准确性校验脚本的*** - Google Patents
一种用于自动生成接口准确性校验脚本的*** Download PDFInfo
- Publication number
- CN111258884B CN111258884B CN202010017424.4A CN202010017424A CN111258884B CN 111258884 B CN111258884 B CN 111258884B CN 202010017424 A CN202010017424 A CN 202010017424A CN 111258884 B CN111258884 B CN 111258884B
- Authority
- CN
- China
- Prior art keywords
- interface
- request
- definition file
- parameter
- file
- 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
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/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/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/267—Reconfiguring circuits for testing, e.g. LSSD, partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种用于自动生成接口准确性校验脚本的***,它包括以下模块:输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;输出模块,其设有接口定义文件、接口模型类以及接口测试文件。本发明的目的在于提供一种用于自动生成接口准确性校验脚本的***。本发明的优点在于:本测试***可以根据接口文档及接口场景定义文件快速生成测试脚本,而减少人工编写脚本的成本;同时可以快速跟进项目,降低由于测试过程耗时过长导致项目延期的风险。
Description
技术领域
本发明涉及接口自动化测试,特别是一种用于自动生成接口准确性校验脚本的***。
背景技术
当前市场上的接口自动化测试基本上都是通过人工对照一个个接口文档,然后编写出一个个接口测试函数及接口测试文件,而编写接口准确性测试函数时,测试覆盖度往往会因人而异,造成接口测试不完整的现象;另外,一般手动编写接口测试函数时往往需要定期维护多份测试数据;再者,当一个接口中存在大量请求参数时,在每个接口测试函数中都要重新拼接一次接口请求体,这就造成一个接口测试文件的代码量非常庞大,难以维护。
发明内容
本发明的目的在于提供一种用于自动生成接口准确性校验脚本的***。
本发明的目的通过如下技术方案实现:一种用于自动生成接口准确性校验脚本的***,它包括以下模块:输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;输出模块,其设有接口定义文件、接口模型类以及接口测试文件;所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以JSON 形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件,接口测试文件中包含多个测试函数,每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的JSON形式的请求体,接着根据服务器配置文件拼接请求URL,并发送接口请求;最后对比接口响应的实际值与预期值。
较之现有技术而言,本发明的优点在于:
1.本测试***可以根据接口文档及接口场景定义文件快速生成测试脚本,而减少人工编写脚本的成本;同时可以快速跟进项目,降低由于测试过程耗时过长导致项目延期的风险。
2.本测试方案可以覆盖单接口准确性校验的所有测试场景,避免该测试范围内的漏测。
3.本测试方案只需维护接口文档、参数校验场景定义文件、被测服务配置文件,不需要维护大量的测试数据及测试脚本,从而解放人力成本。
附图说明
图1是本发明的总流程图。
图2是接口定义文件生成工具的工作流程图。
图3是接口模型类生成工具的工作流程图。
图4是参数校验脚本生成工具的工作流程图。
具体实施方式
下面结合说明书附图和实施例对本发明内容进行详细说明:
如图1至4所示为本发明提供的一种用于自动生成接口准确性校验脚本的***的实施例示意图。
本发明可覆盖的接口协议包括:HTTP/HTTPS/SOCKET,本发明可以覆盖的测试场景包括:接口请求参数的正确性校验的测试场景。
一种用于自动生成接口准确性校验脚本的***,其特征在于,它包括以下模块:
输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;
工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;
输出模块,其设有接口定义文件、接口模型类以及接口测试文件;
所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以JSON形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;
接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;
参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件 (测试文件的命名格式一般为:test+场景定义文件名),接口测试文件中包含多个测试函数(测试函数中包括:测试数据、接口请求、接口响应数据的校验),每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的JSON形式的请求体,接着根据服务器配置文件拼接请求URL,并发送接口请求;最后对比接口响应的实际值与预期值。
所述参数校验场景定义文件中存储有目标测试接口;
接口请求模型定义文件存储有目标接口的所有目标测试参数;
服务器配置文件存储有被测服务器的IP及PORT;
接口非法响应模型定义文件存储有非法长度、非法数据类型、非法格式、非法必填字段的响应码与响应信息。
接口定义文件生成工具的工作步骤如下:
S1.读取接口文档,获取接口名:遍历接口文档中每个接口的接口名,并将接口名保存至缓存变量interface中;
S2.读取接口请求参数标识,创建接口请求模型定义文件,文件名为: interface的值;
S3.遍历请求参数列表,将列表中每个参数及其约束条件保存至接口请求模型定义文件中,存储格式为JSON串,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息等;
接口请求模型定义文件模板如下:
S4.读取接口响应参数标识,创建接口非法响应模型定义文件,文件名为:interface的值+_result;
S5.遍历响应参数列表,将列表中每个参数及其约束条件保存至接口非法响应模型定义文件中,存储格式为JSON串,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息等。
接口非法响应模型定义文件模板如下:
接口模型类生成工具的工作步骤如下:
S1.获取接口请求模型定义文件的接口名,创建接口模型类文件,文件名为接口名:遍历接口请求模型定义文件,获取接口名并保存至缓存变量interface 中,创建接口模型类文件,文件名为interface的值;
S2.在接口模型类文件中创建一个类,类名为接口名,即类名为interface 的值;
S3.遍历接口请求模型定义文件的参数列表,读取每个参数的参数名及其约束条件,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息;
S4.将参数名设置为模型类的成员变量名,参数的默认值作为成员变量的初始值;
self._参数1="参数1默认值"
self._参数2='参数2默认值'
S5.分别为每个成员变量创建一个修改变量值函数与获取变量值函数,这些函数都为模型类的成员函数。通过这些成员函数,使得使用者可以根据需要随时修改请求参数的值,以满足特定的测试场景;
@property
def参数1(self):
return self._参数1
@参数1.setter
def参数1(self,参数1新值):
self._参数1=参数1新值
S6.为模型类创建一个根据成员变量拼接接口请求体的成员函数,该成员函数可以使得每次请求接口时不用重新拼装请求体,减少测试脚本的代码量及维护测试数据的量。
生成后的模型类文件完整模板如下:
class接口名(object):
def__init__(self):
self._参数1="参数1默认值"
self._参数2='参数2默认值'
@property
def参数1(self):
return self._参数1
@参数1.setter
def参数1(self,参数1新值):
self._参数1=参数1新值
@property
def参数2(self):
return self._参数2
@参数2.setter
def参数2(self,参数2新值):
self._参数2=参数2新值
参数校验脚本生成工具的工作步骤如下:
S1.读取参数校验场景定义文件,获取接口名、待变更参数列表、接口描述信息,并将其存至缓存变量;
参数校验场景定义文件,主要定义单个接口的参数校验测试场景,定义模板如下:
S2.创建接口测试文件,文件名为:test+参数校验场景定义文件名;
S3.读取参数校验场景定义文件,获取待变更参数值列表,为列表中参数设置最新值;如果列表不为空,则为列表中参数设置最新值,如果列表为空则跳过这一步;
S4.遍历读取接口请求模型定义文件,获取每个请求参数(数据类型、格式、长度、必填标识、默认值、描述信息)及其约束条件;
S5.分别为每个请求参数的每个约束条件创建一个或多个反向用例函数,以验证约束条件的有效性;同时为每个反向用例函数生成反向测试数据;
以Python为例,Python中修改变量值函数可以直接通过变量名实现,其它编程语言可以通过类似的方法实现。
数据类型约束条件测试数据:
当请求参数数据类型约束条件为Integer类型时,那么设置一个不属于该数据类型的值,如设置参数值为Float类型。参考伪代码如下:
if param_type=="Integer":
invalid_type_param=rand_digit(int(param_length)-1,"float")
test_param="self.模型类."+param+"=float("+invalid_type_param+")"
长度约束条件测试数据:
当请求参数长度约束条件为最大长度为20,那么就为该请求参数设置一个长度大于20的值,修改方式通过调用修改变量值函数实现。参考伪代码如下:
invalid_length_value=randomword(int(param_length)+1) test_param="self.模型类."+param+"='"+str(invalid_length_value)+"'"
格式约束条件测试数据:
当请求参数格式约束条件为"yyyyMMddHHmmssSSS",那么设置一个不属于该格式的值,如设置新格式为("yyyy-MM-dd")。参考伪代码如下:
必填约束条件测试数据:
当请求参数必填约束条件为真时,那么设置将该请求参数值设置为空。参考伪代码如下:
if param_require==True:
invalid_require_value=""
test_param="self.模型类."+param+"="+invalid_require_value
S6.调用接口模型类中的获取请求体函数为请求接口拼接请求体;(将新设置的请求参数名及其值传给获取请求体函数,以使得测试函数拥有预期的接口请求体;)
S7.读取目标服务配置文件,获取目标服务器的IP及PORT信息,并根据 IP、PORT、接口名、接口请求体为每个接口测试函数拼装出一个完整的接口请求,然后根据特定请求协议请求该接口;
S8.遍历读取接口非法响应模型定义文件,获取响应参数列表及其对应的约束条件,约束条件包括:数据类型、格式、长度及默认值;
S9.比对接口请求响应的实际值与接口非法响应模型定义文件中的预期值,对比内容包括响应参数的数据类型、格式、长度及默认值;如果一致则表示该接口测试函数测试通过;不一致则表示该接口测试函数测试失败;将以上生成的接口测试函数都写入接口测试文件中。
本发明实现的核心伪代码如下:
def make_test_cases_for_length():
taps=""
taps2=taps+taps
#从参数校验场景定义文件中读取接口信息,接口信息存放至缓存变量keywords_define_info中
keywords_file=open("参数校验场景定义文件",encoding="utf-8")
keywords_file_buffer=json.load(keywords_file)
keywords_define_info=keywords_file_buffer["接口名"]
#创建测试脚本文件
test_case_path="test_"+"参数校验场景定义文件名"+".py"
test_case_file=open(test_case_path,"w",encoding="utf-8")
#从接口请求模型定义文件中读取接口每个参数的每个约束条件
interface_request_define_file=open("接口请求模型定义文件","r",encoding="utf-8")
interface_request_define_buffer=json.load(interface_request_define_file)
for param in interface_request_define_buffer.keys():
#获取每个参数的长度约束条件,并存至缓存变量param_length中
param_length=interface_request_define_buffer[param]["length"]
#获取每个参数的数据类型约束条件,并存至缓存变量param_type中
param_type=interface_request_define_buffer[param]["type"]
#为请求参数的长度约束条件创建测试函数名
test_case_file.write(taps+"def test_"+"接口名"+"_"+param+ "_with_invalid_length(self):\n")
#为该测试函数拼接用例场景描述
description=keywords_define_info["description"]+",字段"+param+" 为"+param_type+"且长度不在范围内"
test_case_file.write(taps2+"###############"+description+"##############\n")
#在测试脚本中引用模型类
test_case_file.write(taps2+"import模型类\n")
test_case_file.write(taps2+"interface_model=new模型类\n")
#判断参数校验场景定义文件中是否为参数设置了新值,如果设置了则通过修改成员变量函数更改参数值
#Python中,修改成员变量函数可以直接通过变量名访问,其他语言可以通过其他方式实现访问
#为参数param拼接一条长度不符合长度约束的测试数据,然后通过修改成员变量函数更改参数值
invalid_length_value=co_rand.randomword(int(param_length)+1)
test_param="self.interface_model."+param+"='"+ str(invalid_length_value)+"'"
test_case_file.write(taps2+test_param)
#调用获取请求体函数获取更新请求体
test_case_file.write(taps2+"request_json_body=self.interface_model.获取请求体函数")
#读取服务器配置文件获取被测服务器的IP及PORT,并拼接请求URL
test_case_file.write(taps2+"url=IP:PORT\n")
#请求接口,包括请求URL,请求体
test_case_file.write(taps2+"import requests\n")
test_case_file.write(taps2+"actual_response=requests.post(url,request_json_body)\n")
#读取接口非法响应模型定义文件,获取预期非法响应码与预期非法响应信息
except_response_file=open("接口非法响应模型定义文件","r", encoding="utf-8")
except_response_buffer=json.load(except_response_file)
#对比预期响应值与实际响应值
test_case_file.write(taps2+"self.assertEqual("+ except_response_buffer['invalid_length']['code']+",actual_response['code'])\n")
test_case_file.write(taps2+"self.assertEqual("+ except_response_buffer['invalid_length']['message']+ ",actual_response['message'])\n")。
Claims (3)
1.一种用于自动生成接口准确性校验脚本的***,其特征在于,它包括以下模块:
输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;
工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;
输出模块,其设有接口定义文件、接口模型类以及接口测试文件;
所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以JSON形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;
接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;
参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件,接口测试文件中包含多个测试函数,每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的JSON形式的请求体,接着根据服务器配置文件拼接请求URL,并发送接口请求;最后对比接口响应的实际值与预期值;
所述参数校验场景定义文件中存储有目标测试接口;
接口请求模型定义文件存储有目标接口的所有目标测试参数;
服务器配置文件存储有被测服务器的IP及PORT;
接口非法响应模型定义文件存储有非法长度、非法数据类型、非法格式、非法必填字段的响应码与响应信息;
参数校验脚本生成工具的工作步骤如下:
S1. 读取参数校验场景定义文件,获取接口名、待变更参数列表、接口描述信息;
S2. 创建接口测试文件;
S3. 读取参数校验场景定义文件,获取待变更参数值列表,为列表中参数设置最新值;
S4. 遍历读取接口请求模型定义文件,获取每个请求参数及其约束条件;
S5. 分别为每个请求参数的每个约束条件创建一个或多个反向用例函数,同时为每个反向用例函数生成反向测试数据;
S6. 调用接口模型类中的获取请求体函数为请求接口拼接请求体;
S7. 读取目标服务配置文件,获取目标服务器的IP及PORT信息,并根据IP 、PORT、接口名、接口请求体为每个接口测试函数拼装出一个完整的接口请求,然后根据特定请求协议请求该接口;
S8. 遍历读取接口非法响应模型定义文件,获取响应参数列表及其对应的约束条件;
S9. 比对接口请求响应的实际值与接口非法响应模型定义文件中的预期值,将以上生成的接口测试函数都写入接口测试文件中。
2.根据权利要求1所述的一种用于自动生成接口准确性校验脚本的***,其特征在于:
接口定义文件生成工具的工作步骤如下:
S1. 读取接口文档,获取接口名;
S2. 读取接口请求参数标识,创建接口请求模型定义文件;
S3. 遍历请求参数列表,将参数及其约束条件保存至接口请求模型定义文件,存储格式为JSON串;
S4. 读取接口响应参数标识,创建接口非法响应模型定义文件;
S5. 遍历响应参数列表,将参数及其约束条件保存至接口非法响应模型定义文件,存储格式为JSON串。
3.根据权利要求2所述的一种用于自动生成接口准确性校验脚本的***,其特征在于:
接口模型类生成工具的工作步骤如下:
S1. 获取接口请求模型定义文件的接口名,创建接口模型类文件,文件名为接口名;
S2. 在接口模型类文件中创建一个类,类名为接口名;
S3. 遍历接口请求模型定义文件的参数列表,读取参数名及其约束条件;
S4. 将参数名设置为模型类的成员变量名,参数的默认值作为成员变量的初始值;
S5. 分别为每个成员变量创建一个修改变量值函数与获取变量值函数;
S6. 为模型类创建一个根据成员变量拼接接口请求体的成员函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010017424.4A CN111258884B (zh) | 2020-01-08 | 2020-01-08 | 一种用于自动生成接口准确性校验脚本的*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010017424.4A CN111258884B (zh) | 2020-01-08 | 2020-01-08 | 一种用于自动生成接口准确性校验脚本的*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111258884A CN111258884A (zh) | 2020-06-09 |
CN111258884B true CN111258884B (zh) | 2022-08-19 |
Family
ID=70952527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010017424.4A Active CN111258884B (zh) | 2020-01-08 | 2020-01-08 | 一种用于自动生成接口准确性校验脚本的*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111258884B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112346989B (zh) * | 2020-11-26 | 2023-06-20 | 网易(杭州)网络有限公司 | 一种接口测试方法、装置、介质和计算设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107480053A (zh) * | 2017-07-21 | 2017-12-15 | 杭州销冠网络科技有限公司 | 一种软件测试数据生成方法及装置 |
CN109408375A (zh) * | 2018-09-27 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 接口文档的生成方法和装置 |
US10521195B1 (en) * | 2019-03-19 | 2019-12-31 | Servicenow, Inc. | Guided definition of an application programming interface action for a workflow |
-
2020
- 2020-01-08 CN CN202010017424.4A patent/CN111258884B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107480053A (zh) * | 2017-07-21 | 2017-12-15 | 杭州销冠网络科技有限公司 | 一种软件测试数据生成方法及装置 |
CN109408375A (zh) * | 2018-09-27 | 2019-03-01 | 深圳壹账通智能科技有限公司 | 接口文档的生成方法和装置 |
US10521195B1 (en) * | 2019-03-19 | 2019-12-31 | Servicenow, Inc. | Guided definition of an application programming interface action for a workflow |
Non-Patent Citations (1)
Title |
---|
面向需求覆盖的Web服务自动化测试框架;李吟;《计算机科学与探索》;20171130;第1-14页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111258884A (zh) | 2020-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111221735B (zh) | 一种用于自动生成业务交互测试脚本的*** | |
CN112148509A (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
CN108959076A (zh) | 一种api在线调试方法 | |
CN111143358A (zh) | 报表配置方法和*** | |
CN106648682B (zh) | 一种面向嵌入式***开发的动态数据通用框架 | |
CN111984228B (zh) | 一种接口文档的处理方法、装置、计算机设备和存储介质 | |
CN110020358B (zh) | 用于生成动态页面的方法和装置 | |
CN111309593A (zh) | Json接口校验的方法、装置、设备及计算机可读存储介质 | |
CN111400246B (zh) | 异步导入文件方法、装置、计算机设备和存储介质 | |
WO2020232883A1 (zh) | 脚本缺陷扫描方法、装置、计算机设备和存储介质 | |
CN113434175B (zh) | 数据处理方法、装置、存储介质及设备 | |
CN110515827A (zh) | 自动化测试方法、装置、计算机设备及存储介质 | |
CN110297761A (zh) | 返回数据的获取方法、装置、计算机设备及存储介质 | |
CN108664546B (zh) | Xml数据结构转换方法和装置 | |
CN113626223A (zh) | 一种接口调用方法和装置 | |
CN111258884B (zh) | 一种用于自动生成接口准确性校验脚本的*** | |
CN111723019A (zh) | 接口的调试方法及*** | |
CN112395339B (zh) | ***间数据准入校验方法、装置、计算机设备和存储介质 | |
CN109429260B (zh) | 一种北向数据的校验方法及装置 | |
CN117762865A (zh) | 大数据平台的数据入湖方法及*** | |
CN111078529B (zh) | 客户端写入模块测试方法、装置、电子设备 | |
CN111881043A (zh) | 页面测试方法、装置、存储介质和处理器 | |
CN116048981A (zh) | 一种后端接口测试用例设计方法、装置、介质及设备 | |
CN104572145B (zh) | 文件版本管理方法及*** | |
CN109816462A (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 |