求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
TFS Restful 接口测试总结分享
 
作者: 100Continue ,发布于2012-7-5
 

需求:

近期刚刚完成Nginx 版本的 TFS (Taobao FileSystem) Restful 接口测试工作,借此契机总结分享以下3点:

1、Restufl简介;2、TFS Restful接口设计思路; 3、TFS Restful接口开发过程中容易出现的bug分析(重点介绍)

解决方案:

1、Restful简介:

Restful的一个思想就是充分利用http的特性,将资源独立出来,并对资源可以有各种操作。比如http标准的get/put/delete/post/header/option等。

一般来说,get/put/delete是等幂的操作,也就是说,相同的多次操作,原则上是不应该影响到最终结果的。而post则多用于添加一个新的资源,是一个不等幂的操作,多次重复操作,产生的最终效果会不一致,比如可能会创建了多个资源,这个现象在我们在提交浏览器表单请求的时候可以看到,重复提交,浏览器会有提示的。

Get操作的原则是不会改变数据的本身,它不应该做对数据的修改等操作。

Put则仅仅是对数据做更新操作。

Delete则仅仅是删除数据的操作了。

所以,可以看出,restful接口对资源和操作有一个很清晰的定义与界限。

2、TFS Restful接口设计思路:

对TFS来说,他是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。而数据就是一种资源,在对该资源进行适当的分类之后(分为原生TFS文件名和自定义TFS文件名),那对这个资源就可以进行各种不同的操作。 在此将各种不同的操作分为以下2类:

第一类:增删改查操作:

写文件:可以用Post操作来实现,如:POST /v1/appkey HTTP/1.1。 其中v1表示为原生TFS文件名资源,appkey表示所操作的应用(每个不同的应用具有不同的操作权限和优先级别);操作成功后将返回Status 200 OK及resposne body内包含的文件名;若操作失败,将返回相应错误信息的Status状态码,如400 Bad Request, 500 Internal Server Error等信息,便于使用人员debug问题。

读文件:可以用Get操作来实现,如: GET /v1/appkey/TfsFileName HTTP/1.1。 其中TfsFileName表示所需要读取的文件名;操作成功后将返回Status 200 OK及response body内包含所要获取的文件内容;若操作失败,将返回相应错误信息的Status状态码,如400, 500和404 Not Found等信息。

删文件:可以用Delete操作来实现,如:DELETE /v1/appkey/TfsFileName HTTP/1.1。 操作成功后将返回Status 200 OK 无需返回response body信息;若操作失败,依然返回错误信息的Status状态码。

获取文件元信息: 元信息指数据的一些基本信息,如存放位置、文件大小、当前状态(删除、隐藏等)等信息,依然可以通过Get操作来实现,如: GET /v1/appkey/metadata/TfsFileName HTTP/1.1。 在url中增加metadata字段,以此来区分是否读取文件的元信息。操作成功后将返回Status 200 OK及response body内包含文件的元信息数据;若操作失败则返回错误信息的Status状态码。

第二类:由于TFS本身的特性,因此会有像指定suffix/delete/hide/offset/size等更多操作。可以将这些控制信息放到url的args里面。如: GET /v1/appkey/TfsFileName?suffix=.jpg&offset=6&size=2012 HTTP/1.1。 之后通过Nginx对请求的解析信息来做后续的数据库请求逻辑处理。

3、TFS Restful接口开发过程中容易出现的bug分析

将TFS Restful接口开发过程容易出现的bug分为以下4类:

1)TFS Restful与后端数据库TFS 之间的TCP通讯:

(a)TFS Restful在处理读、写请求完成之后不关闭与客户端的连接,导致大量TCP连接处于Close_Wati状态,无法释放连接,最终导致连接数耗尽 ;这是由于TFS Restful在完成处理请求并接收到Client端返回的FIN数据包后,未返回FIN数据包,单方面hold住了TCP连接;

(b)TFS Restful未能正确处理后端TFS响应超时问题;这是由于后端TFS由于网络堵塞等问题,无法在正常时间内返回响应,而TFS Restful所设置的超时处理不生效,导致TFS Restful hold。

2)TFS Restful内部数据存储:

(a)TFS Restful在集群间重试的时候没有修改对应的接收buf;

(b)TFS Restful获取不到 所需删除的物理集群地址;

(c)TFS Restful分配tfs_module_rcs_zone 内存时出错;

这是由于TFS是分布式数据库,涉及多集群处理,因此TFS Restful在各个集群之间获取信息时,需要修改相对应的接收buf,否则将导致数据不正确。

3)TFS Restful控制信息处理不正确:

(a)TFS Resultful size测试设置为0是没有返回badrequest,而是出现访问异常:read timeout;

(b)TFS Restful读文件请求offset等于文件大小时read timeout ;

这是由于TFS Restful对控制信息的处理不正确,导致读取TFS集群失败;

4)TFS Restful对返回错误信息处理不正确:

(a)TFS Restful选择集群失败时返回500而不是404;

(b)TFS resultful读取文件时Response没有返回content-type和accpet-ranges头信息 ;

(c)TFS resultful读取不存在的block信息时,返回的error code不正确 ;

(d)TFS Resultful查询元信息时请求uri没有设置appkey时返回error code不正确 ;

这是由于TFS Restful response信息设置不正确所导致的。


相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践


LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...