基于Python的接口自动化测试方法与流程

文档序号:16608457发布日期:2019-01-14 21:21阅读:186来源:国知局
基于Python的接口自动化测试方法与流程

本发明涉及自动化测试技术领域,特别涉及基于python的接口自动化测试方法。



背景技术:

接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。目前的接口大多数都是使用的http协议,其测试的基本原理是模拟客户端向服务器发送数据,得到相应的响应数据,从而判断接口是否可以正常的进行数据交换。

手动测试接口也是一种测试的方式,手动测试接口是针对每条测试用例,每次都需要修改接口参数,调用接口后还需要挨个去比对该条用例的期望值,判断接口返回值是否与期望值一致,一致则通过,不一致还需要找出原因,反馈给开发人员,方便其做出对应的修改,这本身就是一项繁杂的工作,尤其当测试用例达到一定数量级,工作量更是成倍的增长,且测试效率低下,也不能完全保证质量。如何在保证测试质量的前提下提高测试效率,减少测试人员工作量,解放劳动力成了接口测试亟需解决的问题。

现在市面上做接口自动化测试的工具很多,比如postman,jmeter,robotframework等,各种不同的测试工具拥有不同的特色。jmeter这样的专注性能测试的工具,进行接口测试,有点大材小用而且无法生成测试报告;postman通过javascript脚本控制,需要对前端页面的细节有一定的了解和掌握;robotframework作为开源工具,底层用python开发,拥有强大的库函数以支持各种测试场景,相较于其他的接口测试工具来说,robotframework更加灵活,可扩展性也更强,但是同时对编程语言,尤其是python语言,以及代码能力也有一定的要求。

虽然接口测试工具选择丰富,且基本可以满足简单的接口测试要求,但没有一个工具可以完全吻合的去适用于每一个项目,因为不同的项目有不同的数据处理和业务逻辑处理的方式,而且利用工具需要熟悉操作流程,完成各种必要的配置,不够灵活。所以需要自己开发一种更灵活的接口测试框架来适应不同项目环境。



技术实现要素:

本发明的目的是克服上述背景技术中不足,提供基于python的接口自动化测试方法,遵循测试框架的基本原则,将业务逻辑与测试脚本分离,测试脚本与测试数据分离,可以随时根据需求进行变更,可较大减低对测试人员编码水平的要求。

为了达到上述的技术效果,本发明采取以下技术方案:

基于python的接口自动化测试方法,包括以下步骤:

a.采用python编写测试脚本,在业务层书写测试用例,将测试用例采用csv文件格式存储;

b.读取测试用例和接口信息,将读取到的信息存为键值对的字典格式;

c.根据被测试接口的请求方法调用不同的请求函数,调用接口并返回响应报文;

d.解析json响应报文,设置断言,提取有用的返回字段;

e.输出csv文件格式的测试报告;

本发明的基于python的接口自动化测试方法从csv文件中读取测试用例,从excel文件中读取接口信息,将读取的接口输入数据拼接到接口参数中,调用接口,解析接口返回的json数据,提取有用字段,与测试用例的期望返回值做比较,从而实现接口自动化测试;

在本发明的基于python的接口自动化测试方法中,舍弃robotframework测试工具,直接采用python编写测试脚本,使得代码量大大减少,同时采用csv文件存取测试用例的方式有效提高了程序的读取速度,从根本上解决了测试效率低下的问题,且最终以自定义方式输出一份简洁明了的测试报告,使得测试结果及缺陷定位一目了然,减轻了测试人员的工作负担,因此,通过本发明的方法可以有效减少用例的执行时间,同时以csv文件格式输出测试报告,可以有效提高测试效率和开发人员定位缺陷的效率。

进一步地,所述步骤a具体为:

a1.定义测试用例编写格式,按列编写,定义接口信息的格式;

a2.采用python编写测试脚本,在业务层书写测试用例;

a3.采用csv文件格式存储测试用例,以excel文件格式存储接口信息。

进一步地,所述测试用例编写格式为:第一列是用例编号,第二列为用例内容,第三列为用例期望的返回值字段,第四列为所述返回值字段对应的字段值。

进一步地,所述接口信息至少包括测试接口服务器的ip、域名、端口信息、请求类型。

进一步地,所述步骤b具体为:

b1.封装一个操作excel文件的函数用于读取测试接口信息;

b2.装一个操作csv文件的函数用于读取测试用例信息;

b3.调用自定义的操作csv文件格式的函数和excel文件格式的函数,分别读取测试用例和测试接口;

b4.将读取的接口信息和测试用例信息以键值对的方式存放在字典中,记录字典长度,进行循环读取。

进一步地,所述步骤c具体包括:

c1.判断读取到的接口服务器的信息;

c2.将读取的测试数据填入接口参数字典中,组成完整的接口参数信息;

c3.根据被测试接口的请求方法调用对应的请求函数并返回对应的响应报文。

进一步地,所述步骤d具体采用将json报文以键值对的形式保存在字典中并根据键名去匹配期望的返回值字段名。

进一步地,所述测试报告中至少包含测试用时,测试用例总条数,测试结果,失败的测试用例条数,接口返回报文和失败原因分析。

本发明与现有技术相比,具有以下的有益效果:

本发明的基于python的接口自动化测试方法,主要根据接口返回的json数据,将嵌套的json分层,每一层有用的返回值信息存入一个列表,针对不同层级的返回值,分别与所有的期望值做比较,此过程中避免了单独针对每一个用例去执行一次断言的繁杂,但同时也覆盖了需要进行断言的每一种情况,而且采用csv文件存储测试数据,可以有效提高读取速度,这种方式不仅极大地减少了代码量,而且极大地提高了测试效率,非常简洁高效,通过本发明的方法可以有效减少用例的执行时间,同时以csv文件格式输出测试报告,可以有效提高测试效率和开发人员定位缺陷的效率。

附图说明

图1是使用自动化测试框架工具robotframework的测试流程图。

图2是本发明的基于python的接口自动化测试方法的测试流程图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

如图1所示是目前比较主流的自动化测试工具robotframework进行接口测试的测试流程图,该工具的特点是使用简单,有非常丰富的库,可以像编程一样写测试用例,还支持开发系统关键字,它的架构是一个通用的验收测试和验收测试驱动开发的自动化测试框架(atdd),具有易于使用的表格来组织测试过程和测试数据。

其自动化测试流程为:首先将测试用例、接口地址和期望返回值以常量形式保存起来,因为这三种数据在整个测试过程中必须是保持不变的。然后利用其支持开发系统关键字的特性,自定义一个接口关键字,该关键字也即是一个方法或者函数,包括构建接口参数,调用接口,获取接口返回值,将接口返回值转化为json字符串四个步骤。

在构建参数的时候,由于测试用例也是参数的一部分,所以这里需要把测试用例定义为一个变量。自定义关键字的好处就是精简代码,提高复用率,如果接口有变动,只需要修改接口常量即可。

接下来就是写测试用例,将测试用例作为输入数据,调用接口关键字,从接口返回值中提取出需要比较的字段,与事先定义好的期望返回值对比,如果一致则通过,否则用例失败。

用例执行结束,robotframework会生成一个html格式的报告,点击报告链接,可以查看用例每一步运行的结果,以便定位失败原因。

经过实践发现,采用robotframework实现接口自动化测试代码量太大,一旦哪个测试用例有变化或者期望值有变化都要挨个测试用例去修改,工作量依旧巨大,维护困难;且用例运行时间太长,虽然相比手工测试效率有明显提高,但仍然达不到理想效果。

另外每个测试用例都有一个对应的html测试报告,但是如果失败的测试用例数量较多,查看测试报告也是一个较大的工作量,因为从现有的测试报告里面只能看出代码走到哪一步出错,但是要确切的找到错误的根本原因即到底是哪一个字段跟期望值不匹配,还需要查看这条用例返回的json报文,从而进一步加大了工作量。

由上可知,目前的接口测试方法主要存在以下问题:脚本量太大,维护困难;脚本运行时间长,效率低;测试报告信息量太大,bug定位困难。

针对上述技术问题,本发明公开了一种基于python的接口自动化测试方法,如图2所示,具体包括以下步骤:

a.采用python编写测试脚本,在业务层书写测试用例,将测试用例采用csv文件格式存储;

a1.定义测试用例编写格式,按列编写,定义接口信息的格式;

a2.采用python编写测试脚本,在业务层书写测试用例;

a3.采用csv文件格式存储测试用例,以excel文件格式存储接口信息。

由于本发明采用将接口地址及参数保存在excel文件和将测试用例保存在csv文件中的方式,所以必须事先定义好这两种数据文件的具体格式,该模块在整个框架中相当于一个数据源。可通过配置文件interface.xls,对要测试接口服务器的ip、域名、端口信息、请求类型(get、post)和接口参数进行灵活配置,也就是接口模板;定义的测试用例模板可通过testcase.csv配置文件灵活配置需要运行的用例模式,需要运行的用例id列表,用例期望的返回值字段名及其字段值。

b.读取测试用例和接口信息,将读取到的信息存为键值对的字典格式;

b1.封装一个操作excel文件的函数用于读取测试接口信息;

b2.装一个操作csv文件的函数用于读取测试用例信息;

b3.调用自定义的操作csv文件格式的函数和excel文件格式的函数,分别读取测试用例和测试接口;

b4.将读取的接口信息和测试用例信息以键值对的方式存放在字典中,记录字典长度,进行循环读取。

在具体实施中可封装一个操作excel文件的函数excel.py,用于读取测试接口信息,封装一个操作csv文件的函数csv.py,用于读取测试用例信息,这两个函数可以实现对任何excel文件和csv文件的读写操作,包括读取和写入某行、某列、某个单元格的值。将读取的接口信息和测试用例信息以键值对的方式存放在字典中,记录字典长度,进行循环读取。

c.根据被测试接口的请求方法调用不同的请求函数,调用接口并返回响应报文;

c1.判断读取到的接口服务器的信息;

c2.将读取的测试数据填入接口参数字典中,组成完整的接口参数信息;

c3根据被测试接口的请求方法调用对应的请求函数并返回对应的响应报文。

具体为对常见的http的post,get请求方法进行封装,也支持自由扩展以便增加其它方法。该模块首先要判断读取到的接口服务器的信息,针对不同的请求类型判断需要使用哪一种请求方法,由于测试数据作为接口的输入数据,也是接口参数的一部分,所以还需要将读取的测试数据填入接口参数字典中,组成完整的接口参数信息,然后调用对应的请求方法,返回对应的响应报文。

d.解析json响应报文,设置断言,提取有用的返回字段,具体采用将json报文以键值对的形式保存在字典中并根据键名去匹配期望的返回值字段名;

本发明的方法支持json格式,json(javascriptobjectnotation,js对象标记)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,它具有简洁和清晰的层次结构,易于人阅读和编写,同时也易于机器解析和生成,能有效提升网络传输效率,是一种理想的数据交换语言。

而返回的响应报文中难免会有含嵌套对象格式的json数据,如{“ordertotalprice”:95,”goods”:[{“shopid”:987654354,”goodsid”:108,”goodsnumber”:1}]},此时可以将json报文以键值对的形式保存在字典中,根据键名去匹配期望的返回值字段名,如果匹配,这里就可能存下以下五种情况:

第一种:期望返回值为空,实际返回值也为空,则测试通过;

第二种:期望返回值为空,实际返回值非空,说明接口返回了不应该返回的字段值,测试不通过;

第三种:期望返回值非空,实际返回值为空,说明接口没有返回应该返回的字段值,测试不通过;

第四种:期望返回值非空,实际返回值也非空且等于期望值,测试通过;

第五种:期望返回值非空,实际返回值也非空但不等于期望值,说明接口对该条用例不能正确解析,导致响应错误,测试不通过。

e.输出csv文件格式的测试报告。

将上一步解析出的接口报文同样以csv文件格式输出到测试报告中,报告包括测试用时,测试用例总条数,测试结果,失败的测试用例条数,接口返回报文和失败原因分析,至此,整个流程完成。

其设计原理如下:

首先,本发明中舍弃robotframework测试工具,直接采用python编写测试脚本,代码量大大减少。

使用robotframework之所以代码量巨大,主要是因为脚本编写要遵循其框架使用规则,每条用例对应一个testcase,当测试用例数达到一定数量级,代码量也成倍增长;且测试用例和接口期望值需要从excel文件中手动复制添加到常量文件中(此处以instant代表常量文件),前期的准备工作耗时很长。虽然robotframework框架底层也是由python支持的,直接用python编写脚本,代码逻辑并无差别,但是从代码量上要精简得多,因为直接使用python不必考虑框架一系列的条条框框和使用规则,只需关注代码逻辑和实现方式,且后期维护简单。

其次,经过分析比较得出robotframework测试脚本运行时间太长的原因不是因为代码量大,其根本原因是程序每次读取测试用例和接口参数及返回参数期望值耗时过长,导致整个测试效率低下。

在本发明的的基于python的接口自动化测试方法中,采用csv文件格式存储测试用例,以excel文件格式存储接口信息;首先定义好测试用例编写格式,按列编写,第一列是用例编号,第二列为用例内容,后面依次是用例期望的返回值字段及其对应的字段值;其次要定义好接口信息的格式,包括要测试接口服务器的ip、域名、端口信息、请求类型(get、post)等,程序调用自定义的操作csv文件格式和excel文件格式的函数,读取测试用例和测试接口,以键值对方式存放于字典中,记录字典长度并循环读取;且采用csv文件存取测试用例的方式大大提高了程序的读取速度,从而从根本上解决了测试效率低下的问题。

最后,对于测试报告的问题,虽然robotframework做接口测试会自动生成html形式的测试报告,而在该测试报告上,针对每一条用例,我们能看到测试脚本每一步的执行结果,更像是程序设置的断点。但是测试用例上千条,因此会衍生出上千份的测试报告,这将极大的加重测试人员的工作量,为了减少定位缺陷的时间,本发明的基于python的接口自动化测试方法中采用自定义测试报告格式,一遍测试过程完成后,程序自动输出一份完整详细的测试报告,该报告包括测试用时,测试用例总条数,测试结果,失败的测试用例条数,接口返回报文和失败原因分析,这是通过解析接口返回报文获得的结果,且报告也是以csv文件格式输出的,本发明的方法中以自定义方式输出一份测试报告简洁明了,测试结果及缺陷定位一目了然,减轻了测试人员的工作负担,也提高了测试人员同开发人员沟通的效率。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1