本发明属于计算机软件技术领域,涉及一种接口自动化测试框架及相应的测试方法。
背景技术:
市面上现有的接口自动化测试框架几乎都是直接用脚本代码方式编写测试用例的,采用脚本代码方式,导致一条用例的代码有很多行,存在大量冗余。也有人利用postman,soapui等第三方软件进行接口用例的管理,但第三方工具没能批量执行和生成测试报告的能力。
综上所述,现有技术没有对程序进行接口自动化测试管理,且同时存在以下缺陷:
(1).执行完用例,不能结合jenkins自动触发邮件通知;
(2).不满足公司快速迭代的业务场景;
(3).测试报告单一,而且不直观。
技术实现要素:
为解决上述问题,本发明公开了一种接口自动化测试框架及相应的测试方法,节约代码,能实现接口自动化测试用例的快速编写,且能够自动触发邮件通知。
为了达到上述目的,本发明提供如下技术方案:
一种接口自动化测试框架,包括测试用例、jenkins批量执行模块、初始化和还原模块、api请求模块,所述jenkins批量执行模块用于创建构建任务,配置定时任务,配置邮件模板,并通过执行runtest.py文件批量执行与runtest.py文件相同目录的测试用例;所述测试用例中设置有“请求连接”、“请求数据”、“预期结果”,其调用api请求模块,所述api请求模块根据“请求连接”将“请求数据”发送至被测系统接口,并接收接口的返回值,然后用预期结果和实际的返回结果进行断言,并根据断言结果标记用例;所述初始化和还原模块用于在接口初始化时先删除需要处理的数据库表数据,然后插入测试数据;并在用例执行结束时删除处理的数据库表数据。
进一步的,还包括gettoken请求模块,所述api请求模块调用gettoken请求模块,gettoken请求模块用于获取token。
进一步的,还包括模拟测试模块,用于模拟需要访问的接口,并配置桩的访问ip地址和端口号;测试用例里包含一个“接口对象”等于“测试桩”,其访问的路径指向测试桩的地址。
进一步的,所述测试用例中“请求数据”和“预期结果”定义为参数,一个用例中纳入可被代入“请求数据”和“预期结果”的若干组测试数据。
进一步的,所述runtest.py文件里具有“测试报告模板”标记,不同标记用于对应不同的测试报告模板。
本发明还提供了一种接口自动化测试方法,包括如下步骤:
步骤1,采用jenkins根据配置好的定时任务定时批量执行测试用例,执行runtest.py文件,批量执行runtest.py同目录下的所有测试用例;
其中,执行测试用例的过程包括如下子步骤:
1)接口初始化,删除需要处理的数据库表数据,然后插入测试数据;
2)执行该接口下所有测试用例,各测试用例发送封装好的api请求,api请求根据"数据"里面的参数,向被测系统发起接口请求;
3)api请求接收接口的返回值,然后用预期结果和实际的返回结果进行断言,断言成功则用例标记通过,断言失败则用例标记失败;
4)接口数据恢复和还原,删除处理的数据库表数据;
步骤2,在runtest.py目录下生成对应的测试报告;
步骤3,自动触发发送邮件。
进一步的,在步骤1之前还包括编写测试用例的步骤:
在各测试用例"数据"内填入url,消息体和期望结果。
与现有技术相比,本发明具有如下优点和有益效果:
1.不采用原生脚本方式编写测试用例,采用便于复用的测试用例架构,将发送请求功能封装后调用,只需要往用例里面传递url,消息体,预期结果等参数就可以实现接口自动化测试,编写测试用例更直观,操作快捷,节约代码。
2.采用分布式的runtest.py文件,使得每个功能模块的测试用例是相互独立的,每个测试人员在自己的功能目录下编写测试用例,互不干扰。需要整体跑测试用例时,再汇聚每个独立的runtest.py文件再进行执行。
3.支持测试用例参数化。可以批量编写测试用例,包括边界值,等价类的测试用例。
4.支持数据库的操作和数据库结果断言。
5.能够实现多种测试报告模板的切换,结合jenkins,每天定时跑测试用例和发送测试报告邮件,功能强大。
附图说明
图1为本发明基本流程图。
图2为测试用例所在目录。
图3为测试用例内容示例。
图4为测试用例中附加内容示例。
图5为参数化的测试用例内容示例。
图6为测试框架根目录。
图7为runtest.py文件中“测试报告模板”标记。
图8为测试报告格式一示例。
图9为测试报告格式二示例。
图10为发送邮件示例。
图11为data目录。
图12为测试桩.py文件。
图13为带有“测试桩”的测试用例内容示例。
具体实施方式
以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明提供的接口自动化测试框架主要包括测试用例、jenkins批量执行模块、初始化和还原模块、api请求模块、gettoken请求模块,其中,jenkins批量执行模块用于批量执行测试用例,测试用例中调用api请求模块,api请求模块与被测系统接口进行信息交互,api请求模块还调用gettoken请求模块,gettoken请求模块用于获取token。作为改进,框架中还包括模拟测试模块,该模块能够被测试用例调用。
测试用例所在目录如图2所示,被测系统一个测试接口对应一个py文件,如图2中,“文件的删除接口.py”文件即表示用于测试文件删除的相关测试用例,一份文件中放入与该接口相关的所有测试用例。用例内容如图3所示,“test_05_邀请码必填项校验”为用例标题,“数据”里面存放接口的信息,包括url,消息体和期望结果,每条用例都调用“api.发送请求”方法,该方法引用api请求模块,即封装好的api.py文件,把用例里面的url,消息体,预期结果传递给这个文件。断言支持json的断言,字符串的断言,数据库的断言。一个断言不够,还可以使用多个断言,比如“预期结果1”,“预期结果2”等等。
除了关键字“请求连接”,“请求数据”,“预期结果”,用例中还可包含"请求方法"、“请求头”、“接口对象”。
“请求方法”:默认不写是使用get方法;如果是post的raw方式,则使用"请求方法":"post";如果是post的params方式,则使用"请求方法":"post_query"。
“请求头”,不写的话默认值是登录用户的消息头;如果需要调用其他用户的接口,则token和消息头都会改变,则这时可以使用“请求头”:"xxx"(在api.py里面定义)。
“接口对象”,不写的话默认是登录用户的url的域名,如果需要调用其他域名的接口,则可以使用"接口对象":"xxx"(在api.py里面定义)。
此外,在用例文件中还可以加入一些方法,并设定它们在所有用例开始前后或是每条用例开始前后执行一次。具体如图4所示,setupclass表示所有用例开始前执行一次,teardownclass表示所有用例结束后执行一次,setup表示每条用例开始前执行一次,teardown表示每条用例结束后执行一次。
作为改进,本发明还使用data里面的parameterized.py文件实现用例参数化,可以方便的进行边界值,等价类的用例编写和批量编写测试用例。如图5所示,用例中的名称和预期结果均为参数,在用例上方写有四组可代入这些参数的数据,如“[“”,“参数校验失败”]”即为一组数据,其表示名称=“”,而预期结果为“参数校验失败”。这样通过将请求数据和预期结果定义为参数,即可在一个用例中纳入多组测试数据,无需重复排列用例相关代码,节省资源。此外,基于parameterized.py文件还可以方便地对参数进行边界值(参数数值范围)和等价类(参数类型)验证。
api请求模块会根据url将消息体发送至被测系统接口,并接收接口的返回值,然后用预期结果和实际的返回结果进行断言,断言成功则用例标记通过,断言失败则用例标记失败。
jenkins批量执行模块里面创建构建任务,配置定时任务,配置邮件模板,然后执行runtest.py文件。runtest.py文件执行时获取与runtest所在目录下所有测试用例,批量执行这些py文件,并在相应目录下生成测试报告。测试框架根目录如图6所示,包括用于存放测试工具的data目录、批量执行测试用例后生成的测试报告目录、编写和存放测试用例的目录。从图中可以看出,本发明目录结构和文件名,以及编写测试用例,多处使用了中文格式,可读性很强。如图6中,在框架的根目录下,也有一个runtest.py文件,执行这个文件,就是批量执行测试用例目录下的所有测试用例,并在根目录下会生成对应的测试报告。在测试用例里面,每一个目录下面都有一个runtest.py文件,执行这个文件,就是批量执行该目录下的所有测试用例,并在当前目录下会生成对应的测试报告。与现有技术不同,本发明提供了多样化的测试报告选项,在runtest.py文件里具有“测试报告模板”标记,如图7所示,标记包括1和2两个数值,通过设置标记值,可以在runtest.py文件里面的“测试报告模板”等于1或等于2里面进行切换,配置“测试报告模板”等于1,则生成如图8所示的测试报告:配置“测试报告模板”等于2,则生成如图9所示的测试报告。执行完runtest.py文件之后,jenkins就会自动触发发送邮件。发送的邮件如图10所示。
图11为data目录下文件示意图,初始化和还原模块即为其中的mysql.py文件,当接口初始化时初始化和还原模块先删除需要处理的数据库表数据,然后插入测试数据。用例执行结束时初始化和还原模块删除处理的数据库表数据,从而令被测系统保持原样。
模拟测试模块为位于data目录下的测试桩.py文件,其集成了桩的服务端,在这里模拟需要访问的接口,还有配置桩的访问ip地址和端口号,如图12所示。桩的调用端位于测试用例里,只需要加一个“接口对象”等于“测试桩”,即访问的路径指向的就是测试桩的地址,如图13所示。基于模拟模块可以提前编写测试用例并进行模拟测试,不用等到被测系统开发完才编写。
基于上述框架,本发明还提供了一种接口自动化测试方法,其流程如图1所示,包括如下步骤:
编写测试用例;在各测试用例"数据"内填入url,消息体和期望结果,优选采用参数化的用例编写方式;
步骤1,采用jenkins根据配置好的定时任务定时批量执行测试用例,执行runtest.py文件,批量执行runtest.py同目录下的所有测试用例;
其中,执行测试用例的过程包括如下子步骤:
1)接口初始化,删除需要处理的数据库表数据,然后插入测试数据;
2)执行该接口下所有测试用例,各测试用例发送封装好的api请求,根据"数据"里面的参数,向被测系统发起接口请求;
3)api请求接收接口的返回值,然后用预期结果和实际的返回结果进行断言,断言成功则用例标记通过,断言失败则用例标记失败;
4)接口数据恢复和还原,删除处理的数据库表数据;
步骤2,在runtest.py目录下生成对应的测试报告;
步骤3,自动触发发送邮件。
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
1.一种接口自动化测试框架,其特征在于:包括测试用例、jenkins批量执行模块、初始化和还原模块、api请求模块,所述jenkins批量执行模块用于创建构建任务,配置定时任务,配置邮件模板,并通过执行runtest.py文件批量执行与runtest.py文件相同目录的测试用例;所述测试用例中设置有“请求连接”、“请求数据”、“预期结果”,其调用api请求模块,所述api请求模块根据“请求连接”将“请求数据”发送至被测系统接口,并接收接口的返回值,然后用预期结果和实际的返回结果进行断言,并根据断言结果标记用例;所述初始化和还原模块用于在接口初始化时先删除需要处理的数据库表数据,然后插入测试数据;并在用例执行结束时删除处理的数据库表数据。
2.根据权利要求1所述的接口自动化测试框架,其特征在于:还包括gettoken请求模块,所述api请求模块调用gettoken请求模块,gettoken请求模块用于获取token。
3.根据权利要求1所述的接口自动化测试框架,其特征在于:还包括模拟测试模块,用于模拟需要访问的接口,并配置桩的访问ip地址和端口号;测试用例里包含一个“接口对象”等于“测试桩”,其访问的路径指向测试桩的地址。
4.根据权利要求1所述的接口自动化测试框架,其特征在于:所述测试用例中“请求数据”和“预期结果”定义为参数,一个用例中纳入可被代入“请求数据”和“预期结果”的若干组测试数据。
5.根据权利要求1所述的接口自动化测试框架,其特征在于:所述runtest.py文件里具有“测试报告模板”标记,不同标记用于对应不同的测试报告模板。
6.一种接口自动化测试方法,其特征在于,包括如下步骤:
步骤1,采用jenkins根据配置好的定时任务定时批量执行测试用例,执行runtest.py文件,批量执行runtest.py同目录下的所有测试用例;
其中,执行测试用例的过程包括如下子步骤:
1)接口初始化,删除需要处理的数据库表数据,然后插入测试数据;
2)执行该接口下所有测试用例,各测试用例发送封装好的api请求,api请求根据"数据"里面的参数,向被测系统发起接口请求;
3)api请求接收接口的返回值,然后用预期结果和实际的返回结果进行断言,断言成功则用例标记通过,断言失败则用例标记失败;
4)接口数据恢复和还原,删除处理的数据库表数据;
步骤2,在runtest.py目录下生成对应的测试报告;
步骤3,自动触发发送邮件。
7.根据权利要求6所述的接口自动化测试方法,其特征在于,在步骤1之前还包括编写测试用例的步骤:
在各测试用例"数据"内填入url,消息体和期望结果。
技术总结