开篇词 | 把接口测试这件小事做深、做透

你好,我是陈磊,欢迎来到我的接口测试课。

我曾经在京东中台工作,经历了京东虚拟平台质量团队从业务驱动到技术驱动的转型过程,我也是整个过程的推动者之一。

我对接口测试的认知,是我在从测试工程师做到测试架构师这个过程中逐渐形成的,因此,我想先和你讲讲我的从业经历,跟你分享一下我和接口测试的缘分。

接口测试思维,给我带来技术与能力的跃升

我在2009年硕士毕业后,就成为了一名软件测试工程师。刚入行时,我一直在做功能测试,主要的工作内容就是设计测试用例,然后手动执行。后来在工作中,开始人工回放大量的测试用例,我每天被各种项目的测试用例淹没在电脑前,使用最多的软件就是Excel。大量重复性的工作让我逐渐失去了目标,那时我认为,测试就是不断地人工点点点的操作,不是一个纯技术的工作。

后来我被自动化测试的浪潮拍醒,开始用Selenium自娱自乐地写自动化测试脚本。一开始我还是乐在其中的,刚接手的项目,写好自动化测试脚本后,再次迭代时我只要运行一下测试脚本,等着脚本自己运行结束就可以了。

但随着项目不断迭代,我的Selenium脚本越来越难以应付我的测试任务了。最开始我还可以通过它来“偷懒”,到后来,它反而变成了我测试工作中的负担。不维护它,我心里觉得不甘;继续维护它,又平白给自己增加了更多额外任务。那时界面自动化测试的一些问题我都遇见了,例如项目页面变更频繁导致测试脚本维护成本特别高、页面重构导致脚本大面积失效等,诸如此类的问题导致我加班时间越来越长,只能用996的工作节奏才能勉强跟得上项目进度。

那时好像也没有极客时间这么好的学习应用,我把碎片时间主要用在了刷技术类微博上。记得有一次偶然的机会,我在一篇微博文章上看到了Postman这个做接口测试的小工具,当时它的功能还没有现在这么强大,但我也被它方便、易学、易用的特点吸引了。

我开始把Postman应用到我的工作中,从接口测试开始完成我的测试任务,并逐渐积累了很多测试脚本。在使用Postman开始接口测试后,我逐渐放弃了Selenium的界面自动化测试,也摆脱了加班维护界面自动化测试脚本的困境;同时依靠它强大的功能,也提升了整个项目的测试工作速度,因此在很长一段时间里,我的工作都很轻松,每天都能准时下班。

Postman这款工具也让我重新思考了测试工作,我开始逐渐体会到,测试工作也是一项技术驱动的工作,测试工程师也是一个技术岗位。

接着在一次工作中,由于被测系统的接口不是HTTP协议,我这才发现,Postman在非HTTP协议的接口测试上,已经没有办法发挥任何作用了,于是我开始自己写接口测试脚本,并慢慢将它封装成自己的测试框架。我做的测试框架从我的第一份工作伴随我到现在,已经经历了无数次的迭代,我现在依然还在维护它。

后来,我在京东中台担任测试架构师,主要负责中台的微服务接口测试,以及提高质量效能等工作,我的工作目标就是让机器做完接口自动化测试中费时、费力的事情,这包括测试脚本的开发、测试数据的准备、测试执行以及测试结果收集等一系列工作。

我和几个小伙伴也一起开发了自动的自动化接口测试平台AAT,我也是AAT自动化脚本生成算法的主要设计者之一,并在各种技术峰会上对它的关键算法做过详细介绍。关于它的一些主要思路,我在我们团队一起撰写的《京东质量团队转型实践:从测试到测试开发的蜕变》一书中也有介绍,如果你对它感兴趣,可以去看看这本书。

在京东工作期间,我通过引入算法完成了测试框架的一次完美升级,主要实现了框架自动的编写测试脚本,给出推荐的测试入参数据等特性。但我深知,这些高级功能的实现都离不开我在之前所有工作中形成的接口测试思维,它仅仅是在一些特别的方向上变得更加先进和智能而已。

伴随着我的成长,我的接口测试框架也在不断变得完善,就像武侠小说里那种人剑合一的感觉一样,我的技术和我在共同成长。在这个过程中,我完成了从一个具体的测试代码到一个框架设计的思维转变,拥有了平台设计的思维,并通过不断尝试和探索,完成了智能化测试框架的设计和开发。

从使用工具完成接口测试,到自己写代码完成接口测试,然后慢慢封装自己的框架,最后走到让测试框架更智能的技术路线上,这一路我走了十几年,走过不少弯路,也趟过不少坑。

在这个过程中我最深的感触就是:无论你在工作中参与了一个多么智能的测试平台的设计与开发,还是引入了一个多么强大的自动化测试框架,你首先都要会用最原始的方式完成这件事情,这才是万变不离的宗。在这个基础上,如果你掌握了接口测试思维,那你不只可以快速掌握某一种测试工具来解决问题,更可以打造属于自己的测试框架,最终建造出只属于你自己的终极测试框架。

因此我设计这个课程,就是从接口测试的思维开始,教你把业务测试的思维和接口测试的技术结合到一起,合成接口测试的思维,最终让你拥有接口测试的能力,这种能力既包含了工具的使用、代码的编写同时也包含用例的设计。

为什么说接口测试是你的必修课?

那么在测试中,我为什么要强调接口测试的重要性呢?

从它对项目的影响来说,接口测试直接测试后端服务,更加接近服务器上运行的代码程序,也更能发现影响范围广泛的Bug。

我记得在《软件测试的艺术》中有这么一句话:“越早发现Bug,修复的成本越低。”

随着现在中台化、微服务化的发展,一套服务支持多种终端,例如Android端、iOS端、Web端等,这些服务都是由一套后端服务支持的,上面这句话就可延伸为“越接近底层的Bug,影响用户范围越广泛”。

就如同你发现了一个Web端的界面错误,那么这个Bug只会影响Web端用户,但是如果后端服务有一个Bug,这个Bug有可能会影响所有用户,无论他是使用电脑还是手机访问我们的系统。而接口测试就是为了后端服务测试而生的,它会保证后端服务的质量,避免这种情况出现。

抛开它对项目的影响,单单从它对你自身的影响来看,你会发现,如今进入任何一个招聘网站,随意点开一个测试工程师的招聘要求,接口测试几乎已经成为测试招聘中一项必备的技能了。

所以作为一名测试工程师,掌握接口测试,并能熟练完成接口测试,无疑对你在求职时和工作中都有很多好处,比如:

  • 增加自己的技能,在找工作时获得更多机会;
  • 通过接口自动化完成接口回归测试,让自己的工作更轻松、更高效;
  • 通过持续集成平台调用接口自动化测试,为流水线提供质量保障方法和手段,赋能研发。

这个专栏是如何设计的?

为了更好地理解和学习接口测试,我来和你说下这个课程的设计思路。

我把整个专栏的内容分成了三大模块,分别是初级技能篇、综合技能篇和进阶技能篇。

  • 初级技能篇。在这里我会带你重新认识接口和接口测试,了解接口测试都包含哪些测试活动,教你如何由测试工程师主导、整理接口测试需要的输入条件。我也会带你合成接口测试技术和业务测试知识,让你形成接口测试思维。
  • 综合技能篇。在这里我会教你如何从流水账式的接口测试脚本,一步步抽象出属于自己的接口测试框架。这样随着课程的深入,你会建立一套自己的接口测试框架,也会同时完成从接口测试到接口自动化测试的转变。最后,我还会告诉你一种借力打力的方法,借助工具的优势,弥补测试框架的缺陷。
  • 进阶技能篇。在这里我会教你如何利用测试工程师的思维,开始并顺利完成一个陌生的协议接口的测试任务,同时将它加入到自己的测试框架中,不断提升它的测试能力。测试框架是你强大的武器,框架数据层的封装则是你的弹药库。所以最后我会教你完成外部依赖解耦的方法和思路,保证你能顺利完成测试任务,并不会因为遇见不靠谱的队友而迟迟无法交付。

测试行业是一个技术驱动的行业,而在测试的工作内容中,接口测试又是一项基础技术能力。

我相信在我们一起学习的这段时间里,我会和你一起学习这项基础技能,我会将你带入一个通向更有价值、更有满足感的任务中,让这个过程中赋予你接口测试的思维和技能;当你完成这个专栏的学习后,你也会带走有你个人标签的接口测试框架,这些都会让你这个行业里身价倍增。

纵观接口测试的发展,这一项技术在最近两年才上了快车道,所以现在上车,你并不算晚。最后,欢迎你在留言区写下你的工作经历,以及你对接口测试的看法;也欢迎你先为你自己的接口测试平台起一个名字,并在留言区先立下自己的目标,我们一起在这个专栏,与一群志趣相投小伙伴相互督促,相互鼓励,一起学习进步,我相信在学习完所有课程后,你一定会顺利完成你的目标!

精选留言

  • Y024

    2020-02-03 23:18:10

    接口测试,推荐大家了解一下去哪儿开源的 YApi

    https://github.com/YMFE/yapi
    作者回复

    谢谢您的推荐,YApi是个不错的api测试平台

    2020-02-04 08:01:51

  • 正伟

    2020-03-25 14:57:56

    推荐大家我开发的接口文档和测试的工具,写好接口文档,自动完成接口测试。无需开发环境,直接安装就可以用。https://github.com/arlicle/panda-api
    作者回复

    厉害厉害,加油,我已经star了你的项目了

    2020-03-26 18:23:17

  • L

    2020-08-14 08:37:53

    我是一名Java开发工程师,也在用postman自测接口,我们公司测试都是手动操作,学习这门课程是为了学习接口测试思维,为了更默契地配合测试工作,知己知彼,才能更高效地推进项目的工作。
  • Em

    2020-07-19 21:12:27

    刚毕业应聘了测试开发工程师,想请问这和测试工程师最大区别是什么呢?
    作者回复

    您好,你这个问题是一个我认为不好回答的问题,那么我从我自己的认知给你进行下说明,这又可能并不是行业内都能普遍认可的说法。
    1、测试开发工程师,在当今有两个含义,一种是做测试自动化脚本的工程师,另外一种是在测试部门的开发工程师。那么第一种是将业务测试逻辑用自动化代码或者自动化工具等的形式表现出来,便于再次回归的时候,避免人的重复劳动。第二种就是为测试工程师打造一系列测试工具、测试平台的工程师,他们还是开发工程师,仅仅是服务在测试部门而已。
    那么测试工程师,当前应该就是业务测试工程师,那么这在很多公司有可能有一个很显著的区别,和一个普遍的共同点,那么先说共同点,就是大家参与需求评审、case的设计、case执行完成业务测试,保障交付质量;区别就是有些公司把业务逻辑的自动化测试代码开发任务归到业务测试工程师的职责也就是测试工程师的职责,也有些公司将自动化测试脚本开发归为测试开发工程师的任务,测试工程师不做对应工作。
    但是测试工程师和测试开发工程师并没有高低贵贱之分,他们仅仅是因为测试职业的细分而存在的两个不同的方向的角色而已,但是测试工程师并不是不懂代码的借口。

    2020-07-21 18:12:50

  • 吃草🐴~

    2020-02-03 22:07:33

    之前在写接口的时候就经常会被测试“怼”,当时工作比较忙,很少会从测试的角度来考虑问题,我最后就是他们要啥我就去实现。
    由于公司不大,我在公司是传说中的全干程序猿,所以我也经常用 Postman 去自测接口。这节课和陈老师一起学习学习接口测试思维,看他们怼我怼得有没有道理~没道理我可是要怼回去的~🤔🤔
    作者回复

    谢谢您,希望课程中我们一起学习进步,也希望开发和测试变成一个合作team,互相促进,最终为高质量交付物而共同努力!

    2020-02-03 23:47:51

  • Geek_71b98d

    2020-04-21 15:54:28

    专科毕业 ,做了6年功能测试 ,接口也是粗略的测试一下 ,很多公司都要求会自动化 ,但是招进去之后根本不用 ,每天都是大量的点点点 ,以前会的一点技能慢慢忘掉了 最惨的是工作一年比一年难找
    作者回复

    加油

    2020-04-23 10:46:14

  • 一默

    2020-02-03 18:14:13

    老师,您好。请问如何确定接口测试中参数化的参数范围?谢谢
    作者回复

    您好,谢谢您。接口参数的设计方法还是要使用我们软件测试的case设计方法来设计的,例如边界值法、场景法、因果图法等等

    2020-02-03 21:47:58

  • 第二姑娘

    2020-02-03 19:41:21

    功能测试3年,安全测试1年,最近在用postman进行接口测试,初步接触,很多不懂的,请老师多多指教,希望能有收获
    作者回复

    谢谢您,希望您在课上和我一起学习到一些不同的思维,接口测试考虑的方式有业务测试的内容,也有一些代码方面的考虑因此我相信您会有不一样的体会,尤其你有安全方面的经验会更有利于接口测试的深入

    2020-02-03 21:42:34

  • null

    2020-02-05 00:26:11

    我是一枚后端开发小哥,希望通过专栏的学习,培养测试思维,能够通过测试覆盖促使编写高质量代码,完成高质量的交付。
    作者回复

    谢谢您的支持,希望在我们一起学习的日子里,你能有所得。

    2020-02-05 08:39:53

  • smallfish

    2020-03-19 20:01:15

    其实公司早就推广了接口自动化,大家也都维护了一大批接口用例。但由于敏捷式开发模式,需求变更频繁,开发工作也不规范,再加上领导强压任务,导致很多人包括我自己写出来的用例就是简单的冒烟用例,根本不做业务验证,导致接口自动化用例完全成为了一个鸡肋。希望通过本课程的学习能让我更加深刻的理解接口用例,真正实现提高工作效率的目的
    作者回复

    敏捷不应该是这样,希望可以给你一些思路谢谢

    2020-03-19 22:16:35

  • 快乐的五颗星

    2020-02-05 11:36:21

    陈老师的课程很及时,今年是我从资深业务测试转型到技术测试的第一年,第一个实践就是接口测试的落地,以前有一些初步的探索,这次要形成系统的接口测试体系,跟紧陈老师的脚步,认真学习!
    作者回复

    谢谢您

    2020-02-05 22:11:58

  • 张媛

    2020-06-07 12:42:09

    老师你好,我目前做了一年多功能测试,今年让我们使用httprunner开始做接口测试了,基本都是串接口的主流程功能测试,由于不太了解接口测试,感觉用httprunner实现接口都是套路,只要了解了如何用就都会了,想知道下还有没有别的能够提升的方面?
    作者回复

    看看httprunner的代码,你会有更深入的理解,在用的过程中发现有些不好用的痛点,就开始尝试去修改,你会变的技术能力更强大。

    2020-06-11 21:56:08

  • Aaron Liu

    2020-06-02 20:24:40

    目前用的是readyAPI(soapui) smoke/sanity/full regression一起用 封装了常规的方法(如数据加载,配置参数,共享case,内部工具集成) 鉴于项目目标 准备采用Python,基于流行的测试框架(如selenium,pytest)做一个综合性的框架 需要向老师学习
    作者回复

    谢谢您,技术选型很清晰加油

    2020-06-03 13:01:12

  • 蔡森冉

    2020-02-13 10:58:49

    老师,现在是一名功能测试,团队里面基本上没有做接口的,很多时候项目都只能做探索性测试,没有测试用例,最多是自己写一下导图然后就测试交付,我想推动做接口测试,但是开发人员中代码写的非常不规范几乎连文档都没有,自己基本上不太懂代码(我是半路转测试的),现在我非常想提升自己能力和改善公司现状。自己就会很迷茫一会学点性能一会学点接口,工具jmeter做性能和接口都会用一点,但是就是感觉很迷茫,感觉测试是非常大的一个方向,自己学习缓慢,学了在实际工作中使用又非常少,遗忘也非常快。我个人原来学电子信息工程,工作做了两年功能,一年是做银行信贷测试,主要分析需求写测试用例,现在做一些B2B或者小程序类测试。希望老师能知道一下现在该怎么办?
    作者回复

    您好,看了您的留言,我们先说计算机很多大牛并不是计算机专业出身,甚至很多都没有大学毕业,因此什么专业毕业并不重要。在你的项目中,如果可以通过一些简单的工具能够完成测试,那么建议工具先行,因为工具学习比较快,入门容易,很多有测试基本知识的人都会用,受众广,这样推动接口测试。同时很多工具都有代码导出功能,这样也为未来走向代码的脚本留下一些积累。接口测试应该是在测试有一定成熟度后才开始的,如果您现在还是被手工测试搞得焦头烂额,那么我建议你还是要写测试用例然后对测试用例分级,不会级别的事情回归不通级别的测试用例,这样会逐渐的将自己释放出来。https://blog.csdn.net/crisschan/article/details/86502089这个是我的博客,你可以去看看这个“快速划分测试用例优先级”文章,希望对您有一些帮助,谢谢。

    2020-02-13 15:48:50

  • Daiver

    2020-02-05 19:27:32

    希望可以学到接口测试的思维和技术,避免被diss
    作者回复

    谢谢您相信我们一起学习的日子里你就有所得

    2020-02-05 22:00:43

  • w双

    2020-02-05 17:28:25

    2020毕业生准备春招找测试工作,希望通过跟老师学习,有进一步认识
    作者回复

    谢谢

    2020-02-05 22:02:33

  • Yohe

    2020-02-03 21:58:42

    2020冲鸭!坚持学习
    作者回复

    谢谢您,大家一起学习努力

    2020-02-03 23:48:06

  • 🙈🇨🇳LJ

    2021-01-05 16:59:33

    接口测试,到接口自动化测试,这是当代软件测试工程师的必经之路,因为个人觉得接口自动化比ui自动化的意义更大,可维护性也更高
    作者回复

    同意

    2021-03-25 22:08:52

  • Cubat

    2020-05-18 10:40:20

    现在挺多人使用 Postman 的,不过我想推荐一个 Chrome 的插件 Talend API Tester。这个比较轻便,可以试试。
  • 燕旭鹏

    2020-04-10 16:49:24

    接口测试,在我看来很难,但是学起来也有一定的难度,但听了老师的讲课,我感到,它不光光是测试那麽简单,他需要具备很多东西,我要从今天开始,好好的学习测试,加油吧。
    作者回复

    加油

    2020-04-10 23:49:11