CN113467761A - 一种基于Java反射原理的接口测试模板生成方法 - Google Patents

一种基于Java反射原理的接口测试模板生成方法 Download PDF

Info

Publication number
CN113467761A
CN113467761A CN202110628932.0A CN202110628932A CN113467761A CN 113467761 A CN113467761 A CN 113467761A CN 202110628932 A CN202110628932 A CN 202110628932A CN 113467761 A CN113467761 A CN 113467761A
Authority
CN
China
Prior art keywords
class
type
interface
parameter
current
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
Application number
CN202110628932.0A
Other languages
English (en)
Other versions
CN113467761B (zh
Inventor
陈晓阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Secco Travel Technology Service Co ltd
Original Assignee
Shanghai Secco Travel Technology Service Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Secco Travel Technology Service Co ltd filed Critical Shanghai Secco Travel Technology Service Co ltd
Priority to CN202110628932.0A priority Critical patent/CN113467761B/zh
Publication of CN113467761A publication Critical patent/CN113467761A/zh
Application granted granted Critical
Publication of CN113467761B publication Critical patent/CN113467761B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明属于后端开发和单元测试技术领域,具体公开了一种基于Java反射原理的接口测试模板生成方法,方法利用Java的反射原理,对需要进行测试的接口类进行解析,包括接口的调用地址、方法名、调用参数、参数的类型等,并最后将解析出的信息转换成JSON数据格式,同时把此功能封装成服务,对外暴露其功能HTTP调用接口,接口请求参数为接口的全限定类名。通过本发明的方法可以将需要进行单元测试的接口模板生成出来,后续只需要测试人员进行修改相关字段对应的数据即可,方法效率高且操作方便。

Description

一种基于Java反射原理的接口测试模板生成方法
技术领域
本发明涉及后端开发和单元测试技术领域,具体为一种基于Java反射原理的接口测试模板生成方法。
背景技术
API接口全称是Application Program Interface,通过API接口可以实现计算机软件之间的相互通信,开发人员可以通过API接口程序开发应用程序,可以减少编写无用程序,减轻编程任务。
接口测试是测试系统组件间接口的一种测试,重点关注数据传递。接口测试一般会用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试。对应后端开发者来说,开发完接口后,接口测试是必备流程,也是检验接口可用性和正确性的最佳途径之一,接口测试可以获得较高的投资回报。
对于软件接口测试方法分别存在着以下问题:
一、软件接口开发完成后,接口测试通常需要人工在测试工具中手动填写接口的地址、参数等,而且可能存在格式的错误,大大浪费了开发和测试人员的时间。
二、目前尚无完全自动化生成API接口测试模板的工具,需要开发一个通用的方法进行模板生成。
三、单元测试是Java开发中主要的测试手段,但随着程序数量日益增多以及程序复杂性日益提高,该方法效率低下,也有不便性。
四、通常需要进行自测,自测可以是单元测试,不过光靠单元测试进行模拟并不能完全测试出代码中存在的问题。
发明内容
本发明的目的在于提供一种基于Java反射原理的接口测试模板生成方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于Java反射原理的接口测试模板生成方法,包括如下步骤:
步骤一:首先根据接口类的全限定名作为参数,通过Class.forName(StringclassName)方法去获取当前接口类的对象;
步骤二:基于上述获取的接口类,再通过Class.getDeclaredMethods()获取当前类中所有的方法列表,该列表是以数组形式(Method[])呈现,记作methods;
步骤三:对上述的接口方法数组methods进行遍历,用于组装内部的入参;
步骤四:在遍历的对象数组的for循环中,通过method.getParameterTypes()先获取当前方法的所有入参类型,是类数组泛型对象的格式(Class<?>[]),记作parameterTypes,同时声明Map<String,Object>对象存储当前遍历的方法入参,记作rawMap;
步骤五:对上面的入参类型数组parameterTypes进行遍历,在for循环中,再次利用Class.forName(String className)方法去获取入参对象类,这里的className是通过遍历的入参类型的getName()获取,获取到的对象类记作parameterClass;
步骤六:对上面获取的入参对象类parameterClass调用getDeclaredFields()方法,获得到当前入参类中所有声明的成员变量数组(Field[]),记作fields,即为需要获取的深层次的入参字段;
步骤七:对上面成员变量数组fields进行遍历,在for循环中对成员变量Field需要进行分类判断,若对象是:int.class,Integer.class,Object.class,List.class,long.class,Long.class,double.class,Double.class,LazyStringList.class,则可以直接把当前成员变量名和相应类型数据默认值塞入上述的rawMap对象中,该对象为最终的入参信息汇总对象。
优选的,步骤七中若for循环中Field类是Object.class类型,那么需要再次通过getDeclaredFields()获取声明的成员变量数组,并重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型;若for循环中Field类是List.class类型,那么需要通过Field类中的getGenericType()方法获取List中的原始对象类型Type,记作genericType,再把Type类型参数转换为参数类型类ParameterizedType,通过其getActualTypeArguments()方法可以获取实际参数类型数组类(Class[]),这里只需要取数组中第一个类即可(Class<?>),记作genericClazz,通过获取的实际入参类genericClazz,再次通getDeclaredFields()获取声明的成员变量数组,重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型。
优选的,上述步骤二中还包括:声明一个Map<String,Object>对象,用于存储最终生成的组装参数信息,记作paramMap。
优选的,上述步骤还包括声明List<Map<String,Object>>对象,记作listParam,用来存储List.class对象的入参信息,通过上面迭代获取到的List类型入参的所有信息,把其添加到listParam中;把当前List类型入参的成员变量名和上面得到的listParam塞入上面提及的rawMap中,便完成List类型的参数遍历。当步骤三步骤中的所有的methods方法遍历完成后,将上面得到的rawMap塞入paramMap中;
并通过param.put("rawModeData",Json.toJson(rawMap))方法执行,其中rawModeData是Postman中特定的命名。
优选的,除了上述遍历参数填充param外,对每个method对象需要默认填充下面的部分信息,用于后续Postman工具的导入:
Figure BDA0003099996690000031
Figure BDA0003099996690000041
其中methodName为method对象getName()方法获取,port是当前服务端口号,serviceName为当前接口类对象名,其他参数均为默认值。
优选的,声明对象Map<String,Object>,记作map,用于生成.json文件,需要进行如下值填充:
map.put("id",UUID.randomUUID().toString());
map.put("name",serviceName);
map.put("requests",param);
其中serviceName为当前接口类对象名,param为前面获得的。
根据上面的map转成Json字符串,进一步生成.json文件。.json格式的文件导入到postman中,便可以自动完成当前接口类中所有的接口测试模板。
与现有技术相比,本发明的有益效果是:
本发明利用Java的反射原理,对需要进行测试的接口类进行解析,包括接口的调用地址、方法名、调用参数、参数的类型等,并最后将解析出的信息转换成JSON数据格式,同时把此功能封装成服务,对外暴露其功能HTTP调用接口,接口请求参数为接口的全限定类名;通过本发明的方法可以将需要进行单元测试的接口模板生成出来,后续只需要测试人员进行修改相关字段对应的数据即可,方法效率高且操作方便。
附图说明
图1为本发明迭代法解析当前接口类对象的入参的流程框图;
图2为本发明postman导入.json文件后的效果图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-2,本发明提供一种技术方案:一种基于Java反射原理的接口测试模板生成方法,包括如下步骤:
步骤一:首先根据接口类的全限定名作为参数,通过Class.forName(StringclassName)方法去获取当前接口类的对象,比如输入当前接口类的全限定类名:com.saicmobility.sr.srpassengerservice.api.SrPassengerService便可以获取到SrPassengerService这个类,这样获得到当前接口类的所有信息;由于是为了做接口测试,只需要获取当前对象的所有接口方法,因为是接口类,所以不会存在私有方法;
对于每个接口调用的子URL是当前接口类名加上方法名,比如当前方法是getPassengerInfo,那么子URL最后就是/SrPassengerService/getPassengerInfo;
步骤二:基于上述获取的接口类,再通过Class.getDeclaredMethods()获取当前类中所有的方法列表,该列表是以数组形式(Method[])呈现,记作methods;
步骤三:对上述的接口方法数组methods进行遍历,用于组装内部的入参;
步骤四:在遍历的对象数组的for循环中,通过method.getParameterTypes()先获取当前方法的所有入参类型,是类数组泛型对象的格式(Class<?>[]),记作parameterTypes,同时声明Map<String,Object>对象存储当前遍历的方法入参,记作rawMap;
步骤五:对上面的入参类型数组parameterTypes进行遍历,在for循环中,再次利用Class.forName(String className)方法去获取入参对象类,这里的className是通过遍历的入参类型的getName()获取,获取到的对象类记作parameterClass;
步骤六:对上面获取的入参对象类parameterClass调用getDeclaredFields()方法,获得到当前入参类中所有声明的成员变量数组(Field[]),记作fields,即为需要获取的深层次的入参字段;
步骤七:对上面成员变量数组fields进行遍历,在for循环中对成员变量Field需要进行分类判断,若对象是:int.class,Integer.class,Object.class,List.class,long.class,Long.class,double.class,Double.class,LazyStringList.class,则可以直接把当前成员变量名和相应类型数据默认值塞入上述的rawMap对象中,该对象为最终的入参信息汇总对象。
在本实施例中,步骤七中若for循环中Field类是Object.class类型,那么需要再次通过getDeclaredFields()获取声明的成员变量数组,并重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型;若for循环中Field类是List.class类型,那么需要通过Field类中的getGenericType()方法获取List中的原始对象类型Type,记作genericType,再把Type类型参数转换为参数类型类ParameterizedType,通过其getActualTypeArguments()方法可以获取实际参数类型数组类(Class[]),这里只需要取数组中第一个类即可(Class<?>),记作genericClazz,通过获取的实际入参类genericClazz,再次通getDeclaredFields()获取声明的成员变量数组,重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型。
在本实施例中,上述步骤二中还包括:声明一个Map<String,Object>对象,用于存储最终生成的组装参数信息,记作paramMap。
在本实施例中,上述步骤还包括声明List<Map<String,Object>>对象,记作listParam,用来存储List.class对象的入参信息,通过上面迭代获取到的List类型入参的所有信息,把其添加到listParam中;把当前List类型入参的成员变量名和上面得到的listParam塞入上面提及的rawMap中,便完成List类型的参数遍历。当步骤三步骤中的所有的methods方法遍历完成后,将上面得到的rawMap塞入paramMap中;
并通过param.put("rawModeData",Json.toJson(rawMap))方法执行,其中rawModeData是Postman中特定的命名。
在本实施例中,除了上述遍历参数填充param外,对每个method对象需要默认填充下面的部分信息,用于后续Postman工具的导入:
Figure BDA0003099996690000071
其中methodName为method对象getName()方法获取,port是当前服务端口号,serviceName为当前接口类对象名,其他参数均为默认值。
在本实施例中,声明对象Map<String,Object>,记作map,用于生成.json文件,需要进行如下值填充:
map.put("id",UUID.randomUUID().toString());
map.put("name",serviceName);
map.put("requests",param);
其中serviceName为当前接口类对象名,param为前面获得的。
根据上面的map转成Json字符串,进一步生成.json文件。.json格式的文件导入到postman中,便可以自动完成当前接口类中所有的接口测试模板。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (2)

1.一种基于Java反射原理的接口测试模板生成方法,其特征在于,包括如下步骤:
步骤一:首先根据接口类的全限定名作为参数,通过Class.forName(StringclassName)方法去获取当前接口类的对象;
步骤二:基于上述获取的接口类,再通过Class.getDeclaredMethods()获取当前类中所有的方法列表,该列表是以数组形式(Method[])呈现,记作methods;
步骤三:对上述的接口方法数组methods进行遍历,用于组装内部的入参;
步骤四:在遍历的对象数组的for循环中,通过method.getParameterTypes()先获取当前方法的所有入参类型,是类数组泛型对象的格式(Class<?>[]),记作parameterTypes,同时声明Map<String,Object>对象存储当前遍历的方法入参,记作rawMap;
步骤五:对上面的入参类型数组parameterTypes进行遍历,在for循环中,再次利用Class.forName(String className)方法去获取入参对象类,这里的className是通过遍历的入参类型的getName()获取,获取到的对象类记作parameterClass;
步骤六:对上面获取的入参对象类parameterClass调用getDeclaredFields()方法,获得到当前入参类中所有声明的成员变量数组(Field[]),记作fields,即为需要获取的深层次的入参字段;
步骤七:对上面成员变量数组fields进行遍历,在for循环中对成员变量Field需要进行分类判断,若对象是:int.class,Integer.class,Object.class,List.class,long.class,Long.class,double.class,Double.class,LazyStringList.class,则可以直接把当前成员变量名和相应类型数据默认值塞入上述的rawMap对象中,该对象为最终的入参信息汇总对象。
2.根据权利要求1所述的一种基于Java反射原理的接口测试模板生成方法,其特征在于,所述步骤七中若for循环中Field类是Object.class类型,那么需要再次通过getDeclaredFields()获取声明的成员变量数组,并重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型;若for循环中Field类是List.class类型,那么需要通过Field类中的getGenericType()方法获取List中的原始对象类型Type,记作genericType,再把Type类型参数转换为参数类型类ParameterizedType,通过其getActualTypeArguments()方法可以获取实际参数类型数组类(Class[]),这里只需要取数组中第一个类即可(Class<?>),记作genericClazz,通过获取的实际入参类genericClazz,再次通getDeclaredFields()获取声明的成员变量数组,重复步骤六,进行迭代循环遍历深层次的入参类型,直到入参是基础类型。
CN202110628932.0A 2021-06-03 2021-06-03 一种基于Java反射原理的接口测试模板生成方法 Active CN113467761B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110628932.0A CN113467761B (zh) 2021-06-03 2021-06-03 一种基于Java反射原理的接口测试模板生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110628932.0A CN113467761B (zh) 2021-06-03 2021-06-03 一种基于Java反射原理的接口测试模板生成方法

Publications (2)

Publication Number Publication Date
CN113467761A true CN113467761A (zh) 2021-10-01
CN113467761B CN113467761B (zh) 2024-06-14

Family

ID=77872282

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110628932.0A Active CN113467761B (zh) 2021-06-03 2021-06-03 一种基于Java反射原理的接口测试模板生成方法

Country Status (1)

Country Link
CN (1) CN113467761B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114860413A (zh) * 2022-05-25 2022-08-05 苏州浪潮智能科技有限公司 一种java转json的处理方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015147656A2 (en) * 2014-03-26 2015-10-01 Auckland Uniservices Limited Automatic process and system for software development kit for application programming interface
CN108595342A (zh) * 2018-05-14 2018-09-28 杭州有赞科技有限公司 单元测试方法和装置
CN109388402A (zh) * 2018-09-26 2019-02-26 杭州米加科技股份有限公司 基于Android平台的轻量级Josn格式解析工具
CN110232024A (zh) * 2019-05-26 2019-09-13 必成汇(成都)科技有限公司 软件自动化测试框架及测试方法
CN111459801A (zh) * 2020-03-09 2020-07-28 江苏苏宁物流有限公司 Rsf远程服务接口功能测试方法、模块、计算机设备和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015147656A2 (en) * 2014-03-26 2015-10-01 Auckland Uniservices Limited Automatic process and system for software development kit for application programming interface
CN108595342A (zh) * 2018-05-14 2018-09-28 杭州有赞科技有限公司 单元测试方法和装置
CN109388402A (zh) * 2018-09-26 2019-02-26 杭州米加科技股份有限公司 基于Android平台的轻量级Josn格式解析工具
CN110232024A (zh) * 2019-05-26 2019-09-13 必成汇(成都)科技有限公司 软件自动化测试框架及测试方法
CN111459801A (zh) * 2020-03-09 2020-07-28 江苏苏宁物流有限公司 Rsf远程服务接口功能测试方法、模块、计算机设备和存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114860413A (zh) * 2022-05-25 2022-08-05 苏州浪潮智能科技有限公司 一种java转json的处理方法及系统

Also Published As

Publication number Publication date
CN113467761B (zh) 2024-06-14

Similar Documents

Publication Publication Date Title
CN110427331B (zh) 基于接口测试工具自动生成性能测试脚本的方法
CN110309071B (zh) 测试代码的生成方法及模块、测试方法及系统
US8490050B2 (en) Automatic generation of user interfaces
CN110096434A (zh) 一种接口测试方法及装置
CN107832059A (zh) 一种基于Makefile的代码静态分析方法和装置
CN114610640B (zh) 一种面向物联网可信执行环境的模糊测试方法和系统
CN111782117B (zh) 界面的展示方法和装置、存储介质、电子装置
CN110879776A (zh) 一种测试用例的生成方法和装置
CN113238740A (zh) 代码生成方法、代码生成装置、存储介质及电子设备
CN114116510A (zh) 一种接口参数校验方法及装置
CN111949543A (zh) 基于分布式平台的测试方法、装置、电子设备及存储介质
CN107748715B (zh) 基于Unity的纹理贴图配置信息检测方法及其系统
CN112527676A (zh) 模型自动化测试方法、装置及存储介质
CN117931666B (zh) 一种软件无线电通信设备核心框架测试系统及方法
CN113467761A (zh) 一种基于Java反射原理的接口测试模板生成方法
CN112783791B (zh) 接口测试案例的生成方法及装置
CN103955425A (zh) 网页web探索测试装置及方法
CN113238739A (zh) 一种插件开发和数据获取方法、装置、电子设备及介质
CN117520190A (zh) 一种云桌面客户端及其执行测试的方法
CN115292178A (zh) 测试数据搜索方法、装置、存储介质以及终端
CN116204173A (zh) 模型转换方法、装置及电子设备
CN114579470A (zh) 一种单元测试方法、装置、电子设备及存储介质
CN118261143B (zh) Unity环境下的Json数据解析方法、装置、设备及介质
CN115373655B (zh) 一种基于标准化模板的信息协议代码自动生成方法
CN109358855A (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