发明内容
本申请提出一种水平权限测试方法,应用于客户端,该方法包括:
当针对任一类型的业务进行水平权限测试时,针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合;
基于得到的所述多种业务参数组合分别生成对应的测试请求;
将生成的测试请求发送给服务端,并根据所述服务端返回的针对所述测试请求的业务执行结果对该类型的业务进行水平权限测试。
可选的,所述方法还包括:
采集在本地登录的用户在执行业务时产生的业务请求数据;
根据所述业务的类型对采集到的业务请求数据进行分类。
可选的,所述针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合包括
将所述多个用户在执行该类型的业务时所产生的业务请求数据依次选定为基准业务请求数据;
遍历选定的所述基准业务请求数据以外的其它业务请求数据中的业务参数,使用所述其它业务请求数据中的业务参数对所述基准业务请求数据中的同类型业务参数依次进行互换组合。
可选的,所述根据所述服务端返回的针对所述测试请求的业务执行结果对该类型的业务进行水平权限测试包括:
当接收到所述服务端返回的针对任一测试请求的业务处理成功的消息后,确定该类型的业务存在水平权限风险。
可选的,所述方法还包括:
当确定出该类型的业务存在水平权限风险后,在该类型的业务对应的***目录中添加用于提示测试人员该类型的业务存在水平权限风险的提示文件;和/或
当确定出该类型的业务存在水平权限风险后,向所述服务端上报该类型的业务存在水平权限风险。
本申请还提出一种水平权限测试装置,应用于客户端,该装置包括:
互换模块,用于针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合;
生成模块,用于基于得到的所述多种业务参数组合分别生成对应的测试请求;
测试模块,用于将生成的测试请求发送给服务端,并根据所述服务端返回的针对所述测试请求的业务执行结果对该类型的业务进行水平权限测试。
可选的,所述装置还包括:
采集模块,用于采集在本地登录的用户在执行业务时产生的业务请求数据;
分类模块,用于根据所述业务的类型对采集到的业务请求数据进行分类。
可选的,所述互换模块具体用于:
将所述多个用户在执行该类型的业务时所产生的业务请求数据依次选定为基准业务请求数据;
遍历选定的所述基准业务请求数据以外的其它业务请求数据中的业务参数,使用所述其它业务请求数据中的业务参数对所述基准业务请求数据中的同类型业务参数依次进行互换组合。
可选的,所述测试模块具体用于:
当接收到所述服务端返回的针对任一测试请求的业务处理成功的消息后,确定该类型的业务存在水平权限风险。
可选的,所述装置还包括:
添加模块,用于在确定出该类型的业务存在水平权限风险后,在该类型的业务对应的***目录中添加用于提示测试人员该类型的业务存在水平权限风险的提示文件;和/或
上报模块,用于在确定出该类型的业务存在水平权限风险后,向所述服务端上报该类型的业务存在水平权限风险。
本申请通过本申请通过在针对任一类型的业务进行水平权限测试时,针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合,并基于得到的所述多种业务参数组合分别生成对应的测试请求,然后将生成的测试请求发送给服务端,根据服务端返回的针对该测试请求的业务执行结果对该类型的业务进行水平权限测试,实现了客户端可以利用多个用户在执行该类型的业务时所产生的业务请求数据自适应的完成针对该类型的业务的水平权限测试,而不需要通过服务端来完成,可以提高水平权限测试的效率以及准确度。
具体实施方式
在现有实现中,在针对业务进行水平权限测试时,通常是由服务端来完成的。
在一种方案中,服务端可以针对每一类需要测试的业务的业务参数分别建立测试规则,然后服务端可以基于代码的静态扫描,通过运行已经建立的测试规则对需要测试的业务的业务参数进行水平权限测试,以完成针对该业务的水平权限测试。
然而,在该方案中,当有新业务上线时,需要重新建立针对该新业务的业务参数进行水平权限测试的规则,而且由于服务端在基于代码的静态扫描时,通常会涉及到多个类、多个***之间的交互,因此静态分析的过程会变的很复杂,而且有效性会降低,会出现误报、漏报的问题。
在另一种方案中,服务端可以针对每一类需要测试的业务的接口分别编写测试脚本,然后服务端可以通过运行编写完成的测试脚本对需要测试的业务的接口进行水平权限测试,以完成针对该业务的水平权限测试。
然而,在该方案中,当有新业务上线时,仍然需要重新编写针对该新业务的接口进行水平权限测试的脚本,而且由于在进行接口测试时,接口之间可能会存在关联性,因此一旦关联接口的参数发生更新,则需要重新调整测试脚本,整体效率非常低下。例如,假设A接口和B接口存在关联性,因此在测试B接口时,可能需要先运行A接口获取数据,当A接口的参数发生更新时,此时需要对B接口的测试脚本重新进行调整。
可见,在现有实现中,通过服务端来完成针对业务的水平权限测试,存在效率低下,以及容易发生误报、漏报的问题。
有鉴于此,本申请提出一种水平权限测试方法,通过在针对任一类型的业务进行水平权限测试时,针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合,并基于得到的所述多种业务参数组合分别生成对应的测试请求,然后将生成的测试请求发送给服务端,根据服务端返回的针对该测试请求的业务执行结果对该类型的业务进行水平权限测试,实现了客户端可以利用多个用户在执行该类型的业务时所产生的业务请求数据自适应的完成针对该类型的业务的水平权限测试,而不需要通过服务端来完成,可以提高水平权限测试的效率以及准确度。
下面通过具体实施例并结合具体的应用场景对本申请进行描述。
请参考图1,图1是本申请一实施例提供的一种水平权限测试方法,应用于客户端,所述方法执行以下步骤:
步骤101,当针对任一类型的业务进行水平权限测试时,针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合;
步骤102,基于得到的所述多种业务参数组合分别生成对应的测试请求;
步骤103,将生成的测试请求发送给服务端,并根据所述服务端返回的针对所述测试请求的业务执行结果对该类型的业务进行水平权限测试。
在本实施例中,所述客户端可以包括面向用户提供本地服务的客户端软件;例如,所述客户端可以是淘宝、支付宝客户端。所述服务端可以包括与所述客户端相互配合,为所述客户端提供远程服务端的服务器、服务器集群或者由服务器集群构建的云平台;例如,所述服务端可以是淘宝、支付宝平台。
所述客户端可以提供多种不同类型的本地业务,其中每一种本地业务可以分别对应一种业务操作,用户可以在该客户端面向用户提供的用户界面中执行正常的业务操作,来触发客户端与服务端进行对应的业务交互来执行该业务。
例如,假设所述客户端为淘宝客户端,淘宝客户端可以提供订单支付业务、订单查询业务、充值业务等多种不同类型的本地业务,当用户需要通过淘宝客户端对某一订单进行查询时,该用户可以在淘宝客户端提供的用户界面中针对该订单执行查询操作,来触发客户端与服务端进行对应的查询交互来完成该订单的查询。
在本实施例中,在针对该客户端进行水平权限测试时,通常可以针对该客户端提供每一类的本地业务分别进行测试。当选定了需要进行水平权限的本地业务后,客户端可以利用本地的测试数据库中多个用户在执行该类型的业务对应的业务操作时所产生的业务请求数据该类型的业务来完成针对该类型的业务的水平权限测试,而不再需要通过与该客户端配合的服务端来完成。
其中,该测试数据库,可以由客户端基于采集到的在本地登录的多个用户在执行业务的过程中所产生的产生业务请求数据创建而成。
如前所述,当用户使用登录账号登陆该客户端后,此时该用户可以通过在该客户端提供的用户界面中进行业务操作,来触发客户端与服务端进行对应的业务交互来执行该业务。因此,在采集多个用户在执行业务的过程中所产生的业务请求数据时,客户端可以在该多个用户使用登录账号分别登陆该客户端后,在后台实时的对该多个用户在执行业务的过程中,客户端与服务端之间的交互数据进行采集,然后从采集到的交互数据中提取该多个用户在执行业务时所产生的业务请求数据,然后基于提取出的业务请求数据来创建所述业务测试数据库。
其中,客户端与服务端之间的交互数据可以包括cookie数据以及form表单数据。例如,对于业务双方采用http client进行交互时,客户端与服务端之间的交互数据就可以包括本次交互过程中所产生的cookie数据和form表单数据。客户端在采集用户在执行业务的过程中客户端与服务端之间的交互数据时,具体的采集方法可以是基于***日志、基于测试版客户端的代码定制或者其它的采集方式,在本申请中不进行特别限定。
另外,由于客户端从所述交互数据中提取出的业务请求数据是由不同的用户在执行业务的过程中产生的,而不同的用户所执行的业务可能互不相同,因此客户端在基于从所述交互数据中提取出的业务请求数据创建所述测试数据库时,还可以根据不同的用户所执行的业务的类型,对测试数据库中的业务请求数据进行分类。
当分类完成后,测试数据库中的业务请求数据可以被划分为若干个分类,其中每一个分类分别对应一个类型的业务,并且在同一个分类中包括多个用户在执行该类型的业务时产生的业务请求数据。
在本实施例中,在针对所述客户端进行水平权限测试时,测试人员可以针对测试数据库中的每一个分类所对应的业务类型分别进行水平权限测试。当测试人员从测试数据库中选定一个分类,对该分类所对应的业务类型进行水平权限测试时,客户端可以针对该分类中多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合。
其中,客户端在针对该分类中多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合时,可以将该多个用户在执行该类型业务时所产生的业务请求数据依次选定为基准业务请求数据,然后遍历选定的基准业务请求数据以外的其它业务请求数据中的业务参数,使用该其他业务请求数据中的业务参数对选定的基准业务请求数据的同类型业务参数依次进行互换组合,以得到多种业务参数组合。
例如,假设测试人员从测试数据库中选定的分类中包括在本地登录的用户A和用户B两个用户在执行该类型的业务时所产生的业务请求数据1和业务请求数据2,由于业务请求数据1和业务请求数据2对应的业务类型相同,因此业务请求数据中的业务参数相同。假设该业务请求数据中包括用户名、订单号两种业务参数,那么客户端在针对该分类中的业务请求数据1和业务请求数据2进行同类型业务参数互换组合时,可以首先将业务请求数据1选定为基准业务请求数据,然后遍历业务请求数据2中的业务参数,使用业务请求数据2中的用户名对业务请求数据1中的用户名进行互换得到一个新的参数组合(用户B的用户名+用户A的订单号),然后再使用业务请求数据2中的订单号对业务请求数据1中的订单号进行互换得到一个新的参数组合(用户A的用户名+用户B的订单号)。当将业务请求数据1选定基准业务请求数据后,再将业务请求数据2选定为基准业务请求数据,重复以上过程。通过这种方式可以得到种业务参数组合,其中n为业务请求数据中业务参数的个数。
值得说明的是,以上是以测试人员从测试数据库中选定的分类中包括在本地登录的用户A和用户B两个用户在执行该类型的业务时产生的业务请求数据为例进行的说明,在实际应用中上述该被选定的分类也可以包括在本地登录的两个以上的用户在执行该类型的业务时产生的业务请求数据,对于上述被选定的分类包括在本地登陆的两个以上的用户在执行该类型的业务时产生的业务请求数据的情况,在进行业务参数互换组合时,其具体的实现方式与以上描述的过程相同,不再赘述。
当客户端针对上述分类中多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,得到多个业务参数组合后,客户端可以基于得到的该多个业务参数组合分别生成对应的测试请求,然后将生成的测试请求发送给服务端。
由于该测试请求基于上述多个业务参数组合生成,而且该多个业务参数组合在进行业务参数互换时,仅对同类型的业务参数进行了互换,因此生成的测试请求与用户在执行该类型的业务时所产生的业务请求数据在结构上完全相同,仅仅是对不同的业务请求数据中同类型的业务参数进行了互换,因此服务端收到该测试请求后,理论上可以正常的根据该测试请求数据进行业务处理。当服务端对收到的测试请求进行业务处理后,可以向客户端返回对应的处理结果;例如,如果业务处理成功,服务端可以向客户端返回一个业务处理成功的消息;如果业务处理失败,服务端可以向客户端返回一个业务处理失败的消息。
当客户端将生成的测试请求发送给服务端后,可以根据服务端返回的处理结果针对该类型的业务进行水平权限测试。
例如,由于测试请求中的业务参数是通过将不同的用户产生的业务请求数据中的业务参数进行互换组合后生成,如果服务端针对任一测试请求成功处理后,则表明该类型的业务存在水平权限风险;比如,如前所述,假设该测试请求的业务参数为用户A的用户名+用户B的订单号的组合,如果该测试请求被服务端成功处理后,则表明用户A和用户B之间可以互相访问到对方的数据,该类型的业务存在水平权限风险。
因此,当客户端在将生成的测试请求发送给服务端后,如果收到服务端返回的针对任一测试请求的业务处理成功的消息后,则可以确定该类型的业务存在水平权限风险。当然,客户端在将生成的测试请求发送给服务端后,如果收到服务端返回的针对所有测试请求均未成功处理的消息后,则可以确定该类型的业务不存在水平权限风险。
当客户端确定该类型的业务存在水平权限风险后,还可以将水平权限测试的结果上报给测试人员。在示出的一种实现方式中,如果客户端按照以上方案针对任一类型的业务进行了水平权限测试后,确定该类型的业务存在水平权限风险,客户端可以在该类型的业务对应的***目录中添加一个用于提示测试人员该类型的业务存在水平权限风险的提示文件。当客户端针对测试数据中的每一类型的业务均测试完成后,测试人员可以通过在***目录中查看是否添加了上述提示文件,来查看水平权限测试的结果。在示出的另一种实现方式中,如果客户端按照以上方案针对任一类型的业务进行了水平权限测试后,确定该某类型的业务存在水平权限风险,客户端还可以将测试结果直接上报给服务端;例如,可以向服务端发送一个用户上报该类型的业务存在水平权限风险的上报消息。当然,在实际应用中,上述两种向测试人员上报测试结果的方法可以互相结合,即按照以上方案针对任一类型的业务进行水平权限测试后,客户端可以在该类型的业务对应的***目录中添加上述提示文件,同时向服务端上报该水平权限测试的结果。
以下通过一个具体的应用实例对以上方案进行详细描述。
假设上述客户端为淘宝客户端,测试人员要针对淘宝客户端提供的订单查询业务进行水平权限测试。
在开始进行测试时,用户A和用户B可以使用其各自的登陆账号登陆淘宝客户端,通过在客户端上执行订单查询操作,来触发客户端与服务端进行查询交互来执行该订单查询业务。
与此同时,客户端可以在后台采集用户A和用户B在执行订单查询操作过程中,采集客户端与服务端之间交互的cookie数据以及form表单数据,然后从采集到的cookie数据以及form表单数据中提取与该订单查询业务相关的业务请求数据,然后根据提取出的用户A和用户B在执行订单查询操作过程中产生的业务请求数据创建测试数据库。
假设客户端提取出的用户A在执行该订单查询操作时产生的业务请求数据1如下表:
假设客户端提出的用户B在执行该订单查询操作时产生的业务请求数据2如下表:
客户端可以对上述业务请求数据1和业务请求数据2中的同类型业务参数进行互换组合,得到如下的两种业务参数组合:
客户端可以基于以上两种业务参数组合分别生成对应的测试请求1和测试请求2,然后将生成的测试请求1和测试请求2发送给服务端,由服务端对接收到的测试请求1和测试请求2进行业务处理,并向客户端返回对应的处理结果。
当客户端接收到服务端返回的针对上述测试请求1和测试请求2中任一测试请求的处理成功的消息后,客户端可以确定客户端当前的订单查询业务存在水平权限风险。当客户端接收到服务端返回的针对上述测试请求1和测试请求2的均未处理成功的消息后,则可以确定客户端当前的订单查询业务不存在水平权限风险。
以上描述的是测试人员针对客户端的订单查询业务进行水平权限测试的过程,当测试人员需要针对客户端的其它业务进行水平权限测试时,仍按可以按照以上方式进行实施,在本实施例中不再进行一一详述。
在以上实施例中,通过在针对任一类型的业务进行水平权限测试时,针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合,并基于得到的所述多种业务参数组合分别生成对应的测试请求,然后将生成的测试请求发送给服务端,根据服务端返回的针对该测试请求的业务执行结果对该类型的业务进行水平权限测试,实现了客户端可以利用多个用户在执行该类型的业务时所产生的业务请求数据自适应的完成针对该类型的业务的水平权限测试,而不需要通过建立复杂的测试规则或者编写复杂的测试脚本在服务端上来完成,因此可以提高水平权限测试的效率以及准确度。
与上述方法实施例相对应,本申请还提供了装置的实施例。
请参见图2,本申请提出一种水平权限测试装置20,应用于客户端;其中,请参见图3,作为承载所述水平权限测试装置20的客户端所涉及的硬件架构中,通常包括CPU、内存、非易失性存储器、网络接口以及内部总线等;以软件实现为例,所述水平权限测试装置20通常可以理解为加载在内存中的计算机程序,通过CPU运行之后形成的软硬件相结合的逻辑装置,所述装置20包括:
互换模块201,用于针对多个用户在执行该类型的业务时所产生的业务请求数据依次进行同类型业务参数的互换组合,以得到多种业务参数组合;
生成模块202,用于基于得到的所述多种业务参数组合分别生成对应的测试请求;
测试模块203,用于将生成的测试请求发送给服务端,并根据所述服务端返回的针对所述测试请求的业务执行结果对该类型的业务进行水平权限测试。
在本实施例中,所述装置20还包括:
采集模块204,用于采集在本地登录的用户在执行业务时产生的业务请求数据;
分类模块205,用于根据所述业务的类型对采集到的业务请求数据进行分类。
在本实施例中,所述互换模块201具体用于:
将所述多个用户在执行该类型的业务时所产生的业务请求数据依次选定为基准业务请求数据;
遍历选定的所述基准业务请求数据以外的其它业务请求数据中的业务参数,使用所述其它业务请求数据中的业务参数对所述基准业务请求数据中的同类型业务参数依次进行互换组合。
在本实施例中,所述测试模块203具体用于:
当接收到所述服务端返回的针对任一测试请求的业务处理成功的消息后,确定该类型的业务存在水平权限风险。
在本实施例中,所述装置20还包括:
添加模块206,用于在确定出该类型的业务存在水平权限风险后,在该类型的业务对应的***目录中添加用于提示测试人员该类型的业务存在水平权限风险的提示文件;和/或
上报模块207,用于在确定出该类型的业务存在水平权限风险后,向所述服务端上报该类型的业务存在水平权限风险。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。