注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

接口测试之返回值校验——何为端到端的验证?  

来自何美玲   2014-09-01 21:22:47|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这个题目来的过程太曲折了,事实上结论和我寻求结论的路径简直就是南辕北辙。下面就来讲讲是什么引发了这段思考,也许前人早就走过这样的路,还是可以分享来说说和看看。
最近做A项目的接口自动化,目标接口的业务流程是这样的:需要生成新的手机号并且去DB中查询生成的手机号是否是可用的,调用接口去替换原本绑定的手机号。这个简单的逻辑很快就搞定啦。我是如何来验证接口的返回值的呢?之前耳濡目染地,有认识到接口的返回值并不可靠,服务器返回200那也不一定是真的成功了,数据库才是可靠的——于是,每调用一次接口,获得返回码后都要连接DB去看看是不是有手机号替换成功的记录。

追求真理的路途很坎坷
回合一:
接口写完了,跑了几次,发现偶尔部分case会失败,也没有规律,看上去好像是间隔地失败。1.直接去数据库看表格,发现是实实在在有记录的,那么查java的sql对不对,也是没问题的。2.那就单步调试吧,调试回回成功。真的是见鬼了!
回合二:
于是菜鸟我求助于开发,开发查了下,貌似一个判断DB是否存在记录的变量flag设置成了全局静态变量static,尽管不确定是不是这个,但是针对时好时坏的现象,flag取值true和false确实好像是原因。这么说来,好像找到问题了!调试还是没有问题,然后正常跑case,悲剧的是还是老样子!看来不是这个全局变量的问题。
回合三:
接着找问题,是不是我的代码什么地方写的不对?既然是数据查询的问题,DB连接有没有错?调试看看。隐约觉得自己每个case中都需要随机生成手机号码并且每次都要连接DB去验证有点渣。问了开发,开发大惊——每次连接DB,又不关掉,低级错误!!这样多个DB开着不乱掉才怪!查出来的数据能是正确的吗?谢天谢地,看来是DB连接的问题啊,难怪时而正确时而错误呢!改用单例模式,生成了唯一的DB实例,只调用者一个实例连接,以为万事大吉了,没想到接口测试之返回值校验——何为端到端的验证? - 网易杭州QA - 网易杭州 QA Team接口测试之返回值校验——何为端到端的验证? - 网易杭州QA - 网易杭州 QA Team还是老样子!
回合四:
没办法,把数据库方的开发叫过来问问,“你这个接口是不是异步的啊?异步的那数据库也应该是实时写入的吧”开发表示,我是实时写入的啊。不过有的表不能算实时的,因为有的是action_log,即操作日志表,是通过存入log服务器异步获取到数据库的,非实时写入。这个过程耗时长短不一,并且最重要的是——会!丢!失!接口测试之返回值校验——何为端到端的验证? - 网易杭州QA - 网易杭州 QA Team难怪我单步调试就回回正确,因为调试的时候耗时长,有足够的时间写入数据库,而直接执行有时候就会查询先于数据写入。
结论:
原本还想通过查数据库前使用sleep()的方法也没戏了,原来我验证的方式本身就是有问题的!

思考和总结:
那么到底什么样的验证才是可靠的?所谓的端到端的验证呢??针对这个困惑,将问题抛到了QA大组,很多前辈给了我宝贵的意见,其中包括“查数据库还是相对可靠的验证方法”、“对于接口写数据库等相对耗时又不确定耗时多少的情况需要开发给出过期时间的参考值,超过这个时间就算接口调用失败”等。
受到很多启发,其实端到端的验证没有绝对的哪一种可靠,数据库也不是一定可靠的,就如我遇到的以上情况。只能说需要针对实际情况适当调整:
1.可以几种方法结合起来,比如正常的数据库实时写入情况就可以通过数据库查询,同时参考接口响应的最大过期时间;
2.DB查询有时候效率很低,涉及到多表连接查询,如果有条件可以考虑让开发给出返回数据库状态的接口,直接调用接口即可;
3.接口间也可以互验,但是风险较大,需要其他措施保障,比如实时log。

总结带入了很多主观想法,欢迎指正。接口测试之返回值校验——何为端到端的验证? - 网易杭州QA - 网易杭州 QA Team接口测试之返回值校验——何为端到端的验证? - 网易杭州QA - 网易杭州 QA Team
  评论这张
 
阅读(1907)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016