(下篇)吃自己的狗粮:Go4Api之API测试项目实践

背景


作者所经历的和观察到的很多敏捷项目中,通常只有一个QA,在QA有限的测试时间内需要关注的却是产品全局质量问题,对测试时间的分配不当必然会对产品交付质量带来影响。除了增加QA外(增加QA有时也不能解决本质复杂性的问题),提高测试效率是一个势必的手段,而其中提高API的测试效率又显得特别重要。

在之前的文章中已经讨论过自动化测试对测试效率的影响与工具Go4Api的产生背景,请参考:测试与自动化测试,记测试工具Go4Api的诞生

在本系列的“上篇”中也已经对API测试“测什么”问题作了相对详细的分析。本文主要以一个项目的实践来看看“上篇”中的测试点是怎么落地,以及工具Go4Api在其中起到的作用。

工具Go4Api简介


Go4Api是作者总结所经历诸多项目中API测试的共性,抽象后开发的通用工具。经过迭代和优化,Go4Api已经与最初的结构有了很大的不同,目前Go4Api主要特点包括:

  • 用纯粹的Json格式表达用例
  • 用例有自己的setUp和tearDown
  • 整个测试过程有Global setUp和Global tearDown
  • 支持Http、数据库(如MySql)、缓存(如Redis)的请求,返回结果的结果搜索
  • 有自己的断言表达和断言库
  • 有内置的Built in函数,支持一些必要格式转换、数据处理如时间戳、随机数等,函数可嵌套调用
  • 能管理用例的优先级、前后执行顺序依赖、数据依赖,用例间的参数/值传递
  • 可让无依赖的用例并行执行,也可以串行执行
  • 支持“变异测试(Mutation)”,即对一个Http请求的headers、queryString、post body按规则进行值变化,从而构造新的请求数据,并提供相应的结果分析
  • 报告,能对执行结果产生Console实时报告,和Html格式的更详细的报告和统计

更多内容请参考:github go4api

项目简介


项目S是一个To C的系统,大约有200万终端用户,同时系统还有超过6000家门店及其他用户会持续对系统进行读写操作。除了功能外,系统的性能要求是写进合同的交付内容。

技术上,系统拥有多个独立部署的服务,并采用了缓存、数据库主从等,同时还有诸多的第三方调用和依赖。通过对系统的质量模型分析,项目需要的测试类型和优先级如图一所示:

测试类型

接下来会从多个角度来看看Go4Api是否能让“上篇”所提到的测试方向落地,以及在项目S的实际效果和哪些不足。

限于篇幅,不能对所涉及的内容作很详细的描述,但会尽量包含关键内容。

实践1. 基本功能,多个用例的管理和执行(“上篇”之1,4)

目前Go4Api已经很好地集成在Jenkins的Pipeline中,好处是测试与代码所部署的版本保持同步,并且产生的报告可以很好地协助开发和QA错误定位与修复。

运行上,只要指定文件路径,Go4Api会自动扫描该路径下所有的文件、识别用例、调度、执行、报告。

多个用例的管理和执行
结果查看与分析
实践2. 变异测试产生正向、负向数据(“上篇”之2,3)

“上篇”提到,我们要尝试“足够多”的正、负向数据才能对所测API有比较全面的了解,但是手工产生这些数据很困难。

Go4Api提供了自己的解决方案,就是“变异测试”(Mutation)。基本原理是对原始请求的headers、queryString、post body扫描并用内置的mutation rule产生新值,从而生成新的用例并执行。如图中所示,对一个用例生成600+新的用例并在1分钟之内执行完毕。通过提供的报表功能,很容易分析出API的强、弱项,并以此为基础进一步探索,或从中选择用例加入回归集。值得注意的是,变异测试算是模糊测试范畴。

变异测试
实践3. 并发请求(尤其是相同参数)(“上篇”之5)

Go4Api是Go语言开发,充分利用了语言对并发支持的优点。如图所示,虽然case 1的模板产生了14个用例并同时发出,但case 2只期望有2个成功,如果应用程序在并发处理逻辑上有缺陷,大概率case 2会失败。(注:并发逻辑测试一定程度也是不确定性测试,需要多次探索和分析)

并发请求
实践4. 多“场景”并行测试(“上篇”之6,7)

多“场景”并行测试的关注点在于不同角色或用户在并行操作时的数据隔离或上下文隔离,组合使用Go4Api的“实践1”和“实践4”,合理规划(交叉)测试数据就能得到不错的测试效果。

实践5. 缓存测试(“上篇”之8)

有效的“缓存”测试需要打开黑盒,测试并观察请求、缓存、持久层的协作方式。Go4Api支持Redis和MySql的操作和结果断言,组合Http、Redis、Sql能很好的涵盖“缓存”测试场景。

缓存 - Redis
实践6. 数据库主、从测试(“上篇”之9)

通常写操作在主数据库上,耗时的查询在从数据库上。另外,主从同步的可能的延时或失败对系统的影响也需要测试。Go4Api支持MySql的操作和结果断言,组合Http、Sql能很好的涵盖各类主、从测试场景。

数据库主、从
实践7. API限流测试(“上篇”之10)

限流是一种防范机制,但其是否生效需要测试。Go4Api对用例支持并发、串行、或者混合执行,能很方便地触发限流机制。同时,Go4Api还一类特殊的setUp,比如sleep,这样也能很方便地测试限流解除后用户是否能正常访问。

限流与等待
其他:Go4Api没有涉及或涉及较少的内容

Go4Api定位于功能测试工具,但同时也有简单的性能收集(“上篇”之11)。但更多的性能测试场景需要专门的测试工具。

基本性能统计

Go4Api对安全测试也不涉及(“上篇”之11)。

第三方调用和依赖呢(“上篇”之10)?如果第三方调用是显示调用,很大程度上Go4Api能无区别对待这些第三方接口进行测试。但如果是隐式调用,即第三方接口外部不可见或不可访问,那更多的得依靠测试数据的设计来进行测试覆盖。

最后


Go4Api能协助作者对开发和整个团队提供分钟、甚至秒级的质量反馈。也让测试的代价足够低,使得回归测试不是一个阶段而是时时发生的。更重要的是,作者能从繁重的API测试中解放出来,去关注、思考更多的质量内容,包括但不限于性能、分布式、链路、健壮等。

由以上实践可以看出,Go4Api基本验证了作者关于一个通用的API测试工具的初衷的可行性。Go4Api还在持续演进中,期待你的尝试和反馈。

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

推荐阅读更多精彩内容