一种用于自动生成接口准确性校验脚本的系统的制作方法

专利2022-06-29  74


本发明涉及接口自动化测试,特别是一种用于自动生成接口准确性校验脚本的系统。



背景技术:

当前市场上的接口自动化测试基本上都是通过人工对照一个个接口文档,然后编写出一个个接口测试函数及接口测试文件,而编写接口准确性测试函数时,测试覆盖度往往会因人而异,造成接口测试不完整的现象;另外,一般手动编写接口测试函数时往往需要定期维护多份测试数据;再者,当一个接口中存在大量请求参数时,在每个接口测试函数中都要重新拼接一次接口请求体,这就造成一个接口测试文件的代码量非常庞大,难以维护。



技术实现要素:

本发明的目的在于提供一种用于自动生成接口准确性校验脚本的系统。

本发明的目的通过如下技术方案实现:一种用于自动生成接口准确性校验脚本的系统,它包括以下模块:输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;输出模块,其设有接口定义文件、接口模型类以及接口测试文件;所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以json形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件,接口测试文件中包含多个测试函数,每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的json形式的请求体,接着根据服务器配置文件拼接请求url,并发送接口请求;最后对比接口响应的实际值与预期值。

较之现有技术而言,本发明的优点在于:

1.本测试系统可以根据接口文档及接口场景定义文件快速生成测试脚本,而减少人工编写脚本的成本;同时可以快速跟进项目,降低由于测试过程耗时过长导致项目延期的风险。

2.本测试方案可以覆盖单接口准确性校验的所有测试场景,避免该测试范围内的漏测。

3.本测试方案只需维护接口文档、参数校验场景定义文件、被测服务配置文件,不需要维护大量的测试数据及测试脚本,从而解放人力成本。

附图说明

图1是本发明的总流程图。

图2是接口定义文件生成工具的工作流程图。

图3是接口模型类生成工具的工作流程图。

图4是参数校验脚本生成工具的工作流程图。

具体实施方式

下面结合说明书附图和实施例对本发明内容进行详细说明:

如图1至4所示为本发明提供的一种用于自动生成接口准确性校验脚本的系统的实施例示意图。

本发明可覆盖的接口协议包括:http/https/socket,本发明可以覆盖的测试场景包括:接口请求参数的正确性校验的测试场景。

一种用于自动生成接口准确性校验脚本的系统,其特征在于,它包括以下模块:

输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;

工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;

输出模块,其设有接口定义文件、接口模型类以及接口测试文件;

所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以json形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;

接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;

参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件(测试文件的命名格式一般为:test 场景定义文件名),接口测试文件中包含多个测试函数(测试函数中包括:测试数据、接口请求、接口响应数据的校验),每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的json形式的请求体,接着根据服务器配置文件拼接请求url,并发送接口请求;最后对比接口响应的实际值与预期值。

所述参数校验场景定义文件中存储有目标测试接口;

接口请求模型定义文件存储有目标接口的所有目标测试参数;

服务器配置文件存储有被测服务器的ip及port;

接口非法响应模型定义文件存储有非法长度、非法数据类型、非法格式、非法必填字段的响应码与响应信息。

接口定义文件生成工具的工作步骤如下:

s1.读取接口文档,获取接口名:遍历接口文档中每个接口的接口名,并将接口名保存至缓存变量interface中;

s2.读取接口请求参数标识,创建接口请求模型定义文件,文件名为:interface的值;

s3.遍历请求参数列表,将列表中每个参数及其约束条件保存至接口请求模型定义文件中,存储格式为json串,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息等;

接口请求模型定义文件模板如下:

s4.读取接口响应参数标识,创建接口非法响应模型定义文件,文件名为:interface的值 _result;

s5.遍历响应参数列表,将列表中每个参数及其约束条件保存至接口非法响应模型定义文件中,存储格式为json串,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息等。

接口非法响应模型定义文件模板如下:

接口模型类生成工具的工作步骤如下:

s1.获取接口请求模型定义文件的接口名,创建接口模型类文件,文件名为接口名:遍历接口请求模型定义文件,获取接口名并保存至缓存变量interface中,创建接口模型类文件,文件名为interface的值;

s2.在接口模型类文件中创建一个类,类名为接口名,即类名为interface的值;

s3.遍历接口请求模型定义文件的参数列表,读取每个参数的参数名及其约束条件,约束条件包括:数据类型、格式、长度、必填标识、默认值、描述信息;

s4.将参数名设置为模型类的成员变量名,参数的默认值作为成员变量的初始值;

self._参数1="参数1默认值"

self._参数2='参数2默认值'

s5.分别为每个成员变量创建一个修改变量值函数与获取变量值函数,这些函数都为模型类的成员函数。通过这些成员函数,使得使用者可以根据需要随时修改请求参数的值,以满足特定的测试场景;

@property

def参数1(self):

returnself._参数1

@参数1.setter

def参数1(self,参数1新值):

self._参数1=参数1新值

s6.为模型类创建一个根据成员变量拼接接口请求体的成员函数,该成员函数可以使得每次请求接口时不用重新拼装请求体,减少测试脚本的代码量及维护测试数据的量。

生成后的模型类文件完整模板如下:

class接口名(object):

def__init__(self):

self._参数1="参数1默认值"

self._参数2='参数2默认值'

@property

def参数1(self):

returnself._参数1

@参数1.setter

def参数1(self,参数1新值):

self._参数1=参数1新值

@property

def参数2(self):

returnself._参数2

@参数2.setter

def参数2(self,参数2新值):

self._参数2=参数2新值

参数校验脚本生成工具的工作步骤如下:

s1.读取参数校验场景定义文件,获取接口名、待变更参数列表、接口描述信息,并将其存至缓存变量;

参数校验场景定义文件,主要定义单个接口的参数校验测试场景,定义模板如下:

s2.创建接口测试文件,文件名为:test 参数校验场景定义文件名;

s3.读取参数校验场景定义文件,获取待变更参数值列表,为列表中参数设置最新值;如果列表不为空,则为列表中参数设置最新值,如果列表为空则跳过这一步;

s4.遍历读取接口请求模型定义文件,获取每个请求参数(数据类型、格式、长度、必填标识、默认值、描述信息)及其约束条件;

s5.分别为每个请求参数的每个约束条件创建一个或多个反向用例函数,以验证约束条件的有效性;同时为每个反向用例函数生成反向测试数据;

以python为例,python中修改变量值函数可以直接通过变量名实现,其它编程语言可以通过类似的方法实现。

数据类型约束条件测试数据:

当请求参数数据类型约束条件为integer类型时,那么设置一个不属于该数据类型的值,如设置参数值为float类型。参考伪代码如下:

ifparam_type=="integer":

invalid_type_param=rand_digit(int(param_length)-1,"float")

test_param="self.模型类." param "=float(" invalid_type_param ")"

长度约束条件测试数据:

当请求参数长度约束条件为最大长度为20,那么就为该请求参数设置一个长度大于20的值,修改方式通过调用修改变量值函数实现。参考伪代码如下:

invalid_length_value=randomword(int(param_length) 1)test_param="self.模型类." param "='" str(invalid_length_value) "'"

格式约束条件测试数据:

当请求参数格式约束条件为"yyyymmddhhmmsssss",那么设置一个不属于该格式的值,如设置新格式为("yyyy-mm-dd")。参考伪代码如下:

必填约束条件测试数据:

当请求参数必填约束条件为真时,那么设置将该请求参数值设置为空。参考伪代码如下:

ifparam_require==true:

invalid_require_value=""

test_param="self.模型类." param "=" invalid_require_value

s6.调用接口模型类中的获取请求体函数为请求接口拼接请求体;(将新设置的请求参数名及其值传给获取请求体函数,以使得测试函数拥有预期的接口请求体;)

s7.读取目标服务配置文件,获取目标服务器的ip及port信息,并根据ip、port、接口名、接口请求体为每个接口测试函数拼装出一个完整的接口请求,然后根据特定请求协议请求该接口;

s8.遍历读取接口非法响应模型定义文件,获取响应参数列表及其对应的约束条件,约束条件包括:数据类型、格式、长度及默认值;

s9.比对接口请求响应的实际值与接口非法响应模型定义文件中的预期值,对比内容包括响应参数的数据类型、格式、长度及默认值;如果一致则表示该接口测试函数测试通过;不一致则表示该接口测试函数测试失败;将以上生成的接口测试函数都写入接口测试文件中。

本发明实现的核心伪代码如下:

defmake_test_cases_for_length():

taps=""

taps2=taps taps

#从参数校验场景定义文件中读取接口信息,接口信息存放至缓存变量keywords_define_info中

keywords_file=open("参数校验场景定义文件",encoding="utf-8")

keywords_file_buffer=json.load(keywords_file)

keywords_define_info=keywords_file_buffer["接口名"]

#创建测试脚本文件

test_case_path="test_" "参数校验场景定义文件名" ".py"

test_case_file=open(test_case_path,"w",encoding="utf-8")

#从接口请求模型定义文件中读取接口每个参数的每个约束条件

interface_request_define_file=open("接口请求模型定义文件","r",encoding="utf-8")

interface_request_define_buffer=json.load(interface_request_define_file)

forparamininterface_request_define_buffer.keys():

#获取每个参数的长度约束条件,并存至缓存变量param_length中

param_length=interface_request_define_buffer[param]["length"]

#获取每个参数的数据类型约束条件,并存至缓存变量param_type中

param_type=interface_request_define_buffer[param]["type"]

#为请求参数的长度约束条件创建测试函数名

test_case_file.write(taps "deftest_" "接口名" "_" param "_with_invalid_length(self):\n")

#为该测试函数拼接用例场景描述

description=keywords_define_info["description"] ",字段" param "为" param_type "且长度不在范围内"

test_case_file.write(taps2 "###############" description "##############\n")

#在测试脚本中引用模型类

test_case_file.write(taps2 "import模型类\n")

test_case_file.write(taps2 "interface_model=new模型类\n")

#判断参数校验场景定义文件中是否为参数设置了新值,如果设置了则通过修改成员变量函数更改参数值

#python中,修改成员变量函数可以直接通过变量名访问,其他语言可以通过其他方式实现访问

#为参数param拼接一条长度不符合长度约束的测试数据,然后通过修改成员变量函数更改参数值

invalid_length_value=co_rand.randomword(int(param_length) 1)

test_param="self.interface_model." param "='" str(invalid_length_value) "'"

test_case_file.write(taps2 test_param)

#调用获取请求体函数获取更新请求体

test_case_file.write(taps2 "request_json_body=self.interface_model.获取请求体函数")

#读取服务器配置文件获取被测服务器的ip及port,并拼接请求url

test_case_file.write(taps2 "url=ip:port\n")

#请求接口,包括请求url,请求体

test_case_file.write(taps2 "importrequests\n")

test_case_file.write(taps2 "actual_response=requests.post(url,request_json_body)\n")

#读取接口非法响应模型定义文件,获取预期非法响应码与预期非法响应信息

except_response_file=open("接口非法响应模型定义文件","r",encoding="utf-8")

except_response_buffer=json.load(except_response_file)

#对比预期响应值与实际响应值

test_case_file.write(taps2 "self.assertequal(" except_response_buffer['invalid_length']['code'] ",actual_response['code'])\n")

test_case_file.write(taps2 "self.assertequal(" except_response_buffer['invalid_length']['message'] ",actual_response['message'])\n")。


技术特征:

1.一种用于自动生成接口准确性校验脚本的系统,其特征在于,它包括以下模块:

输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;

工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;

输出模块,其设有接口定义文件、接口模型类以及接口测试文件;

所述接口定义文件生成工具通过接口文档中定义的接口约束条件将接口的请求参数列表和响应参数列表自动转换成以json形式存储的接口请求模型定义文件和接口非法响应模型定义文件,并储存至接口定义文件;

接口模型类生成工具以接口请求模型定义文件作为输入,生成接口模型类,接口模型类为每个接口请求模型定义文件中的参数创建一个修改变量值函数与获取变量值函数,并生成获取请求体函数;

参数校验脚本生成工具以参数校验场景定义文件、服务器配置文件、接口请求模型定义文件、接口非法响应模型定义文件作为输入,生成接口测试文件,接口测试文件中包含多个测试函数,每个测试函数会根据接口请求模型定义文件中每个参数的每个约束条件分别自动生成一条反向测试数据,并通过调用接口模型类的修改变量值函数去修改请求参数的使用值,然后调用获取变量值函数更新接口的json形式的请求体,接着根据服务器配置文件拼接请求url,并发送接口请求;最后对比接口响应的实际值与预期值。

2.根据权利要求1所述的一种用于自动生成接口准确性校验脚本的系统,其特征在于:所述参数校验场景定义文件中存储有目标测试接口;

接口请求模型定义文件存储有目标接口的所有目标测试参数;

服务器配置文件存储有被测服务器的ip及port;

接口非法响应模型定义文件存储有非法长度、非法数据类型、非法格式、非法必填字段的响应码与响应信息。

3.根据权利要求2所述的一种用于自动生成接口准确性校验脚本的系统,其特征在于:

接口定义文件生成工具的工作步骤如下:

s1.读取接口文档,获取接口名;

s2.读取接口请求参数标识,创建接口请求模型定义文件;

s3.遍历请求参数列表,将参数及其约束条件保存至接口请求模型定义文件,存储格式为json串;

s4.读取接口响应参数标识,创建接口非法响应模型定义文件;

s5.遍历响应参数列表,将参数及其约束条件保存至接口非法响应模型定义文件,存储格式为json串。

4.根据权利要求3所述的一种用于自动生成接口准确性校验脚本的系统,其特征在于:

接口模型类生成工具的工作步骤如下:

s1.获取接口请求模型定义文件的接口名,创建接口模型类文件,文件名为接口名;

s2.在接口模型类文件中创建一个类,类名为接口名;

s3.遍历接口请求模型定义文件的参数列表,读取参数名及其约束条件;

s4.将参数名设置为模型类的成员变量名,参数的默认值作为成员变量的初始值;

s5.分别为每个成员变量创建一个修改变量值函数与获取变量值函数;

s6.为模型类创建一个根据成员变量拼接接口请求体的成员函数。

5.根据权利要求4所述的一种用于自动生成接口准确性校验脚本的系统,其特征在于:

参数校验脚本生成工具的工作步骤如下:

s1.读取参数校验场景定义文件,获取接口名、待变更参数列表、接口描述信息;

s2.创建接口测试文件;

s3.读取参数校验场景定义文件,获取待变更参数值列表,为列表中参数设置最新值;

s4.遍历读取接口请求模型定义文件,获取每个请求参数及其约束条件;

s5.分别为每个请求参数的每个约束条件创建一个或多个反向用例函数,同时为每个反向用例函数生成反向测试数据;

s6.调用接口模型类中的获取请求体函数为请求接口拼接请求体;

s7.读取目标服务配置文件,获取目标服务器的ip及port信息,并根据ip、port、接口名、接口请求体为每个接口测试函数拼装出一个完整的接口请求,然后根据特定请求协议请求该接口;

s8.遍历读取接口非法响应模型定义文件,获取响应参数列表及其对应的约束条件;

s9.比对接口请求响应的实际值与接口非法响应模型定义文件中的预期值,将以上生成的接口测试函数都写入接口测试文件中。

技术总结
本发明涉及一种用于自动生成接口准确性校验脚本的系统,它包括以下模块:输入模块,其设有接口文档、服务器配置文件以及参数校验场景定义文件;工具模块,其设有接口定义文件生成工具、接口模型类生成工具以及参数校验脚本生成工具;输出模块,其设有接口定义文件、接口模型类以及接口测试文件。本发明的目的在于提供一种用于自动生成接口准确性校验脚本的系统。本发明的优点在于:本测试系统可以根据接口文档及接口场景定义文件快速生成测试脚本,而减少人工编写脚本的成本;同时可以快速跟进项目,降低由于测试过程耗时过长导致项目延期的风险。

技术研发人员:黄琴;陈海量
受保护的技术使用者:福建博思软件股份有限公司
技术研发日:2020.01.08
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-26629.html

最新回复(0)