接口理念
不要过度迷信工具,首先还是解决原理问题
接口测试就是用两个工具调用一下然后结果就出来了
接口是指系统模块与模块或系统与系统间进行交互,一般我们用的多的是HTTP协议的接口,WebService协议的接口,还有RPC(Remote Procedure Call Protocol)---远程过程调用协议的接口
不管哪种接口,其本质就是发送一个request,然后服务器响应后返回一个response,然后我们队response进行分析,这即是接口测试
1.接口测试做好要覆盖业务
2.接口测试做好要覆盖代码
MC/DC
为什么要做接口测试
随着系统越来越多,以及复杂性越来越高,为了保证系统的独立性,也为了使业务更加的独立,系统间的交互,越来越多的使用接口这时候,为了保证数据的传输的准确性,接口测试也应运而生了,数据的错误,有可能引起系统的重大bug,所以,为了持续性的检查接口数据的准确性,接口测试的重要性也就不言而喻了
接口测试的目的及方法
核心:保证系统的稳定
方式:持续集成
目的:提高测试效率,保证数据的准确性
文档:接口的数据类型是需要事先定义好的,所以,要形成文档的习惯,以方便查阅,尽量减少团队与团队间的沟通成本,同理,我们在接口测试中,也需要根据文档,整理出我们的接口测试数据,整理出我们的断言字段,也方便其他人去审核我们接口测试的成果
常见接口测试工具
SoapUI:测试webservice接口 (如果有乱码修改配置文件:Soapui-Pro-4.6.4.vmoptions配置文件添加-Dfile.encoding=UTF8)
roadrunner:测试HTTP接口
自动化大概是10倍效率提升
接口和UI自动化100倍
UI的稳定性很差
1.http调用需要的是具体的请求地址
2.webservice调用需要的是WSDL(就是关于webservice的方法说明)
化UI操作成请求操作
通过将一系列的UI操作转化为数据包的交互,可以大大的简化测试的过程,并且快速验证大量数据
常见接口测试工具及原理
常见接口测试工具
典型商业工具:loadrunner,soapui
典型开源工具:jmeter,jsoup,httpclient python中的urllib2,urllib库
扩展插件:Postman,Poster
接口测试与抓包:
协议原理
协议捕获:(firebug,fiddler,HTTPwatch)
协议变更:(Poster,Postman,HTTPRequest,Temper Data)
http抓包:HTTP Analyzer
通用数据抓包:MiniSniffer
进程级抓包:WSExplorer
接口测试工具的选择
1.被测对象(基于什么协议)
2.对什么工具比较熟
3.这个工具是否能解决我要解决的问题
4.成本
实现原理
模拟客户端对服务器进行多连接
伪造报文欺骗服务器认证机制
了解服务器认证机制
了解客户<->服务器之间的交流报文结构
合理的技术构造报文结构
服务器去判断是否是合理的报文结构
1.cookie&session
2.报文体
RFC2616
HTTP协议 超文本传输协议
1.request
GET/WebTours/HTTP/1.1 (意思是从服务器上面get一个叫WebTours的内容然后连接方式是http1.1)
get 是从服务器上拿一个东西下来, post 发送一个东西给服务器
form表单一般是get请求但是也可以做成post请求
第二个是 Host: 127.0.0.1:1080
当我在浏览器上面打http://127.0.0.1:1080/WebTours/ 浏览器会自动帮我解析出来两块内容:一块是GET/WebTours/HTTP/1.1 另一块是 Host: 127.0.0.1:1080
服务器会返回body和header
header是一些状态说明,在浏览器中看到的所有内容都是body
HTTP2.0可以压缩header
HTTP1.0只能压缩body
接口测试和设备终端无关
服务器识别客户端的方式几乎都用user-agent
keepalive
长连接 占用你的连接池
网页的时候往往都是多请求所以一般都是长连接
接口基本都是短连接
webservice都是短连接
200ok表示服务器理解了你的意思,并且给了你返回,不代表给你返回的内容是你想要的,只是个物理状态,并不是一个逻辑状态
404 500 503
2xx都是服务器正常返回
4xx都是客户端问题(在服务器上不存在,或者非法的会返回40几41几等)
5xx都是服务器问题
5xx两种情况返回:
1)你发过去的数据非法,导致服务器上的某些逻辑错误
2)服务器太忙了,挂了
缓存
RFC2616中的一些和接口基础比较相关的内容
f12中
1)主要看左边发出去的主要看第一行和host主题
2)返回主要看body,body的解码器在content中
AJAX体系
http里面的data数组是不加密的
两种加密:
https是加密的
表单js处理控件处理加密
GET标准
?后面的是参数,参数和参数之间用&分割,=号前面是参数名,=号后面是参数值
Request URL: https://www.baidu.com/s?wd=123&rsv_spt=1&rsv_iqid=0xd798e78f0003f7ab&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=3&rsv_sug7=101&rsv_sug2=0&inputT=961&rsv_sug4=1784