一种基于接口自动生成的IAM接口权限验证方法和装置
技术领域
本发明涉及接口权限验证技术领域,尤其涉及一种基于接口自动生成的IAM接口权限验证方法和装置。
背景技术
IAM(identity access management)即身份识别与访问管理。在云计算技术领域,IAM的总体建设目标是配合实现企业IT治理,实现对云资源的集中授权(Authorization),可根据用户所在部门或者角色授权其可访问的资源范围,做到一次配置,全局生效;在客户购买云计算产品后,通过IAM权限配置实现对不同用户分配不同的产品服务权限等需求。
在云计算领域,IAM需要管理的接口数量庞大,涉及的权限策略组合场景复杂,在进行IAM功能软件测试时,测试任务量繁重,迭代测试时重复工作量较大,有必要通过自动化测试技术减轻测试人员执行IAM功能测试的压力。
在传统的接口自动化测试方案中,自动化测试编写的接口代码数量随着产品接口数量的增加而同步增加,当产品接口变动时,自动化接口维护成本较高。基于接口自动生成的测试方案以接口文档作为开发和测试之间衔接的桥梁,可有效解决上述问题。
接口自动生成的自动化接口测试方案难点主要在于适配不同的接口参数类型,针对不同的参数类型包括多种参数类型嵌套的复杂数据结构,测试框架须能准确适配,并能构造出对应类型的随机参数。
中国专利文献CN113064585提供了一种基于JSON模式的实时报文接口自动生成方法。该方法根据传输协议定义数据类型,生成数据结构体;将数据结构体转换成JSONSchema文件;对生成的JSON Schema文件进行校验;将经校验后的JSON Schema文件转化为QTui文件;利用Qtui文件生成静态报文接口。该方法主要解决了接口测试的验证不够直观和充分、从而影响接口开发和联试效率的问题。该专利只是通过结构化的数据来优化接口的维护,提升接口测试交互性,并未涉及接口的自动测试。
中国专利文献CN202110458096.6提供了一种接口自动化测试的方法及装置,涉及自动化测试领域,可应用于金融领域和其他领域,所述方法包含:通过负载均衡服务器获得有效交易报文,对所述有效交易报文按预设关键字段拆分提取后,通过预设格式拼接生成测试数据;根据用户选择的交易场景生成测试请求,根据所述测试请求解析获得对应的字段信息;根据所述字段信息匹配所述测试数据,根据匹配结果中的所述测试数据生成交易请求,将所述交易请求提供至负载均衡服务器进行接口测试。该专利通过抓包的方式获取接口信息,再来构造接口请求完成接口测试,此类方法依赖于历史的接口请求数据,当产品的接口发生变化时,需要对该接口执行过调用该方法才能抓包分析接口信息,有一定的局限性。
中国专利文献CN202110341348.7提供了一种基于日志分析的接口测试方法及装置,可应用于金融领域,方法包括:从获取的应用程序日志中抽取接口日志;将接口日志的格式进行转换并解析接口日志后,将接口日志加载至MySQL数据库中;通过预先建立的接口检查模型对加载至MySQL数据库中的接口日志的进行检查测试。该方法对海量应用日志进行清洗、抽取,然后建立数据仓库,以父子节点的模式进行数据加载,通过梳理接口核对规则建立接口检查模型,对数据仓库中的数据进行分析生成接口检查结果,实时判断检查结果与预期结果是否一致。该发明接口自动化测试领域,但是仍受限于接口的历史执行记录,服务器上需要有接口的执行记录,才能完成接口的解析和测试。
以上三项专利文献都涉及软件接口测试技术,均旨在通过自动化测试技术来提升接口测试的效率;目前,针对云计算IAM接口权限测试领域,并没有高效、成熟的自动化测试解决方案。
因此,如何提供一种接口权限的自动化验证方法,实现接口权限快速验证的同时降低接口开发和维护成本,成为亟待解决的技术问题。
发明内容
有鉴于此,本发明提供一种基于接口自动生成的IAM接口权限验证方法和装置以及应用,旨在解决IAM接口测试场景组合多且复杂、手工测试工作量繁重的问题。
一方面,本发明提供一种接口自动生成方法,包括:
根据符合结构化数据格式的接口文档自动生成接口方法名称;
根据接口文档中对接口入参的描述定义接口方法的入参结构体;
根据接口文档中对接口返回值的描述定义接口方法的返回值结构体。
进一步地,所述根据符合结构化数据格式的接口文档自动生成接口方法名称,包括:
将json文件转化为json格式的结构化接口数据;
接口自动生成框架加载json格式的结构化接口数据,根据每个接口的httpmethod、uri、input_shape和output_shape自动生成对应的接口函数;
采用模块名+uri字段+http method字段对接口函数的命名唯一指定,每个接口函数对应一个http请求。
进一步地,所述根据接口文档中对接口入参(input_shape)的描述定义接口方法的入参结构体,包括:接口测试框架根据接口入参数据类型的不同,定义不同的数据格式,每一种数据格式为一个类,每个类包含一个example方法或包含members和example两个方法。
进一步地,所述根据接口文档中对接口入参的描述定义接口方法的入参结构体,还包括:
当接口入参为整数类型的数据,采用IntegerShape作为数据格式的描述,IntegerShape类的example方法通过random.randint函数生成随机整型参数;
当接口入参为小数类型的数据,采用FloatShape作为数据格式的描述,FloatShape类的example方法通过random.uniform函数生成随机浮点型参数;
当接口入参为布尔类型的数据,采用BoolShape作为数据格式的描述,BoolShape类的example方法通过random.choice函数生成随机True / False值;
当接口入参为字符串类型的数据,采用StringShape作为数据格式的描述,StringShape类的example方法通过random.choice函数生成随机字符串参数;
当接口入参为列表类型的数据,采用ListShape作为数据格式的描述;members方法用于描述列表每个子元素的数据类型,并最终将每一子元素对应到一种简单数据类型;example方法根据列表元素的数据类型通过random函数生成对应类型的随机参数;
当接口入参为字典类型的数据,采用DictShape作为数据格式的描述;members方法用于描述字典每个子元素的数据类型,并最终将每一子元素对应到一种简单数据类型;example方法根据字典key-value的数据类型通过random函数生成对应类型的随机参数;
当接口入参为结构体类型,采用StructureShape作为数据格式的描述;members方法用于描述结构体类型的每个子元素的数据类型,通过递归将每一级子元素最终对应到一种简单数据类型;example方法将递归得到的每一级子元素根据简单数据类型的example方法生成对应的随机参数。
进一步地,根据接口文档中对接口返回值(output_shape)的描述定义接口方法的返回值结构体,包括:接口测试框架根据接口返回值数据类型的不同,定义不同的数据格式,每一种数据格式为一个类,每个类包含一个example方法或包含members和example两个方法。
又一方面,本发明提供一种基于接口自动生成的IAM接口权限验证方法,包括:
步骤一:对接口数据进行解析;
步骤二:对接口进行遍历调用;
步骤三:对接口权限进行验证。
进一步地,上述方法步骤一中根据每个接口文档的json文件对应创建一个接口类,接口文档中的每一个接口对应接口类的一个方法。
进一步地,上述方法步骤二中通过遍历接口类实例的所有类方法,对所有接口的遍历调用,包括:
指定接口请求的服务端地址Host、IAM用户的用户名和密码,完成接口类实例;
根据每个接口方法对服务端地址Host和本接口的uri拼接并得到http请求的url;
基于接口类实例中的IAM用户的用户名和密码计算出cookie,实现身份认证,将cookie注入http请求头header信息中;
根据入参数据模型调用对应数据类型的example方法,生成随机参数放到对应接口的请求参数中构造出接口请求的请求体body;
将完整的http请求发送到服务端。
进一步地,上述方法步骤三中对接口文档中所有接口的IAM权限测试,包括:
将服务端返回的http请求的接口响应与当前IAM用户所配置的接口权限策略对比,验证接口响应是否与预期响应值一致;
当http请求出现指定错误码,判定当前测试用户对接口无访问权限;当http请求未出现指定报错码,判定当前测试用户对接口具有访问权限。
最后,本发明还提供一种基于自动生成的IAM接口权限验证装置,包括:
接口数据解析模块,用于根据每个接口文档的json文件对应创建一个接口类,接口文档中的每一个接口对应接口类的一个方法。
接口数据解析模块,用于根据每个接口文档的json文件对应创建一个接口类,接口文档中的每一个接口对应接口类的一个方法。
接口遍历调用模块,用于指定接口请求的服务端地址Host以及IAM用户的用户名和密码,完成接口类实例;根据每个接口方法对服务端地址Host和本接口的uri拼接并得到http请求的url;基于接口类实例中的IAM用户的用户名和密码得到cookie,实现身份认证,将cookie注入http请求头header信息中;根据入参数据模型调用对应数据类型的example方法,生成随机参数放到对应接口的请求参数中构造出接口请求的请求体body;将完整的http请求发送到服务端。
权限校验模块,用于将服务端返回的http请求的接口响应与当前IAM用户所配置的接口权限策略对比,验证接口响应是否与预期响应值一致;当http请求出现指定错误码,判定当前测试用户对接口无访问权限;当http请求未出现指定报错码,判定当前测试用户对接口具有访问权限。
本发明的基于接口自动生成的IAM接口权限验证方法,根据符合结构化数据格式的接口文档自动生成接口;根据接口文档中对接口入参的定义构造对应数据类型的随机接口入参;结合随机参数遍历所有自动生成的接口完成接口调用;将服务端返回的接口响应与所配置的接口权限策略对比,验证对应接口的权限是否与预期一致,从而验证当前测试用户对接口是否具有访问权限。具有以下有益效果:
1)实现了接口权限验证的全流程自动化,整个接口验证流程不需要手工操作,可有效减少验证测试的人力投入,提升验证测试效率;
2)当接口发生变更时,只需要提供对应的接口文档即可适配最新的接口完成验证测试,不需要额外的维护成本;
3)本发明提供的接口自动生成方法,可以为其他业务场景下的接口测试提供参考。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为根据本发明示例性第一实施例的接口自动生成方法的流程图;
图2为根据本发明示例性第二实施例的接口数据模型定义的示意图;
图3为根据本发明示例性第三实施例的基于接口自动生成的IAM接口权限验证方法流程图;
图4为根据本发明示例性第四实施例的基于接口自动生成的IAM接口权限验证方法的执行流程图;
图5为根据本发明示例性第五实施例的基于接口自动生成的IAM接口权限验证装置的结构框图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
本发明所述的接口,包括内部模块间的接口及对外提供的接口,均通过Yapi接口管理平台管理,Yapi管理的接口可以导出为本地json文件,再将此json文件的数据结构转化为本方法可识别的数据格式。
以下利用图1-图5所示实施方式对本发明进行详细介绍说明。
图1为根据本发明示例性第一实施例的接口自动生成方法的流程图,如图1所示,本发明接口自动生成方法,包括:
步骤S110:根据符合结构化数据格式的接口文档自动生成接口方法名称;
步骤S120:根据接口文档中对接口入参的描述定义接口方法的入参结构体;
步骤S130:根据接口文档中对接口返回值的描述定义接口方法的返回值结构体。
具体的,本实施例步骤S110根据符合结构化数据格式的接口文档自动生成接口方法名称,包括:
将json文件转化为json格式的结构化接口数据;
接口自动生成框架加载json格式的结构化接口数据,根据每个接口的描述(httpmethod、uri、input_shape、output_shape)自动生成对应的接口函数;
采用模块名+uri字段+http method字段对接口函数的命名唯一指定,每个接口函数对应一个http请求。
本实施例步骤S120根据接口文档中对接口入参(input_shape)的描述定义接口方法的入参结构体,包括:接口测试框架根据接口入参数据类型的不同,定义不同的数据格式,每一种数据格式为一个类,每个类包含一个example方法或包含members和example两个方法。
本实施例步骤S130根据接口文档中对接口返回值的描述定义接口方法的返回值结构体,包括:接口测试框架根据接口返回值数据类型的不同,定义不同的数据格式,每一种数据格式为一个类,每个类包含一个example方法或包含members和example两个方法。
图2为根据本发明示例性第二实施例的接口数据模型定义的示意图,图2为图1所示方法的优选实施方式。如图2所示, 根据接口文档中对接口入参的描述定义接口方法的入参结构体,包括:
当接口入参为整数类型的数据,采用IntegerShape作为数据格式的描述,IntegerShape类的example方法通过random.randint函数生成随机整型参数;
当接口入参为小数类型的数据,采用FloatShape作为数据格式的描述,FloatShape类的example方法通过random.uniform函数生成随机浮点型参数;
当接口入参为布尔类型的数据,采用BoolShape作为数据格式的描述,BoolShape类的example方法通过random.choice函数生成随机True / False值;
当接口入参为字符串类型的数据,采用StringShape作为数据格式的描述,StringShape类的example方法通过random.choice函数生成随机字符串参数;
当接口入参为列表类型的数据,采用ListShape作为数据格式的描述;members方法用于描述列表每个子元素的数据类型,并最终将每一子元素对应到一种简单数据类型;example方法根据列表元素的数据类型通过random函数生成对应类型的随机参数;
当接口入参为字典类型的数据,采用DictShape作为数据格式的描述;members方法用于描述字典每个子元素的数据类型,并最终将每一子元素对应到一种简单数据类型;example方法根据字典key-value的数据类型通过random函数生成对应类型的随机参数;
当接口入参为结构体类型,采用StructureShape作为数据格式的描述;members方法用于描述结构体类型的每个子元素的数据类型,通过递归将每一级元素最终对应到一种简单数据类型;example方法将递归得到的每一级子元素根据简单数据类型的example方法生成对应的随机参数。
接口返回值数据类型(output_shape)的定义复用接口入参数据格式的定义方法,这里不再赘述。
图3为根据本发明示例性第三实施例的基于接口自动生成的IAM接口权限验证方法流程图;如图3所示,本发明基于接口自动生成的IAM接口权限验证方法,包括:
S210:对接口数据进行解析;
S220:对接口进行遍历调用;
S230:对接口权限进行验证。
本实施例步骤S210中根据每个接口文档的json文件对应创建一个接口类,接口文档中的每一个接口对应接口类的一个方法;
本实施例步骤S220通过遍历接口类实例的所有类方法,对所有接口的遍历调用,包括:
指定接口请求的服务端地址Host以及IAM用户的用户名和密码,完成接口类实例;
根据每个接口方法对服务端地址Host和本接口的uri拼接并得到http请求的url;
基于接口类实例中的IAM用户的用户名和密码得到cookie,实现身份认证,将cookie注入http请求头header信息中;
根据入参数据模型调用对应数据类型的example方法,生成随机参数放到对应接口的请求参数中构造出接口请求的请求体body;
将完整的http请求发送到服务端。
本实施例步骤S230对接口文档中所有接口的IAM权限测试,包括:
将服务端返回的http请求的接口响应与当前IAM用户所配置的接口权限策略对比,验证接口响应是否与预期响应值一致;其中,接口响应包括状态码和响应body;
当http请求出现指定错误码,如:“body.respCode=9998 ,,body.msg=不允许执行此操作”,判定当前测试用户对接口无访问权限;当http请求未出现指定报错码,判定当前测试用户对接口具有访问权限。
本实施例实现了接口权限验证的全流程自动化,整个接口权限验证的流程中不需要手工操作,可有效减少接口验证测试的人力投入,提升验证测试效率。
当接口发生变更时,只需要提供对应的接口文档即可适配最新的接口完成调用和测试,不需要额外的维护成本。
图4为根据本发明示例性第四实施例的基于接口自动生成的IAM接口权限验证方法的执行流程图;图4为图3所示实施例的的优选实施方式。
图5为根据本发明示例性第五实施例的基于接口自动生成的IAM接口权限验证装置的结构框图。图1、图2、图3和图4所示实施例可以适用于本实施例,具体如图5所示,基于自动生成的IAM接口权限验证装置,包括:
接口数据解析模块10,用于根据每个接口文档的json文件对应创建一个接口类,接口文档中的每一个接口对应接口类的一个方法。
接口遍历调用模块20,用于指定接口请求的服务端地址Host以及IAM用户的用户名和密码,完成接口类实例;根据每个接口方法对服务端地址Host和本接口的uri拼接并得到http请求的url;基于接口类实例中的IAM用户的用户名和密码得到cookie,实现身份认证,将cookie注入http请求头header信息中;根据入参数据模型调用对应数据类型的example方法,生成随机参数放到对应接口的请求参数中构造出接口请求的请求体body;将完整的http请求发送到服务端。
权限校验模块30,用于将服务端返回的http请求的接口响应与当前IAM用户所配置的接口权限策略对比,验证接口响应是否与预期响应值一致;当http请求出现指定错误码,判定当前测试用户对接口无访问权限;当http请求未出现指定报错码,判定当前测试用户对接口具有访问权限。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。