CN114328161A - Java接口的测试方法、装置、存储介质和电子设备 - Google Patents
Java接口的测试方法、装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN114328161A CN114328161A CN202011053549.9A CN202011053549A CN114328161A CN 114328161 A CN114328161 A CN 114328161A CN 202011053549 A CN202011053549 A CN 202011053549A CN 114328161 A CN114328161 A CN 114328161A
- Authority
- CN
- China
- Prior art keywords
- test
- generating
- function
- interface
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种Java接口的测试方法、装置、存储介质和电子设备,其中,Java接口的测试方法包括如下步骤:扫描Java接口,得到待测试的函数信息;根据所述待测试的函数信息,生成测试模型;基于所述测试模型生成测试用例;利用Java反射机制,对所述测试用例对应的函数进行反射调用;基于所述反射调用结果生成测试报告。采用本申请实施例提供的技术方案,可以实现对Java接口进行自动化测试,能够自动生成测试模型和测试用例,并可自动执行,输出测试报告,提高了测试效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种Java接口的测试方法、装置、存储介质和电子设备。
背景技术
Java(一种面向对象的编码语音)接口测试用于验证通过Java编码生成的对外接口实现的功能与性能指标是否与接口设计一致,其测试过程通常需要足够多的测试用例进行测试。
由于Java接口数量庞大,现有技术中,常用的测试方法是利用人工编码创建对象并调用接口来实现,其缺点包括:编码工作量大、技能门槛高、代码冗余严重、需要消耗大量的人力时间成本并且测试效率低。
发明内容
本申请实施例提供了一种Java接口的测试方法、装置、存储介质和电子设备,所述方法能够提高Java接口的测试效率。
第一方面,本申请实施例提供了一种Java接口的测试方法,所述方法包括如下步骤:扫描Java接口,得到待测试的函数信息;根据所述待测试的函数信息,生成测试模型;基于所述测试模型生成测试用例;利用Java反射机制,对所述测试用例对应的函数进行反射调用;基于所述反射调用结果生成测试报告。
采用本申请实施例提供的技术方案,可以实现对Java接口进行自动化测试,能够自动生成测试模型和测试用例,并可自动执行,输出测试报告,提高了测试效率。
在一些可能的实施例中,所述扫描Java接口,得到待测试的函数信息,包括:解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施例中,所述方法还包括:在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
在一些可能的实施例中,所述根据所述待测试的函数信息,生成测试模型;包括:根据所述待测试的函数信息,自动生成基础模型作为测试模型;和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施例中,所述基于所述测试模型生成测试用例,包括:基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施例中,所述根据所述测试用例利用Java反射机制,对函数进行反射调用,包括:利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施例中,所述方法还包括:基于所述测试模型,随机确定路径,进行稳定性测试。
第二方面,本申请实施例提供了一种Java接口的测试装置,包括:扫描单元,用于扫描Java接口,得到待测试的函数信息;第一生成单元,用于根据所述待测试的函数信息,生成测试模型;第二生成单元,用于基于所述测试模型生成测试用例;处理单元,用于利用Java反射机制,对所述测试用例对应的函数进行反射调用;第三生成单元,用于基于所述反射调用结果生成测试报告。
采用本申请实施例提供的技术方案,可以实现对Java接口进行自动化测试,能够自动生成测试模型和测试用例,并可自动执行,输出测试报告,提高了测试效率。
在一些可能的实施例中,所述扫描单元具体用于,解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施例中,所述第一生成单元还用于,在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
在一些可能的实施例中,所述第一生成单元具体用于,根据所述待测试的函数信息,自动生成基础模型作为测试模型;和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施例中,所述第二生成单元具体用于,基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施例中,所述处理单元具体用于,利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施例中,所述处理单元还用于:基于所述测试模型,随机确定路径,进行稳定性测试。
第三方面,本申请实施例提供了一种计算机存储介质,包括计算机程序或指令,当所述计算机程序或指令被执行时,如第一方面或者第一方面任一可能的实施例中所述的方法的部分或全部步骤被执行。
第四方面,本申请实施例提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行如第一方面或者第一方面任一可能的实施例中所述的方法。
第五方面,本申请实施例提供了一种电子设备,包括处理器和存储器;所述处理器,用于执行所述存储器中存储的计算机程序或指令,当所述计算机程序或指令被执行时,执行如第一方面或者第一方面任一可能的实施例中所述的方法的部分或全部步骤。
采用本申请实施例提供的技术方案,可以实现对Java接口进行自动化测试,能够自动生成测试模型和测试用例,并可自动执行,输出测试报告,提高了测试效率。
附图说明
图1是本申请一个实施例提供的Java接口的测试方法的流程示意图。
图2是本申请一个实施例生成的测试模型示意图。
图3是本申请另一个实施例生成的测试模型示意图。
图4是本申请一个实施例提供的函数反射调用的流程示意图。
具体实施方式
下面将参照附图更详细地描述本申请的实施例。虽然附图中显示了本申请的某些实施例,然而应当理解的是,本申请可以通过各种形式来实现,不应该被解释为限于这里阐述的实施例,提供这些实施例是为了更加透彻和完整地理解本申请。应当理解的是,本申请的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本申请的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本申请使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本申请中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本申请实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
如图1所示,为本申请一实施方式提供的Java接口的测试方法的流程图,如图1所示,所述方法可以包括如下步骤:
101、扫描Java接口,得到待测试的函数信息。
在一些可能的实施方式中可以如下方式实现,解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
具体地,在一些可能的实施方式中,可以通过解析dex或jar包获取待测试的类class,然后利用Java反射机制,获取待测试类的函数信息,待测试的函数信息包括:函数名、函数修饰符、参数类型、返回类型等函数信息,然后根据待测试的函数信息输出函数列表信息。
举例来说,若Java接口对应的代码包括如下内容。
public class ModelDemo{
public static ModelDemo getInstance(){
return new ModelDemo();
}
public int testInterface(ShowCase showCase,DemoInterface inter){
showCase.getValue();
inter.callBack();
return 1;
}
public int[]getOptionAge(){
int[]ret={20,30,40};
return ret;
}
public String[]getOptionSex(){
String[]ret={"Male","Female"};
return ret;
}
public voidProcess(int age,String sex){
Log.d(tag:"Test",msg:"Process:Age="+age+",Sex="+sex);
}
public int getSum(int arg1,int arg2){
return argl+arg2;
}
public long getSum(int[]array){
long sum=0;
for(int value:array){
sun+=value;
}
raturn sum;
}
解析上述Java接口信息后,可以得到表1所示函数列表信息。具体地,可以解析出:getlnstance、getOptionSex、getOptionAge、getSum、testlnterface、getSum、Process等函数,以及得到类名、修饰符、返回类型和参数等信息,详见表1。
表1
类名 | 修饰符 | 返回类型 | 函数名 | 参数 |
ModelDem | publicstatic | ModelDemo | getlnstance | |
ModelDem | public | String[] | getOptionSex | |
ModelDem | public | int[] | getOptionAge | |
ModelDem | public | int | getSum | int,int |
ModelDem | public | int | testlnterface | ShowCase.Demolnterface |
ModelDem | public | long | getSum | int[] |
ModelDem | public | void | Process | int,String |
在一些可能的实施方式中,可以增加测试场景,比如在输出的函数列表中可以增加输入和预期结果,测试函数基本功能。在没有输入参数及预期结果时,在测试时可以填入输入参数,测试调用时是否有异常信息。如表2所示,对于返回值为int的函数getSum,其正常测试场景包括,输入为100和200时预期结果时301,在输入为5和5时预期结果为10,在输入为1和0时为异常测试场景。对于返回值为long的接口函数getSum的正常测试场景包括:输入数组,比如,输入的数组可以包含1、2、3和4,预期结果为10。
表2输入参数及预期结果表
102、根据所述待测试的函数信息,生成测试模型。
具体实施时,根据待测试的函数信息可以自动生成基础模型,模型可以采用N叉树,可以用UML组件图展示,包含的元素可以有:节点、群组和连线等,表1对应的UML图可以如图2所示。
在一些可能的实施方式中,可以根据设计对模型进行调整,如若软件代码调整为如下所示,则根据下面代码可以生成类似表1的函数信息表,然后根据生成的函数信息表可以生成图3所示的测试模型。
Start-->[RootNode]
[RootNode]-->[ModelDemo-ModelDEMO_getInstance]
package"ModelDemo"{
[ModelDemo-intArray_getOptionAge]
[ModelDemo-StringArray_getOptionSex]
()ModelDemo_End
[ModelDemo-ModelDemo_getInstance]-->ModelDemo_Begin
}
[ModelDemo_End]-->[ModelDemo-void_Process_int_string]
[RootNode]#LightBlue
@enduml
SetProperty:
RootNode:NodeType=AssistOperation;
ModelDemo:RelationType=Coexist;
ModelDemo-intArray_getOptionAge:NodeType=Query;OutParameter=age;
ModelDemo-StringArray_getOptionSex:NodeType=Query;OutParameter=sex;
ModelDemo-void_Process_int_String:InParameter=age,sex;
end
103、基于所述测试模型生成测试用例。
在一些可能的实施方式中,基于测试模型,采用递归算法遍历模型,可以获取所有可能的路径;循环路径列表,再基于验证场景信息,组合参数并最终生成测试用例。
前面步骤调整后的代码生成的测试模型,可以生成如下测试用:
查询接口测试用例包括:
Action=RootNode;Action=ModelDemo-ModelDemo_getInstance;Action=ModelDemo-intArray_getOptionAge;QueryExpect=age:[20,30,40]
Action=RootNode;Action=ModelDemo-ModelDemo_getInstance;Action=ModelDemo-StringArray_getOptionSex;QueryExpect=sex:[Female,Male]
预期结果自动保存,人工检查后,可直接用于预期结果验证。功能接口测试用例(部分)包括:
Action=RootNode;Action=ModelDemo-ModelDemo_getInstance;age=20;sex=Female;Action=ModelDemo-void_Process_int_String;
Action=RootNode;Action=ModelDemo-ModelDemo_getInstance;age=30;sex=Male;Action=Model Demo-void_Process_int_String;
在生成测试用例时,可以支持多种组合方式,比如:单一选择组合、基本选择组合、全组合、Pair-wise组合(Pair-wise)等。
104、利用Java反射机制,对所述测试用例对应的函数进行反射调用。
在一些可能的实施方式中,利用递归调用算法获取类对象及参数,再利用Java反射调用机制进行函数反射调用。
需要说明的是,图4中的相关词语的含义包括:
无入参是指:待调用函数无参数,例如:public int[]getOptionAge()。
给定取值是指:待调用函数的取值已设定,例如:age=20;sex=Female;Action=ModelDemo-void_Process_int_String,函数Process,参数分别为20、Female。
构造对象是指:创建java对象实例,例如int类型实例,int age=20。
默认值构造对象是指:如果未给定取值,则取系统默认取值,当前模型取值为基本类型最大取值。
简单类型是指:Java语言中的基础类型,例如:整型:byte,short,int,long;字符型:char;浮点型:float,double;布尔型:boolean等。
实例获取方法:指调用图4左侧虚线框对应区域的逻辑。
如图4所示,函数反射调用可以包括如下步骤:(1)判断该函数是否是静态函数,如果是,则将该函数对象置为null;如果否,则调用实例获取方法获取函数所属类的对象,如图4中左侧虚线框对应的流程;(2)获取函数;(3)使用Java反射机制反射调用函数,如果该函数返回类型非简单类型,则将返回的对象插入资源池,供后续调用时使用。
以及图4中右侧虚线框所示的获取函数所需参数对应的流程。
需要说明的是,如图4所示,实例获取方法可以包括如下步骤:
(1)查询资源池中是否有该类的实例,如果有则直接返回该实例。
(2)搜索扫描出的函数列表,判断是否有函数可以返回该类型实例,如果有则遍历函数列表,通过函数反射调用获取该类实例。
(3)如果仍然无法获取该类实例,则通过该类构造函数反射构造该类实例;
(4)如果前面所有方法获取的实例为null,则报错。
参数获取方法可以包括如下步骤:
(1)判断是否有入参,如果无,则直接返回,如果是,则进一步判断是否给定取值。
(2)判断是否给定取值,如果是,则根据取值构造特定对象;
(3)判断是否为简单类型,如果是,则构造简单类型参数;如果为复杂类型,则调用实例获取方法获取实例。
在一些可能的实施例中还可以对函数的功能进行验证,进行功能验证时,可以包括如下步骤:遍历模型生成的测试用例,利用接口调用算法执行用例步骤,捕获执行过程中的校验结果或异常信息,将测试执行结果输出至最终的测试报告中。
在一些可能的实施例中还可以对函数的稳定性进行验证,进行稳定性验证时,可以包括如下步骤:基于测试模型,随机选择路径和参数执行,即可完成稳定性验证。
105、基于所述反射调用结果生成测试报告。
举例来说,对于前面步骤1中举的例子测试时,可以仅提供测试包名或者类名就可以完成测试,并且可以直接输出测试报告,得到的测试报告如表3、表4和表5所示。
表3功能测试表(基础类型默认值为该类型最大值)
表4专项测试(其中,Repeat对应重复调用测试、Press对应并发调用测试、Fuzz对应输入参数测试、QueryModify对应深度拷贝验证)
表5性能统计表
接口函数(耗时单位:ms) | 平均耗时 | 最小耗时 | 最大耗时 | 执行次数 |
ModelDemo-int_getSum_int_int | 0 | 0 | 1 | 303 |
ModelDemo-int_testInterface_ShowCase_Demolnterface | 2 | 1 | 3 | 303 |
ModelDemo-intArray_getOptionAge | 0 | 0 | 1 | 303 |
在一些可能的实施方式中,可以根据性能统计表可以生成趋势图。
采用本申请提供的技术方案,在一些可能的实施方式中,输入的入参和预期结果如表6所示。
表6输入入参及预测结果表
采用本申请实施例提供的方案,输出的测试报告可以如表7所示。
表7测试报告
对于图3对应的测试模型,输出的功能测试报告如表8所示。
表8功能测试报告
采用本申请实施例提供的技术方案进行Java接口测试时,根据函数信息,可以自动生成测试模型和测试用例,并可以自动执行测试和输出测试报告,提高了测试效率。
本申请实施例还提供了一种Java接口的测试装置,包括:扫描单元、第一生成单元、第二生成单元、处理单元和第三生成单元。其中,扫描单元,用于扫描Java接口,得到待测试的函数信息;第一生成单元,用于根据所述待测试的函数信息,生成测试模型;第二生成单元,用于基于所述测试模型生成测试用例;处理单元,用于利用Java反射机制,对所述测试用例对应的函数进行反射调用;第三生成单元,用于基于所述反射调用结果生成测试报告。各模块的执行的过程参见前面方法实施例的描述,这里不再赘述。
采用本申请实施例提供的技术方案进行Java接口测试时,根据函数信息,可以自动生成测试模型和测试用例,并可以自动执行测试和输出测试报告,提高了测试效率。
在一些可能的实施方式中,扫描单元具体用于,解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施方式中,第一生成单元还用于,在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
第一生成单元具体用于,根据所述待测试的函数信息,自动生成基础模型作为测试模型;和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施方式中,所述第二生成单元具体用于,基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施方式中,所述处理单元具体用于,利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施方式中,所述处理单元还用于:基于所述测试模型,随机确定路径,进行稳定性测试。
本申请实施例还提供了一种计算机存储介质,包括计算机程序或指令,当所述计算机程序或指令被执行时,执行Java接口的测试方法。所述方法包括:
扫描Java接口,得到待测试的函数信息;
根据所述待测试的函数信息,生成测试模型;
基于所述测试模型生成测试用例;
利用Java反射机制,对所述测试用例对应的函数进行反射调用;
基于所述反射调用结果生成测试报告。
采用本申请实施例提供的技术方案进行Java接口测试时,根据函数信息,可以自动生成测试模型和测试用例,并可以自动执行测试和输出测试报告,提高了测试效率。
在一些可能的实施方式中,所述扫描Java接口,得到待测试的函数信息,包括:
解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施方式中,所述方法还包括:在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
在一些可能的实施方式中,所述根据所述待测试的函数信息,生成测试模型;包括:
根据所述待测试的函数信息,自动生成基础模型作为测试模型;
和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施方式中,所述基于所述测试模型生成测试用例,包括:
基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施方式中,所述根据所述测试用例利用Java反射机制,对函数进行反射调用,包括:
利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;
遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施方式中,还包括:基于所述测试模型,随机确定路径,进行稳定性测试。
本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行Java接口的测试方法。所述方法包括:
扫描Java接口,得到待测试的函数信息;
根据所述待测试的函数信息,生成测试模型;
基于所述测试模型生成测试用例;
利用Java反射机制,对所述测试用例对应的函数进行反射调用;
基于所述反射调用结果生成测试报告。
采用本申请实施例提供的技术方案进行Java接口测试时,根据函数信息,可以自动生成测试模型和测试用例,并可以自动执行测试和输出测试报告,提高了测试效率。
在一些可能的实施方式中,所述扫描Java接口,得到待测试的函数信息,包括:
解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施方式中,所述方法还包括:在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
在一些可能的实施方式中,所述根据所述待测试的函数信息,生成测试模型;包括:
根据所述待测试的函数信息,自动生成基础模型作为测试模型;
和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施方式中,所述基于所述测试模型生成测试用例,包括:
基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施方式中,所述根据所述测试用例利用Java反射机制,对函数进行反射调用,包括:
利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;
遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施方式中,还包括:基于所述测试模型,随机确定路径,进行稳定性测试。
本申请实施例还提供了一种电子设备,包括处理器和存储器;所述处理器,用于执行所述存储器中存储的计算机程序或指令,当所述计算机程序或指令被执行时,执行Java接口的测试方法。所述方法包括:
扫描Java接口,得到待测试的函数信息;
根据所述待测试的函数信息,生成测试模型;
基于所述测试模型生成测试用例;
利用Java反射机制,对所述测试用例对应的函数进行反射调用;
基于所述反射调用结果生成测试报告。
采用本申请实施例提供的技术方案进行Java接口测试时,根据函数信息,可以自动生成测试模型和测试用例,并可以自动执行测试和输出测试报告,提高了测试效率。
在一些可能的实施方式中,所述扫描Java接口,得到待测试的函数信息,包括:
解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
在一些可能的实施方式中,所述方法还包括:在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
在一些可能的实施方式中,所述根据所述待测试的函数信息,生成测试模型;包括:
根据所述待测试的函数信息,自动生成基础模型作为测试模型;
和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
在一些可能的实施方式中,所述基于所述测试模型生成测试用例,包括:
基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
在一些可能的实施方式中,所述根据所述测试用例利用Java反射机制,对函数进行反射调用,包括:
利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;
遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
在一些可能的实施方式中,还包括:基于所述测试模型,随机确定路径,进行稳定性测试。
上述具体的方法实施例以及实施例中技术特征的解释、表述、以及多种实现形式的扩展也适用于装置中的方法执行,装置实施例中不予以赘述。
应理解以上装置中的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。例如,以上各个模块可以为单独设立的处理元件,也可以集成在终端的某一个芯片中实现,此外,也可以以程序代码的形式存储于控制器的存储元件中,由处理器的某一个处理元件调用并执行以上各个模块的功能。此外各个模块可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。该处理元件可以是通用处理器,例如处理器(central processing unit,CPU),还可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application-specificintegrated circuit,ASIC),或,一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(field-programmable gate array,FPGA)等。
应理解本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (17)
1.一种Java接口的测试方法,其特征在于,所述方法包括:
扫描Java接口,得到待测试的函数信息;
根据所述待测试的函数信息,生成测试模型;
基于所述测试模型生成测试用例;
利用Java反射机制,对所述测试用例对应的函数进行反射调用;
基于所述反射调用结果生成测试报告。
2.根据权利要求1所述的方法,其特征在于,所述扫描Java接口,得到待测试的函数信息,包括:
解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述函数列表信息中增加输入参数和预期结果;和/或,
在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
4.根据权利要求1所述的方法,其特征在于,所述根据所述待测试的函数信息,生成测试模型;包括:
根据所述待测试的函数信息,自动生成基础模型作为测试模型;
和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
5.根据权利要求1所述的方法,其特征在于,所述基于所述测试模型生成测试用例,包括:基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
6.根据权利要求1所述的方法,其特征在于,所述根据所述测试用例利用Java反射机制,对函数进行反射调用,包括:
利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;
遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
7.根据权利要求1至6任意一项所述的方法,其特征在于,还包括:
基于所述测试模型,随机确定路径,进行稳定性测试。
8.一种Java接口的测试装置,其特征在于,包括:
扫描单元,用于扫描Java接口,得到待测试的函数信息;
第一生成单元,用于根据所述待测试的函数信息,生成测试模型;
第二生成单元,用于基于所述测试模型生成测试用例;
处理单元,用于利用Java反射机制,对所述测试用例对应的函数进行反射调用;
第三生成单元,用于基于所述反射调用结果生成测试报告。
9.根据权利要求8所述的测试装置,其特征在于,
所述扫描单元具体用于,解析待测试的接口信息,利用Java反射机制,获取待测试的函数信息,输出函数列表信息。
10.根据权利要求9所述的测试装置,其特征在于,
所述第一生成单元还用于,在所述函数列表信息中增加输入参数和预期结果;和/或,在无输入参数和预期结果时,自动填入输入参数,用于测试调用时是否有异常。
11.根据权利要求8所述的测试装置,其特征在于,
所述第一生成单元具体用于,根据所述待测试的函数信息,自动生成基础模型作为测试模型;和/或者,对所述基础模型进行调整,根据接口调用关系调整接口顺序、增加或删除部分接口节点,生成对所述基础模型进行调整后的测试模型。
12.根据权利要求8所述的测试装置,其特征在于,
所述第二生成单元具体用于,基于所述测试模型,采用递归算法遍历所述测试模型,得到所有可能的路径,循环路径列表,再基于验证场景信息,生成测试用例。
13.根据权利要求8所述的测试装置,其特征在于,
所述处理单元具体用于,利用递归调用算法获取类对象及参数,以及利用Java反射调用机制对函数反射调用;遍历所述测试用例,利用接口调用算法执行所述测试用例步骤。
14.根据权利要求8至13任意一项所述的测试装置,其特征在于,
所述处理单元还用于:基于所述测试模型,随机确定路径,进行稳定性测试。
15.一种计算机存储介质,其特征在于,包括计算机程序或指令,当所述计算机程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
16.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得计算机执行如权利要求1至7中任意一项所述的方法。
17.一种电子设备,其特征在于,包括处理器和存储器;所述处理器,用于执行所述存储器中存储的计算机程序或指令,当所述计算机程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011053549.9A CN114328161A (zh) | 2020-09-29 | 2020-09-29 | Java接口的测试方法、装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011053549.9A CN114328161A (zh) | 2020-09-29 | 2020-09-29 | Java接口的测试方法、装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114328161A true CN114328161A (zh) | 2022-04-12 |
Family
ID=81011797
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011053549.9A Pending CN114328161A (zh) | 2020-09-29 | 2020-09-29 | Java接口的测试方法、装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328161A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813593A (zh) * | 2020-07-23 | 2020-10-23 | 平安银行股份有限公司 | 一种数据处理方法、设备、服务器及存储介质 |
-
2020
- 2020-09-29 CN CN202011053549.9A patent/CN114328161A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813593A (zh) * | 2020-07-23 | 2020-10-23 | 平安银行股份有限公司 | 一种数据处理方法、设备、服务器及存储介质 |
CN111813593B (zh) * | 2020-07-23 | 2023-08-18 | 平安银行股份有限公司 | 一种数据处理方法、设备、服务器及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106649110B (zh) | 软件测试方法及系统 | |
US20240121261A1 (en) | Automated Security Analysis of Software Libraries | |
CN112181430B (zh) | 代码变更统计方法、装置、电子设备及存储介质 | |
US10733075B2 (en) | Data-driven synthesis of fix patterns | |
CN115828264A (zh) | 智能合约漏洞检测方法、系统及电子设备 | |
CN115145751A (zh) | 微服务系统故障根因定位方法、装置、设备及存储介质 | |
CN114328161A (zh) | Java接口的测试方法、装置、存储介质和电子设备 | |
TW201629768A (zh) | 基礎架構規則產生技術 | |
CN113935041A (zh) | 面向实时操作系统设备的漏洞检测系统及方法 | |
Lei et al. | Toward understanding information models of fault localization: Elaborate is not always better | |
CN117493188A (zh) | 接口测试方法及装置、电子设备及存储介质 | |
US10877870B2 (en) | Method and system for verifying properties of source code | |
US8478575B1 (en) | Automatic anomaly detection for HW debug | |
CN115033489A (zh) | 代码资源检测方法、装置、电子设备及存储介质 | |
CN111966598A (zh) | 一种C++Test定制化方法及航天型号软件代码单元静态分析方法 | |
CN113495831A (zh) | 基于关键字生成测试用例的方法、系统、设备及介质 | |
CN112612471B (zh) | 代码处理方法、装置、设备及存储介质 | |
CN111124885B (zh) | 一种白牌交换机测试方法与装置 | |
CN113568662B (zh) | 一种基于调用关系的代码变更影响范围分析方法及系统 | |
Zhu et al. | Fault localization using function call sequences | |
Jiang et al. | Analysis of procedure splitability | |
CN113986736B (zh) | 基于java代理和字节码增强的慢sql监控系统及方法 | |
Santi et al. | Reducing the number of sequential diagnosis iterations in hypercubes | |
CN118445201A (zh) | 一种Reduce函数可交换性测试方法 | |
CN115168188A (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 |