java 接口测试技巧

最近这段时间给负责的计费项目增加了不少接口自动化代码,略有些心得,分享一下。

bonus

张爱玲说过,出名要趁早,做接口自动化也是。之前定的流程是这个迭代内的功能要手工回归一下,等到上线了之后,在下个迭代初补全自动化接口。但是往往到了下个迭代开始的时候又开始了新的一轮需求评审啊,交互评审啊,等等杂七杂八的事,而且一个迭代的新增的接口,在上线前在联调,演练回归都要吐了,(特别是那种传入的参数超级多,有各种组合的情况)等到下个迭代根本再也不想碰它一碰,然后就被永久的积压在那边了。

所以既然要做,还不如趁早做,称之为演练享受联调时调通接口自动化的红利。在开发初期,定义好前后端接口,开发给出接口文档之后,就可以马上把测试里面的api那一部分给写好了,测试用例设计和逻辑校验部分到是可以放一放,等到开发服务都通了慢慢再做。

另外,现有的测试框架填api已经很方便了,不管是get还是post接口统一都是addParam。主要就是填写一下对应的参数传进去,当然甚至可以直接把开发control层的代码扒过来,对应接口要传什么参数直接一复制黏贴就好。

根据上次开会经验,这种兵马未动,粮草先行的做法,井宝宝,晓青姐,钟导都是先行者啊~

table driven method

代码大全第18章曾经讲到过表驱动法,这种方法如此重要以至于作者单独拎出来一章来讲。实际上,数据是数据,代码是代码,代码是数据,数据是代码。可以把一定的逻辑放到一种数据结构里,然后干掉不少 if 或者case。

那么到了testng这里比较经典的一个设计就是data provider了。它如此方便以至于其他例如python这种要写测试的话都需要用装饰器去模拟一个。具体来说在data provider里面你可以去构造某一个测试接口的用例表,比如计费的价格计算器,组合条件多种多样,规格不同,副本数不同,包年包月条件,时间长短不同都能影响到最后的价格。这要手工接口一个个试肯定死了。而且联调死过一次,还有演练等着你,还有双十一大促哦,1周年活动哦。。。

所以为了能够在演练享受到联调的红利,先事先写好一个测试的case,把各种参数传进去,最后验证一下返回的价钱对不对。然后以此条为模板,复制黏贴多份,为了都能覆盖到,各种规格都要出现一下,副本数情况验证一下,包年包月不同时间维度的都要覆盖一下。组合情况多了,全用例肯定是做不到了,那么考虑一下使用全对偶测试用例设计。好了,这张表终于被你设计出来了,它是数据,它也是代码,它内有一段逻辑,它是质量的守护神。

另外再提一句,data provider中还有一个用法是,比如接口的异常测试,传入的某些取值不应该存在的时候会返回一个错误码,比如为中文,标点符号,过长,全大写等等,这种接口异常校验其实差不多的,但你自己又想不到那么多种情况,可以偷偷的去扒一下别人的data provier里面的异常case,copy过来,齐活啦~久而久之,你就维护起一个你的接口异常case库。

另外,其实每个case都长得的差不多,一般每次都只是其中几列的参数变化一下,不如抽象成为一个common object,用一个replace 函数换掉固定的几列。这一招是从井宝宝的cloud pay项目中学来的。

  public static Object[] replace(Object[] objects, int[] indice, Object[] objs) {
    Object[] cloneObj = objects.clone();
    for (int i = 0; i < indice.length; ++i) {
      int index = indice[i];
      cloneObj[index] = objs[i];
    }
    return cloneObj;
  }

Jump wire

飞线

飞线好像是电工电子里面的一种技术。那时读高中的时候要手工组装一个收音机,结果电路板上一个用来焊接的小铜片因为温度太高掉下来。这你让背后的二极管如何生脚啊。这时候同桌说了可以用等电位点的方法来解决,也就是找一个和掉下来铜片等电位的一个点,直接搭根线和二极管焊接住,比较dirty的解决方式。

一个标准的测试过程一般说来为 setup -> test -> verify -> teardown。比较理想的情况应该是测完了把本次测试生成的垃圾都回收掉。不过真正做起来的时候比较难,比如setup要新建一个用户,初始化这边的逻辑既不已知也不用求,也没现成的接口;teardown的时候清理用户的某些资源但是根本就没有delete接口啊。

这个时候之后自己搭一个飞线了。比如每次下订单或者购买资源包都会扣一下钱验证购买前后资源包、订单的钱有没有扣对,久而久之扣得地主家也没有余粮了。标准的做法是在teardown的时候去还原该租户bill_accout里面的钱。然而没有一个接口是直接设置租户余额的——正常用户租户余额变动都是涉及到充值、支付平台回调等,和下订单没有关系也不在验证的逻辑内——这个时候只好自己加一个dao,写一个方法专门来设置租户的余额。这个在晓青姐的demo项目里提供了脚手架。只不过每一个update都要写个方法,有点麻烦,每次其实就是传的sql语句有点变化,我稍稍修改了一下,用一个通用的sqlUpdate方法来统一处理,这样只要写sql语句就好了。

shortcut

知名常二路经济学家,腾讯荐股师子柳在《淘宝技术这十年》里面曾经说,那时候淘宝刚起步,他打了一份eclipse的快捷键就开始上马了。然后10年后我打了一份IntelliJ 的快捷键。

具体到接口测试中,首推IntelliJ 列编辑模式。就是在vim中你用ctrl+v 进入的编辑模式类似。主要之前说了,data provider 是一张表,每个case其实都是依赖一个模板,稍微有几个参数的变化,最适合列编辑了。

举个例子,规格不同价格不同。在我写case的时候,常用的操作如下,把一个case写好后复制多份,从常量表里面copy规格,从数据库中copy价格:

column-edit.gif

有时候没对齐,不方便列编辑。这时候推荐一个Align插件。选中之后可以按照逗号分隔符对齐,在列编辑copy数据库中的价格。

align.gif

还有各种重构快捷键,抽取参数,抽取常量,抽取方法等等,就不一一赘述了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容