接口测试
接口测试时集成测试实现的一种方式,其实在集成测试中分为消息接口和代码接口测试两类。
接口是指系统模块与模块或系统与系统间进行交互,一般现在我们用的多的是基于HTTP协议为基础的接口(包括WebService协议或者Tuxedo协议),还有就是RPC的接口。但是不管哪种接口,其本质就是发送一个Request报文给服务器,然后服务器响应返回一个Response报文。
我们对于Response的报文进行分析,判断是否和我们发送给服务器的Request对应的返回相同,从而验证业务是否正确实现,这即是接口测试。
1)核心:保证系统接口的功能正常
2)方式:持续集成
3)目的:提高测试效率,保证数据的准确性
4)文档:接口测试对接口定义文档要求很高,所有的接口数据类型及业务分支导致的报文返回结构是需要事先定义好的,所以要形成文档的习惯,以方便查阅,尽量减少团队与团队间的沟通成本。
同样我们在接口测试中,也需要根据文档,整理出我们的接口测试数据及接口测试案例,有效的生成相关测试报告,方便其它人去审核、分析接口测试的成果。
二.接口测试流程
测试人员选择
1)熟悉测试方法,能够根据需求制定出测试计划及测试用例
2)具备一定的编程能力
3)了解数据库知识
4)有较强的学习能力,能够分析业务逻辑中可能存在的问题
职责定义
1)能够搭建测试框架
2)对系统要深入了解
3)能够对系统可能存在的问题进行预判
4)严格把控产品质量
测试框架的选择及技术选型
接口测试在某种程度上来说,还是属于灰盒测试,测试框架的选择与系统本身的语言并无太大的关系。
如果测试框架与被测试系统的语言一致,有些基础文件可能还可以复用一下;如果不一致,则要重新的构建数据类型,重新的分析业务逻辑,这样对测试系统本身也是有极大的好处的。
测试框架的选择,有一个最重要的点,就是要让大多数的测试人员都能接受的语言,且有大量的资料可以查阅的语言,这样才能快速的搭建框架及后期快速的编写接口测试用例,比如接口测试中JAVA、Python都用的比较多。
接口测试的具体实现及环境部署
接口测试的脚本的实现是建立在测试用例的基础之上的,所以,完善的测试用例是必需的,其中测试用例中,请求接口的参数,请求方式,请求的头文件,等这些因素都是必需的,对于响应的response, 返回的状态码,返回的数据的检查点,都是必须要事先说明好的,用例完善后,我们的脚本在写起来就会效率很高,在脚本中,我们需要保证的一点,就是稳定,因为请求的响应时间也是我们要考虑的方面。
接口测试的脚本的实现是建立在测试用例的基础之上的,所以,完善的测试用例是必需的,其中测试用例中,请求接口的参数,请求方式,请求的头文件,等这些因素都是必需的,对于响应的response, 返回的状态码,返回的数据的检查点,都是必须要事先说明好的,用例完善后,我们的脚本在写起来就会效率很高,在脚本中,我们需要保证的一点,就是稳定,因为请求的响应时间也是我们要考虑的方面。
接口测试的脚本必须随着接口本身的改变而改变,为了达到这种效果,建立良好的沟通机制是很有必要的。(邮件沟通或查看接口提交LOG都是可行的)
环境部署是测试人员的基本素质,为了使接口测试的结果的稳定性及正确性,我们的环境必须与生产环境保持一致,且与生产环境保持同步更新。
三、接口测试工具
常用工具介绍
发包工具
典型商业工具:loadrunner、soapui
典型开源工具: jmeter、jsoup、httpclient、python中的urllib2,urllib库
抓包工具
HTTP抓包:HTTP Analyzer 、HTTPwatch、Fiddler、Firebug
通用数据抓包:MiniSniffer、Sniffer、Omnipeek
进程级抓包:WSExplorer
商业工具特点:良好的图形操作界面,良好的技术支持,良好的脚本驱动模式,良好的结果报告,对测试人员的代码能力要求稍低等等,但其缺点也很明显,贵,工具不开源,无法了解问题的本质。
开源工具的特点:大量的资料可以查阅(因为用的人多,社区有大量的人一起贡献),有源码可以查阅,可以根据自已的业务特点进行定制化。缺点就是对测试人员的代码能力有一定的要求,框架需要从零开始搭建。
工具选择
1)确定是商业的还是开源的
2)调查测试人员的代码熟练程度
3)调查系统的接口类型
4) 开发和维护的成本
HTTP协议报文捕获
1.Chrome F12
2.Firefox Firebug
Firefox浏览器中我们都会安装Firebug这个插件,该插件可以帮助我们方便的对页面元素进行查看、调试,其中也包括了协议捕获。
在Firefox中安装了Firebug插件后,使用F12快捷键就可以启动该插件。
3.IE HTTPWatch
HTTPWatch是一个商业工具(也提供了免费版本),它可以方便的集成在IE和Firefox上,帮助我们对HTTP协议进行捕获。
安装HTTPWatch后,在IE菜单栏的工具下会找到该工具的启动项。
4.Fiddler
Fiddler是一个代理拦截工具,它和上面的几个工具都不太相同,它不依赖于任何浏览器,或者可以这样说它可以捕获任意通过它的HTTP数据包。
在Fiddler Option的设置里面提供了针对代理的端口配置,Fiddler将会监听8888端口,所有通过这个端口访问的HTTP协议均会被捕获,默认情况一般都不需要配置。
接着我们打开IE(当然也可以启动任意软件只要可以配置代理服务器即可,指向端口8888),查看IE的代理设置可以看到,IE的默认代理已经被配置指向了Fiddler。
接着我们来看一下这个请求的内容,点击Inspectors标签。
在上面可以看到完整的Request请求部分,而Response应答部分由于编码格式问题(一般是GZIP动态压缩),所以不会自动显示,我们需要在Transformer里面做一些配置。
这里我们设置返回的应答没有经过压缩No Compression。接着切换标签到TextView就可以看到完整的Response正文了。
上面介绍了4种常见的HTTP协议捕获方式,至于使用Wireshark工具来做HTTP捕获我觉得可能稍微有些大材小用了,所以这里就不具体介绍了。
HTTP协议报文发送
在了解了HTTP协议报文后,接着要做的就是如何自己构建HTTP协议包并且发送给服务器再获得对应的响应内容,这也是接口测试的雏形。
1.Poster
Poster是一个Firefox插件,可以通过Firefox插件市场更新下载。
通过工具菜单或者快捷键都可以启动Poster。
启动后会弹出一个新的窗体,Poster界面中包含了所需要发送HTTP请求的地址、请求类型、超时策略、权限验证、Header请求头及Parameter参数配置。
2.PostMan
PostMan是一款在Chrome上运行的请求发送插件,由于其需要在谷歌市场上安装所以相对来说比较麻烦,具体安装方式FQ或自行查找开发模式解决。
安装完成后左上角会有个应用按钮,点击后就能看到当前在Chrome中安装的应用,其中就有PostMan。
3.Fiddler
在Fiddler中也提供了对请求定义发送的功能,点击Composer既可以打开编辑界面,在这里按照规范填写对应的请求报文体系点击Execute即可。
WebService
MockServer
五、接口测试工具SoapUI
调用We server、调用http、代理设置、扩展请求
六、接口测试工具LoadRunner
调用We server、调用http、代理设置
七、接口测试框架Jsoup
Jsoup、TestNG