接口测试基础
测试对于接口测试的理解总是停留在工具使用层面,很多情况下,测试人员会花很大的代价去学习一个工具,而测试工具本身的局限性,又导致测试人员陷入想直接用现成的测试框架却又无法进行扩展的僵局,最后由于项目的特殊性等客观因素,测试人员只能放弃工具,脱离了工具的可视化界面友好操作,发现直接连接口是什么都不明白,更不要说完成接口自动化测试
一:网络传输知识:
超文本传输协议( HTTP )是一种分布式,合作式超媒体信息系统,它是一种通用的,无状态的协议,除了应用于超文本传输外,它也可以应用于诸如名称服务器和分布对象管理之类的系统,这可以通过扩展它的请求方法,错误代码和报头来实现,HTTP的一个特点是数据表现形式是可输入的和可协商性的,这就允许系统能被建立而独立于数据传输
1. 协议
在接口测试中,从客户端发送request(请求)至服务器反馈response(响应),网络传输的数据就是接口测试中最主要的部分,而数据传输的本质就是基于网络传输协议,网络传输很显而易见,是指数据在网络上的传输过程,
2. Cache(缓存)
把用户的等待时间称为响应时间,也就是开发人员所说的性能,会有多方面的指标帮助测试及开发人员判定性能的好坏,其中最直观的就是看网页及应用的打开速度,其中提高反应速度的一个方式就是使用缓存,一个优秀的缓存策略可以为网络传输带来以下两方面好处
1) 减少延迟:因为所发出的网页请求是指向更接近客户端的缓存,而不再是源服务器端,因此请求所花费时间更短,这让网站看上去反应跟快,调高了用户体验
2) 降低网络负荷:因为缓存文件可以重复使用,节省不少的带宽,降低了网络负荷,同时站在用户的角度,这也省了不少流量,
使用缓存Cache的站点会监听客户端向服务端发出的请求,并根据相应的缓存设置保存服务器端反馈的数据,比如URL,HTML页面,图片等文件,如果用户再次使用相同URL发送请求,请求不会直接发向服务器,而是通过缓存策略先行判断是否能够使用之前已经保存下来的反馈文件,从而降低服务器的负载及提高数据的响应时间,
缓存根据其类型可以分为:
1. 浏览器缓存
浏览器(IE,Chrome,Firefox等)都有缓存设置选项,它可以将你浏览过的网页全部保存在你本地计算机的硬盘中,最常用的场景就是当你点击浏览器的'后退'或者以前浏览过的页面的链接时就能直接使用这种缓存,同样的,当你不希望使用浏览器缓存时,可以通过删除浏览历史记录的操作对其进行删除,删除后,第一次访问相同的网站,浏览器会将请求直接发往浏览器获取返回数据
2.代理缓存
浏览器缓存由于客户端内存的限制不能存放过多的数据,否者会降低本机的性能,在实际应用中,开发者需要存储大规模的数据及面向更广泛的用户群时,可以使用代理缓存,它使用相同的原理,但可以用相同的方法为几百甚至几千的使用者服务,
因为代理缓存及不属于客户端,也不属于服务器端,而是利用网络路由器请求信息,有以下两种最常用的场景
1)用户手动设置浏览器的代理
2)使用网页代理,网页代理将你的URL请求通过潜在的网络定向的代理,所有用户甚至无需手动配置它们
代理缓存时共享缓存的一种,不是只有一个人正在使用它们,而是同时存在大量的用户使用
3.网关缓存
网关缓存也是中间人,但不是由系统网络管理员处于节省带宽而部署,它们通常是由网站站长自己部署的,这样可以让自己的网站更具有课扩展性,可靠性和性能更好,可以通过许多方法将请求路由的网关高速缓存,它就类似于负载平衡器
在缓存策略来分,分为:
1.强缓存
直接从本地缓存中取资源,不会和服务器通信
2.协商缓存
通过服务器来告知是否能用本地缓存,先和服务器通信,如果返回可以使用本地缓存的指示,再从本地缓存中取,如果不可以使用本地缓存,就会返回最新的资源
3. Cookie
Cookie的内容是保存的一段文本信息,这些文本信息组合成一份通信证,他是客户端对于无状态协议的一种解决方案,
Cookie的使用原理:
1) 用户会提供包括用户名在内的信息,并且将其提交至服务器
2) 服务器向客户端回传相应数据的同时,也会发回这些信息
3)当客户端接受来自服务器的响应之后,浏览器会将Cookie 存放在一个统一的位置,
4)客户端在向服务器发送请求的时候,会把Cookie 再次发回至服务器
获取Cookie的途径
1)使用浏览器的开发者工具或者专业抓包工具获取
2)从本地文件中获取
常用浏览器的存放地址:
IE:%APPDATA%MicrosoftWindowsCookies 目录中的xxx.txt文件(里面可能有很多个.txt Cookie文件)。
Firefox:%APPDATA%MozillaFirefoxProfiles 目录中的 xxx.default目录名为cookies.sqlite的文件。
Chrome:%APPDATA%GoogleChromeUser DataDefault目录中,名为Cookies的文件。
3)通过前端技术获取:
Cookie的生命周期
Cookie的生成时间是整个会话期间:浏览器会将Cookie保存在内存中,浏览器关闭时就会自动清除这个Cookie
Cookie的生存时间是长久有效:Cookie保存在客户端的硬盘中,浏览器关闭的话,该Cookie也不会被清除,下次打开浏览器访问对应网站时,这Cookie就会自动再次发送到服务器端
测试人员可以通过对浏览器的设置修改Cookie的生命周期
Cookie的常用属性,便于测试人员根据测试场景进行修改
1) Name:该Cookie的名称,Cookie一旦创建,名称便不可更改
2) Value:该Cookie的值,如果值为二进制数据,则需要使用Base64编码
3)MaxAge:该Cookie失效的时间,单位为秒,如果为正数,则该Cookie在MaxAge秒之后失效,如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie,如果为0,表示删除该Cookie,默认为-1
4) Secure :该Cookie是否仅被使用安全协议传输,安全协议有HTTP,SSL等,在网络上传输输入之前先将数据加密,默认为False
5) Path: 该Cookie的使用路径,如果设置为"/sessionWeb/",则只有contextPath为"/sessionWeb/"的程序可以访问该Cookie,如果设置为"/",则本域名下conetextPath都可以访问该Cookie
6) Domain: 可以访问该Cookie的域名,如果设置为".google.com",则所有以".google.com"结尾的域名都可以访问该Cookie
Cookie不可跨域名以及跨浏览器使用
一般Cookie是不可跨域名的,这是由Cookie的隐私安全机制决定的,隐私安全机制能够禁止网站非法获取其他网站的Cookie
4.Session
Session是另一种记录用户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上,他是服务器端对于无状态协议的一种解决方案,客户端访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Seesion,客户端再次访问时只需要从Session中查找该用户的状态即可
Session的传输步骤:
1)服务器端程序运行的过程中创建Session,并且为该Session生成唯一的Session ID
2)服务器将Seesion ID发到客户端
3)当客户端再次发送请求的时候,会将这个Session ID带上
4)服务器接受到请求之后就会依据Session ID找到相应的Session,完成请求相应
Session的传输媒介
1) 通过Cookie传输
Session的信息是报错在服务器端的,测试人员只需要运用抓包工具从Cookie中获取Session ID 的值用于模拟用户请求,虽然Session保存在服务器,对客户端是透明的,但是他的正常运行任然需要客户端浏览器的支持,这是因为Session需要使用Cookie作为识别标识,因此服务器向客户端浏览器发送一个名为 JSESSIONID 的 Cookie,它的值为该 Session 的 ID。测试人员获取JSESSIONID的值即可。
Session的有效期与会话有关。存储JSESSIONID的Cookie是服务器自动生成的,它的maxAge属性一般为−1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效,因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session,但是由浏览器窗口内的链接、脚本等打开的新窗口(不是双击桌面浏览器图标等打开的窗口)使用同一个Session。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。