CN113190463B - 一种代码测试方法,节点及*** - Google Patents
一种代码测试方法,节点及*** Download PDFInfo
- Publication number
- CN113190463B CN113190463B CN202110583278.6A CN202110583278A CN113190463B CN 113190463 B CN113190463 B CN 113190463B CN 202110583278 A CN202110583278 A CN 202110583278A CN 113190463 B CN113190463 B CN 113190463B
- Authority
- CN
- China
- Prior art keywords
- test
- file
- node
- data
- comparison
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 454
- 238000003860 storage Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 14
- 238000004519 manufacturing process Methods 0.000 claims description 5
- 238000000034 method Methods 0.000 abstract description 24
- 238000012545 processing Methods 0.000 abstract description 16
- 230000002349 favourable effect Effects 0.000 abstract description 9
- 230000006870 function Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000000007 visual effect Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 239000000872 buffer Substances 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000033764 rhythmic process Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3664—Environments for testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供一种代码测试方法,节点及***,可用于测试安全技术领域,包括:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
Description
技术领域
本申请涉及计算机技术领域,具体涉及代码测试方法,节点及***。
背景技术
当前银行和互联网业务随着人们日新月异的生活需求而不断发展创新,业务***的迭代更新节奏加快。分布式技术已成为企业数字化转型的核心基础设施,分布式批量框架是分布式技术的重要组成部分,基于此框架而产生的自动化测试需求也迫在眉睫。自动化测试技术传统的方法是基于某种测试框架,编写测试案例和执行测试案例,通过测试案例中编写的断言来判断运行结果是否符合预期,从而达到自动化测试的目的。这种传统方法对断言的编写要求比较高,对案例输入场景的数据要求高,而且针对的业务场景有限,并不适用于涉及大量数据的批量处理业务的测试场景。
发明内容
针对现有技术中的问题,本申请提供一种代码测试方法,节点及***,方法包括:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
本发明的一方面,提供一种代码测试方法,所述方法应用于分布式***中的任一节点,其中所述分布式***中每个节点配置至少一个测试案例,并且每个节点配置的测试数据不同,包括:
获取配置的所有测试案例对应所需的测试数据;
在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
在优选的实施例中,还包括:
若首次执行测试案例,则将执行结果文件作为预设的标准文件。
在优选的实施例中,所述标准文件包括业务结果文件和数据库结果文件,与其对应的所述标准文件包括业务标准文件和数据库标准文件。
在优选的实施例中,还包括:
采用yml格式文件对所述测试案例进行配置。
在优选的实施例中,所述yml格式文件,包括:
测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
在优选的实施例中,所述测试数据包括测试环境产生的业务数据或生产环境的业务数据。
在优选的实施例中,所述将所述测试数据配置至对应的测试案例中,包括:
根据所述测试案例的测试数据需求,编写相应的数据库语句;
将所述数据库语句***至测试案例的测试类中。
在优选的实施例中,所述将所述测试数据配置至对应的测试案例中,包括:将所述测试数据***与测试案例的测试类相对应的数据表格中。
在优选的实施例中,所述将所述测试结果文件与预设的标准文件进行比对,进而生成测试结果,包括:
将所述测试结果文件和标准文件分别划分为多个数据单元;
逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,若不一致,则记录差异信息,进而得到测试结果。
在优选的实施例中,所述逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,包括:
逐个对比所述业务结果文件中的数据单元与所述业务标准文件中对应的数据单元;
逐个对比所述数据库结果文件的数据单元与所述数据库标准文件中对应的数据单元。
本发明的又一方面,提供一种代码测试方法,包括:
分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;
所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;
所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。
本发明的又一方面,提供一种分布式节点,包括:
测试数据获取模块,获取配置的所有测试案例对应所需的测试数据;
测试结果文件生成模块,在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
结果比对模块,将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
本发明的又一方面,提供一种代码测试***,包括:多个分布式节点与多个对应的公共服务器;
所述分布式节点获取各自配置的所有测试案例对应所需的测试数据;
所述分布式节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
所述分布式节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至所述公共服务器;
所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。
本发明的又一方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的代码测试方法。
本发明的又一方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的代码测试方法。
由上述技术方案可知,本申请提供的一种代码测试方法,方法包括:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是代码测试方法中应用于分布式节点的流程示意图。
图2是代码测试方法流程示意图。
图3是分布式节点的结构示意图。
图4是本申请实施例中的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请公开的代码测试方法,节点及***可用于测试安全领域,也可用于除测试安全领域之外的任意领域,本申请公开的代码测试方法,节点及***的应用领域不做限定。
当前银行和互联网业务随着人们日新月异的生活需求而不断发展创新,业务***的迭代更新节奏加快。分布式技术已成为企业数字化转型的核心基础设施,分布式批量框架是分布式技术的重要组成部分,基于此框架而产生的自动化测试需求也迫在眉睫。自动化测试技术传统的方法是基于某种测试框架,编写测试案例和执行测试案例,通过测试案例中编写的断言来判断运行结果是否符合预期,从而达到自动化测试的目的。这种传统方法对断言的编写要求比较高,对案例输入场景的数据要求高,而且针对的业务场景有限,并不适用于涉及大量数据的批量处理业务的测试场景。
针对现有技术中的问题,本申请提供一种代码测试方法,节点及***,方法包括:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
下面结合附图对本发明提供的代码测试方法,节点及***进行详细说明。
在一个分布式***中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个***似的。***拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。***中存在一个以全局的方式管理计算机资源的分布式***。
分布式***是以全局方式管理***资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式***能够根据需要在***中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个***就像是一个处理器一样。
内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理***。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库***中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。所以分布式***具有透明性和内聚性。
为了解决上述问题中的至少一个,利用分布式***的特点,本申请提供一种代码测试方法,所述方法应用于分布式***中的任一节点,其中所述分布式***中每个节点配置至少一个测试案例,并且每个节点配置的测试数据不同,如图1所示,具体包括:
S1:获取配置的所有测试案例对应所需的测试数据;
具体的,所述测试数据包括测试环境产生的业务数据或生产环境的业务数据。所有的测试数据通过分布式***的负载均衡被拆分在各个节点的数据库中,可以理解,每个节点的数据库中存储有执行相应测试案例的测试数据。例如分布式***中的一个节点,其配置的需要执行的测试案例为向数据库中***一个数据cash,具体如下:
@Test
public void testInsert(){/添加操作
Connection connection=null;
Statement statement=null;
try{
//1.获取连接对象
connection=JDBCUtil.getConnection();
//2.根据连接对象,得到statement
statement=connection.createStatement();
//3.执行添加语句
String sql="insert into t_stu values(null,'LiLong',cash)";
//这里返回的结果为影响的行数,如果大于零,则表示操作成功
int result=statement.executeUpdate(sql);
if(result>0){
System.out.println("添加成功");
}
else{
System.out.println("添加失败");
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
JDBCUtil.release(connection,statement);
}
}
与该测试案例相对应的测试数据有5条,分别为12345,23456,34567,45678,56789。已经通过负载均衡器被分配到本节点的内存数据库中。
具体的,有两种方式,其中第一种方式具体如下:
根据所述测试案例的测试数据需求,编写相应的数据库语句;从而可以将所述数据库语句***至测试案例的测试类中形成测试数据。
在具体的实施例中,以Junit4测试框架为例,以使用注解@before在所有@Test方法之前执行一次。例如数据库操作语句为long cash="from Users as t where t.name=cash";将该数据库语句使用@before***在测试类的@Test之前,如下所示:
@before
long cash="from Users as t where t.name=cash";
@Test
public void testInsert(){/添加操作
Connection connection=null;
Statement statement=null;
try{
//1.获取连接对象
connection=JDBCUtil.getConnection();
//2.根据连接对象,得到statement
statement=connection.createStatement();
//3.执行添加语句
String sql="insert into t_stu values(null,'LiLong',cash)";
//这里返回的结果为影响的行数,如果大于零,则表示操作成功
int result=statement.executeUpdate(sql);
if(result>0){
System.out.println("添加成功");
}
else{
System.out.println("添加失败");
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
JDBCUtil.release(connection,statement);
}
}
第二种方式为将所述测试数据***与测试案例的测试类相对应的数据表格中。测试案例所用的测试数据可以通过读取其对应的初始化数据表获得,一般地,所述初始化数据表会保存在与试案例相同的文件夹下并且文件名为测试案例的测试类名称。在执行测试案例时,会自动读取该与测试类同名的数据表格中的数据,作为测试案例的测试数据。
S2:在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
在具体的实施例中,执行测试案例后会生成相应的测试结果文件,包括业务结果文件和数据库结果文件。一般地,业务结果文件通常为bin文件,而数据库结果文件是由需要核对的数据库表字段组合产生的json文件。在具体的实施例中,测试案例的名称,测试结果文件的保存路径,是否为首次执行测试案例,查询筛选数据库表等信息的设置是通过yml文件进行的。
在具体的实施例中,yml文件中包括了测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置,如下所示:
#运行作业名
processName:"运行作业名"
initLog:true
#是否上传日志文件
uploadLog:true
#日期初始化
myWorkDate:****
myBatchDate:****
checkResultProperties:
logDir:"日志路径"
#不用写日期,会自动拼装日期路径
batchDir:"作业生成bin文件根目录/日期/特定目录名"
#比对类型:TWO_FILE_SAME_HANDLER->两个BIN文件相同,JSON_FILE_HANDLER->json文件
checkResultType:"JSON_FILE_HANDLER"
standarDir:"标准文件存放根目录/作业名同名"
#需要校验的文件
checkNodes:
#节点1
-firstTime:true
standerFileName:"自定义标准文件名.json"
checkSql:"select*FROM表名WHERE查询条件"
checkList:"字段1,字段2,字段3,字段4,字段5,..."
#bin文件的时候才要填
#tableInfoName:"bin文件名"
#节点2
-firstTime:false
actuallyFileName:"testactual.json"
checkSql:"select*FROM表名WHERE查询条件"
checkList:"字段1,字段2,字段3,字段4,字段5,..."
S3:将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
具体的,所述预设的标准文件是首次成功执行测试案例后生成的测试结果文件,标准文件包括业务标准文件和数据库标准文件。所述标准文件的存储路径也是在yml文件中设置的。例如一个测试案例sampleTest被首次成功执行后,生成了sampleTestStd.bin文件或sampleTest Std.json文件,通过解析yml可知,需要将这两个文件包括在d.:/sampleTest/下,以便后续的比对。
在具体的实施例中,所述将所述测试结果文件与预设的标准文件进行比对,进而生成测试结果,包括:
S31:将所述测试结果文件和标准文件分别划分为多个数据单元;
具体的,所述测试结果文件和标准文件在被划分为多个数据单元之前,需要先被加载到本地内存中。若是bin文件格式的文件,可以在yml配置文件中配置一个参数定义文件结构的名称,指向实际的文件结构实体。若是json文件,可以在yml配置文件中设置相应的查询语句和相关的数据库表字段。对于数据单元的划分,可通过一个或多个特殊的字符来进行单元划分,例如在bin文件中,以空格键,tab键,回车键来进行单元划分。json文件则可以以{}来进行数据单元的划分。例如bin文件中的内容如下:
01000100 0111110 10101010
01010101 11001100 00010001
则该文件可以划分6个数据单元。
再例如json文件中的内容如下:
{nv:123}{data:1}{id:1234567}{class:d}
则该文件可以划分为4个数据单元。
S32:逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,若不一致,则记录差异信息,进而得到测试结果。
具体的,所述逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,包括:
S321:逐个对比所述业务结果文件中的数据单元与所述业务标准文件中对应的数据单元;
在具体的实施例中,所述业务结果文件和业务标准文件均为bin格式文件,通过将yml文件中的比对文件类型设置为关键字TWO_FILE_SAME_HANDLER表示两个bin文件格式的文件比对,对应的功能通过封装interface接口实现。
S322:逐个对比所述数据库结果文件的数据单元与所述数据库标准文件中对应的数据单元。
在具体的实施例中,所述业务结果文件和业务标准文件均为json格式文件,通过将yml文件中的比对文件类型设置为关键字JSON_FILE_HANDLER表示两个JSON文件的比对,对应的功能通过封装interface接口实现。
在具体的实施例中,比对结果体现在日志文件中。如果比对成功则显示作业基本信息和比对结果记录总数等必要信息;如果比对不成功,则将差异信息直观展现出来,可实现精准定位到某笔交易的某个具备业务含义的最小单元,方便通过联想业务场景定位程序缺陷。实际上文件比对就是体现断言的思路,这里的结果文件相当于断言里的比较值,标准文件相当于断言中的期望值,文件比对的结果相当于断言执行的结果。
以上所述的步骤是分布式***中每个节点所应用的内容,对于整个分布式***而言,本申请提供的代码测试方法,如图2,包括:
S101:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;
S102:所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
S103:所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;
S104:所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。
在具体的实施例中,对于整个分布式***,测试数据通过负载均衡被拆分在各个节点的数据库中,由各个节点部署的批量执行器负责协调完成作业执行。每个节点公共服务器实现各个节点的业务逻辑,并通过访问数据库进行数据读取,访问文件公共服务器进行文件交互,每个节点配置的测试案例部署在各个节点公共服务器。可以理解,上述步骤中的公共服务器为各节点自身的公共服务器。
由以上描述可知,本发明提供的一种代码测试方法,方法包括:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
从另一层面来说,本申请提供一种用于执行所述代码测试方法中全部或部分内容的代码测试分布式节点及***的实施例,参见图3,所述代码测试的分布式节点具体包含有如下内容:
测试数据获取模块1,获取配置的所有测试案例对应所需的测试数据;
测试结果文件生成模块2,在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
结果比对模块3,将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
所述代码测试***,包括多个分布式节点与多个对应的公共服务器,具体包含如下内容:
所述分布式节点获取各自配置的所有测试案例对应所需的测试数据;
所述分布式节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
所述分布式节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至所述公共服务器;
所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。
由以上描述可知,本发明提供的代码测试的分布式***,分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
在具体的实施例中,利用分布式***的特点,本申请提供一种分布式节点,其中所述节点配置至少一个测试案例,并且节点配置的测试数据不同,具体用以执行如下步骤包括:
S1:获取配置的所有测试案例对应所需的测试数据;
具体的,所述测试数据包括测试环境产生的业务数据或生产环境的业务数据。所有的测试数据通过分布式***的负载均衡被拆分在各个节点的数据库中,可以理解,每个节点的数据库中存储有执行相应测试案例的测试数据。例如分布式***中的一个节点,其配置的需要执行的测试案例为向数据库中***一个数据cash,具体如下:
@Test
public void testInsert(){/添加操作
Connection connection=null;
Statement statement=null;
try{
//1.获取连接对象
connection=JDBCUtil.getConnection();
//2.根据连接对象,得到statement
statement=connection.createStatement();
//3.执行添加语句
String sql="insert into t_stu values(null,'LiLong',cash)";
//这里返回的结果为影响的行数,如果大于零,则表示操作成功
int result=statement.executeUpdate(sql);
if(result>0){
System.out.println("添加成功");
}
else{
System.out.println("添加失败");
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
JDBCUtil.release(connection,statement);
}
}
与该测试案例相对应的测试数据有5条,分别为12345,23456,34567,45678,56789。已经通过负载均衡器被分配到本节点的内存数据库中。
所述获取配置的所有测试案例对应所需的测试数据,有两种方式,其中第一种方式的具体步骤如下:
根据所述测试案例的测试数据需求,编写相应的数据库语句。
该实施例中,可以将所述数据库语句***至测试案例的测试类中,进而形成测试数据。
在具体的实施例中,以Junit4测试框架为例,以使用注解@before在所有@Test方法之前执行一次。例如数据库操作语句为long cash="from Users as t where t.name=cash";将该数据库语句使用@before***在测试类的@Test之前,如下所示:
@before
long cash="from Users as t where t.name=cash";
@Test
public void testInsert(){/添加操作
Connection connection=null;
Statement statement=null;
try{
//1.获取连接对象
connection=JDBCUtil.getConnection();
//2.根据连接对象,得到statement
statement=connection.createStatement();
//3.执行添加语句
String sql="insert into t_stu values(null,'LiLong',cash)";
//这里返回的结果为影响的行数,如果大于零,则表示操作成功
int result=statement.executeUpdate(sql);
if(result>0){
System.out.println("添加成功");
}
else{
System.out.println("添加失败");
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
JDBCUtil.release(connection,statement);
}
}
第二种方式为将所述测试数据***与测试案例的测试类相对应的数据表格中。测试案例所用的测试数据可以通过读取其对应的初始化数据表获得,一般地,所述初始化数据表会保存与在测试案例相同的文件夹下并且文件名为测试案例的测试类名称。在执行测试案例时,会自动读取该与测试类同名的数据表格中的数据,作为测试案例的测试数据。
在具体的实施例中,执行测试案例后会生成相应的测试结果文件,包括业务结果文件和数据库结果文件。一般地,业务结果文件通常为bin文件,而数据库结果文件是由需要核对的数据库表字段组合产生的json文件。在具体的实施例中,测试案例的名称,测试结果文件的保存路径,是否为首次执行测试案例,查询筛选数据库表等信息的设置是通过yml文件进行的。在具体的实施例中,yml文件中包括了测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
S2:在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
S3:将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
具体的,所述预设的标准文件是首次成功执行测试案例后生成的测试结果文件,标准文件包括业务标准文件和数据库标准文件。所述标准文件的存储路径也是在yml文件中设置的。例如一个测试案例sampleTest被首次成功执行后,生成了sampleTestStd.bin文件和sampleTest Std.json文件,通过解析yml可知,需要将这两个文件包括在d.:/sampleTest/下,以便后续的比对。
在具体的实施例中,所述结果比对模块,用于执行如下步骤包括:
S31:将所述测试结果文件和标准文件分别划分为多个数据单元;
具体的,所述测试结果文件和标准文件在被划分为多个数据单元之前,需要先被加载到本地内存中。若是bin文件格式的文件,可以在yml配置文件中配置一个参数定义文件结构的名称,指向实际的文件结构实体。若是json文件,可以在yml配置文件中设置相应的查询语句和相关的数据库表字段。对于数据单元的划分,可通过一个或多个特殊的字符来进行单元划分,例如在bin文件中,以空格键,tab键,回车键来进行单元划分。json文件则可以以{}来进行数据单元的划分。例如bin文件中的内容如下:
01000100 0111110 10101010
01010101 11001100 00010001
则该文件可以划分6个数据单元。
再例如json文件中的内容如下:
{nv:123}{data:1}{id:1234567}{class:d}
则该文件可以划分为4个数据单元。
S32:逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,若不一致,则记录差异信息,进而得到测试结果。
具体的,所述逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,包括:
S321:逐个对比所述业务结果文件中的数据单元与所述业务标准文件中对应的数据单元;
在具体的实施例中,所述业务结果文件和业务标准文件均为bin格式文件,通过将yml文件中的比对文件类型设置为关键字TWO_FILE_SAME_HANDLER表示两个bin文件格式的文件比对,对应的功能通过封装interface接口实现。
S322:逐个对比所述数据库结果文件的数据单元与所述数据库标准文件中对应的数据单元。
在具体的实施例中,所述业务结果文件和业务标准文件均为json格式文件,通过将yml文件中的比对文件类型设置为关键字JSON_FILE_HANDLER表示两个JSON文件的比对,对应的功能通过封装interface接口实现。
在具体的实施例中,比对结果体现在日志文件中。如果比对成功则显示作业基本信息和比对结果记录总数等必要信息;如果比对不成功,则将差异信息直观展现出来,可实现精准定位到某笔交易的某个具备业务含义的最小单元,方便通过联想业务场景定位程序缺陷。实际上文件比对就是体现断言的思路,这里的结果文件相当于断言里的比较值,标准文件相当于断言中的期望值,文件比对的结果相当于断言执行的结果。
以上所述的步骤是分布式***中每个节点所应用的内容,对于整个分布式***而言,本申请提供的代码测试***,用于执行如下步骤包括:
S101:分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;
S102:所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
S103:所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;
S104:所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。
在具体的实施例中,对于整个分布式***,测试数据通过负载均衡被拆分在各个节点的数据库中,由各个节点部署的批量执行器负责协调完成作业执行。每个节点公共服务器实现各个节点的业务逻辑,并通过访问数据库进行数据读取,访问文件公共服务器进行文件交互,每个节点配置的测试案例部署在各个节点公共服务器。可以理解,上述步骤中的公共服务器为各节点自身的公共服务器。
由以上描述可知,本发明提供的一种代码测试***,分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器;所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例。本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
从硬件层面来说,本申请提供一种用于实现代码测试方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
图4为本申请实施例的电子设备9600的***构成的示意框图。如图4所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图4是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
在一实施例中,代码测试功能可以被集成到中央处理器中。其中,中央处理器可以被配置为进行如下控制:
S1:获取配置的所有测试案例对应所需的测试数据;
S2:在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
S3:将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
从上述描述可知,本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
在另一个实施方式中,代码测试节点及***可以与中央处理器9100分开配置,例如可以代码测试节点及***配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现代码测试功能。
如图4所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图4中所示的所有部件;此外,电子设备9600还可以包括图4中没有示出的部件,可以参考现有技术。
如图4所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本申请的实施例还提供能够实现上述实施例中的代码测试方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为公共服务器或客户端的代码测试方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
S1:获取配置的所有测试案例对应所需的测试数据;
S2:在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
S3:将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将该比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例。
从上述描述可知,本申请符合批量业务集中处理的要求,实现了批量业务的自动化测试,降低了业务风险;无需人工编写断言,减轻了测试人员的工作量;测试结果直观清晰,为开发人员检查判断出错交易场景和出错业务逻辑单元提供了有利条件。
本领域内的技术人员应明白,本发明的实施例可提供为方法、节点、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、节点、***、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种代码测试方法,所述方法应用于分布式***中的任一节点,其中所述分布式***中每个节点配置至少一个测试案例,并且每个节点配置的测试数据不同,其特征在于,包括:
获取配置的所有测试案例对应所需的测试数据;
在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例;
还包括:
采用yml格式文件对所述测试案例进行配置;
所述yml格式文件,包括:
测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
2.根据权利要求1所述的代码测试方法,其特征在于,还包括:
若首次执行测试案例,则将执行结果文件作为预设的标准文件。
3.根据权利要求1所述的代码测试方法,其特征在于,所述标准文件包括业务结果文件和数据库结果文件,与其对应的所述标准文件包括业务标准文件和数据库标准文件。
4.根据权利要求1所述的代码测试方法,其特征在于,所述测试数据包括测试环境产生的业务数据或生产环境的业务数据。
5.根据权利要求1所述的代码测试方法,其特征在于,所述将所述测试数据配置至对应的测试案例中,包括:
根据所述测试案例的测试数据需求,编写相应的数据库语句;
将所述数据库语句***至测试案例的测试类中。
6.根据权利要求1所述的代码测试方法,其特征在于,所述将所述测试数据配置至对应的测试案例中,还包括:将所述测试数据***与测试案例的测试类相对应的数据表格中。
7.根据权利要求1所述的代码测试方法,其特征在于,所述将所述测试结果文件与预设的标准文件进行比对,进而生成测试结果,包括:
将所述测试结果文件和标准文件分别划分为多个数据单元;
逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,若不一致,则记录差异信息,进而得到测试结果。
8.根据权利要求7所述的代码测试方法,其特征在于,所述逐个对比测试结果文件中的数据单元与标准文件中对应的数据单元,包括:
逐个对比业务结果文件中的数据单元与业务标准文件中对应的数据单元;
逐个对比数据库结果文件的数据单元与数据库标准文件中对应的数据单元。
9.一种代码测试方法,其特征在于,包括:
分布式***中的每个节点获取各自配置的所有测试案例对应所需的测试数据;
所述每个节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
所述每个节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将比对结果记录上传至公共服务器;
所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例;
还包括:
分布式***中的每个节点采用yml格式文件对所述测试案例进行配置;
所述yml格式文件,包括:
测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
10.一种分布式节点,其特征在于,包括:
测试数据获取模块,获取配置的所有测试案例对应所需的测试数据;
测试结果文件生成模块,在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
结果比对模块,将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将比对结果记录上传至公共服务器,以告知所述公共服务器未通过测试的测试案例;
还包括:
采用yml格式文件对所述测试案例进行配置;
所述yml格式文件,包括:
测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
11.一种代码测试***,其特征在于,包括:多个分布式节点与多个对应的公共服务器;
所述分布式节点获取各自配置的所有测试案例对应所需的测试数据;
所述分布式节点在测试环境中将所述测试数据配置至对应的测试案例中,生成测试结果文件;
所述分布式节点将所述测试结果文件与预设的标准文件进行比对,若比对一致,则将比对结果记录上传至所述公共服务器;
所述公共服务器根据各节点上传的所述比对结果记录,知晓未通过测试的测试案例;
还包括:
所述分布式节点采用yml格式文件对所述测试案例进行配置;
所述yml格式文件,包括:
测试案例名称,上传对比日志始能标识,测试标准文件和测试结果文件存放路径,对比日志保存路径,对比类型以及各节点对比设置。
12.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至9任一项所述的代码测试方法。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至9任一项所述的代码测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110583278.6A CN113190463B (zh) | 2021-05-27 | 2021-05-27 | 一种代码测试方法,节点及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110583278.6A CN113190463B (zh) | 2021-05-27 | 2021-05-27 | 一种代码测试方法,节点及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113190463A CN113190463A (zh) | 2021-07-30 |
CN113190463B true CN113190463B (zh) | 2024-03-26 |
Family
ID=76985598
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110583278.6A Active CN113190463B (zh) | 2021-05-27 | 2021-05-27 | 一种代码测试方法,节点及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113190463B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101377759A (zh) * | 2008-08-26 | 2009-03-04 | 中国工商银行股份有限公司 | 自动化界面测试*** |
US10498625B1 (en) * | 2016-10-14 | 2019-12-03 | Amazon Technologies, Inc. | Distributed testing service |
CN112231219A (zh) * | 2020-10-22 | 2021-01-15 | 中国平安人寿保险股份有限公司 | 自动化测试监控方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10534695B2 (en) * | 2018-03-30 | 2020-01-14 | Atlassian Pty Ltd | Systems and methods for initializing test environments |
-
2021
- 2021-05-27 CN CN202110583278.6A patent/CN113190463B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101377759A (zh) * | 2008-08-26 | 2009-03-04 | 中国工商银行股份有限公司 | 自动化界面测试*** |
US10498625B1 (en) * | 2016-10-14 | 2019-12-03 | Amazon Technologies, Inc. | Distributed testing service |
CN112231219A (zh) * | 2020-10-22 | 2021-01-15 | 中国平安人寿保险股份有限公司 | 自动化测试监控方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113190463A (zh) | 2021-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107370786B (zh) | 一种基于微服务架构的通用信息管理*** | |
US9058430B2 (en) | Testing a software application interfacing with multiple external software applications in a simulated test environment | |
US10445675B2 (en) | Confirming enforcement of business rules specified in a data access tier of a multi-tier application | |
US11615076B2 (en) | Monolith database to distributed database transformation | |
WO2020258674A1 (zh) | 脚本文件校验方法、装置、服务器及存储介质 | |
CN106445529A (zh) | 持续集成服务器的配置信息的备份方法及*** | |
CN111897890B (zh) | 金融业务处理方法及装置 | |
CN110198327B (zh) | 一种数据传输方法及相关设备 | |
CN111784108A (zh) | 一种主数据管理平台的建模方法和装置 | |
CN110865806B (zh) | 代码处理方法、装置、服务器及存储介质 | |
CN106990974B (zh) | 一种app应用更新方法、装置及电子设备 | |
US20100011018A1 (en) | Custom database system and method of building the same | |
CN110222047A (zh) | 一种动态表单生成方法和装置 | |
US20210124752A1 (en) | System for Data Collection, Aggregation, Storage, Verification and Analytics with User Interface | |
CN116450107B (zh) | 低代码平台二次开发软件的方法、装置、电子设备 | |
CN113190463B (zh) | 一种代码测试方法,节点及*** | |
US20140025439A1 (en) | Regression free business process management | |
CN113535575A (zh) | 软硬件产品基础环境的基准测试方法及装置 | |
CN111090638A (zh) | 一种数据库迁移中交易功能的对比方法及装置 | |
WO2005089350A2 (en) | Custom database system and method of building the same | |
CN109634606A (zh) | 一种定义功能菜单的方法及装置 | |
CN115543969B (zh) | 一种数据迁移方法、装置、设备及介质 | |
CN117908930B (zh) | 代码与代码文档的同步方法、装置、设备、介质及产品 | |
CN112860314B (zh) | 代码建模方法及装置 | |
Kantipudi | Business insights of user usage records of data cards |
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 |