专栏地址:https://www.nowcoder.com/tutorial/10032/index
开篇词
您好,我是null先森,欢迎加入我的专栏,和我一起开始 “接口测试之代码实例21讲”的 学习之旅。我是一个在软件测试行业战斗了15年的老兵,现任某百强互联网公司测试总监,从大学毕业到现在,我的职业历程可谓丰富而精彩,我经历了:
- 从私企到国企再到互联网公司的公司跨越;
- 从传统软件测试到系统集成软硬件结合测试再到移动App软件测试的行业转型;
- 从C/S到B/S再到M/S的系统架构演进;
- 从负责某行业全国4级(部-省-市-区县)联网系统的测试,到负责与华为合作智能交通系统海外实验局项目测试,再到负责覆盖2.5亿用户平台级App及相关产品测试的能力提升;
- 从纯手工功能测试,到JMeter+Ant脚本实现接口自动化测试,再到Python开发接口自动化测试框架并带领团队开发全自动无人值守的App crash、内存泄漏等自动提单系统的技术栈升级;
- 从普通测试工程师到测试团队leader再到测试总监的职位升迁;
- 从无名小辈,到被开发评价为“你是我见过最牛X的测试”,再到 MTSC2020Live大会讲师的影响力扩大。
以上经历在伴随我成长的同时,也让我积累了丰富的测试经验。我自认为是一个非典型测试人员,我的职业历程可能对你没有什么借鉴意义,但是我踩过的坑,相信一定会让你少走一些弯路,我分享的测试经验,定会让你在测试的道路上走的更加稳健。
1. 写作初衷
专栏名称“接口测试之代码实例21讲”,其中包含两个关键词:“接口测试”、“代码实例”,接下来,就说说我为什么将这两个维度结合在一起写这个专栏。
1)为什么写“接口测试”
之所以选择接口测试作为我第一个专栏的写作方向,主要是因为,以我多年的工作经验,接口测试投入产出比相对较高,在业务中具有非常大的价值。
多年前,我刚入行移动互联网时,遇到过一个至今让我记忆犹新的线上故障,因为App启动时调用的api返回参数值类型由数字 1 被修改为字符串’1’,而App未对api下发的参数值类型做容错处理,导致App启动即崩溃,虽然第一时间修复了api的问题并上线,但是对用户已经造成了非常糟糕的用户体验。导致这个故障的原因现在想来简直低级的可笑,但是如果当时有严格的接口测试,我想也不会出现这个线上故障了。当然,自此事件之后,我们在质量保障流程建设、测试技术能力提升等方面做了很多的工作,真正将“敬畏线上”的质量文化融入到我们的工作中,并且将“保障产品质量、捍卫用户体验”写入到部门及岗位职责里面,作为每一位测试同学必须践行的使命。
❶接口功能测试价值
除了上面的所讲的类型转换的bug之外,测试阶段接口的bug就更是不胜枚举了,举例如下:
- 不符合接口规范,如提交数据通过GET方法实现等
- 参数是否必填的判断错误,如要求必填的参数如果不填直接报错或没有任何提示
- 请求参数输入非约定的参数值或特殊字符,接口处理异常
- 接口提交数据未写入数据库或写入字段错误
- 接口逻辑处理异常,返回错误
- 接口未向上一版本兼容
- ……
上述接口相关的bug,有些虽然通过客户端测试也能够发现,但定位问题就需要花更多的时间,另外,有些bug可能并不能通过客户端测试过程中发现,使得这些接口问题遗留在系统中,成为不定时炸弹,形成潜在的质量风险,还有,如果代码不符合规范,后期的迭代维护难度也会增加,“可维护性”也是衡量软件产品质量好坏很重要的一个特性。
❷接口自动化测试价值
针对上面提到的接口返回类型错误的线上bug,如果有接口的自动化测试并有对应的检测接口返回值数据类型的case,这个问题在测试环境就可以及时发现,也就不会对线上用户造成影响,另外,就算自动化测试case中没有针对这个返回值数据类型校验的case,导致线上出现这个故障,那么故障修复后,也可以通过自动化测试case快速回归测试,验证修复缺陷的代码修改对接口其他功能是否产生了影响,也即:
- 接口自动化测试可以发现接口失效bug,保证接口质量
- 接口自动化测试可以快速回归测试接口功能,提高上线效率及可信度,从而提升整体研发效率及质量
❸接口安全测试价值
专刊第五章节将要讲到的sql注入漏洞、文件上传漏洞、1分钱支付漏洞、越权漏洞等等都是本人测试中实际出现过的bug,这些bug如果出现在线上,将可能给公司造成巨大的经济和声誉损失,在接口测试阶段,我们设计一些针对性的安全性测试用例,就能有效降低这些安全风险。
另外,虽然客户端会对用户输入等做一些限制,但如果有人绕过客户端,直接访问api,就可能会存在一些安全风险,因此我们非常有必要对接口进行安全测试。
❹接口性能测试价值
大型互联网应用,用户访问量往往都非常大,比如618、双11电商节,或者秒杀活动等场景,流量会比往常大很多,这时候如果性能存在问题,轻则用户无法访问、下单,重则会出现订单与库存数据不一致、商品超卖等业务逻辑问题(这些业务性能问题我们在第六章接口性能测试–应用性能实例中会进一步举例分析),通过性能测试,就可以及早发现性能问题及业务逻辑问题并优化,确保应用访问及业务逻辑等均正常。
另外,通过对接口进行疲劳强度等类型的性能测试,可以保证接口服务的稳定性以及可靠性,从而降低因服务宕机等造成的业务损失及用户流失等风险。
还有,在接口性能测试中,如果经过我们测试,发现了系统的性能瓶颈并对性能故障进行诊断、分析,协助开发进行优化,TPS 由 100 上升到 1000,响应时间由 200ms下降到 50ms,CPU 使用率由90%下降到 50%,这些都将极大的提升用户体验,并减少服务器运维成本,这也是接口性能测试的价值。
2)为什么写“代码实例”
随着测试经验的积累以及测试的不断深入,我越来越觉得不会写代码,不了解代码的实现逻辑以及架构的设计原理,纵使你再精通测试用例的设计方法,测试也只是浮于表面,具体表现在:
-
不会写代码,很容易被动的跟着开发的思路走,开发说什么就是什么,测试缺乏独立思维,就很可能无法做到测试用例的全面覆盖而导致漏测,引发很严重的线上故障
-
不了解代码实现逻辑,即使接口出现问题也无法定位问题根因,无法给出问题解决方案建议,制定的bug预防措施也就缺乏针对性,更得不到落实
-
还有很重要的一点,不会写代码的测试人员很难成为一个真正牛X的测试人员,可以看看各大招聘平台测试相关岗位的招聘要求及对应薪资,不会写代码的测试人员几乎可以断定无法拿到30+的薪资,更是在职业生涯早期就早早的会遭遇天花板,甚至出现中年危机
反之,如果你会写代码,懂代码实现逻辑,在测试中就不光能发现问题,还能定位到问题根因,更进一步,你还能给出问题的建议修复方案,这样的测试人员哪个开发不喜欢?哪个团队不需要?还会觉得不被尊重、不受重视、低人一等吗?
基于上述原因,我决定自己手撕代码,开发接口代码实例,将导致bug的代码还原到你的眼前,让你真真切切体会到产生bug的代码是如何开发的,进而可以设计出相应的测试用例去验证是否存在bug或bug是否被修复。另外,在专栏学习过程中,你可以用我提供的示例代码进行练习,我相信你的coding能力也一定会有很大的提升。
2. 写作原则
本专栏的写作尽可能遵循如下两个原则:
- 双向互动
专栏文章不同于演讲、会议、直播等传播形式,其与电视、广播一样,本质上属于单向媒介,缺少双向互动。为了能降低这个影响,我在每一章的其中一节中增加了一些需要你来参与完成的任务,比如试着写一段代码或者补充一些测试case,引导你来思考,让你在阅读专栏文章的同时更有参与感,同时我也希望你在阅读文章的同时,将你的感受、收获抑或对文章的吐槽留在文章下方的留言区,来与我互动交流,希望通过这种不一样的方式,让文章阅读起来更有意思。
- 通俗易懂
文章在写作过程中尽可能将一些晦涩难懂的测试专业术语以及概念用我理解之后的语言重新表达,通过一个个实例,一段段代码,从原理上将接口实现以及接口测试过程讲清楚,既追求通俗易懂、又不失严谨。
3. 内容简介
本专栏的正文内容分为五个章节,总共 21 篇内容,包括接口测试需要掌握的相关基础知识、测试用例设计方法、自动化测试、安全性测试、性能测试等,系统性的讲述了接口测试的方方面面,每一章节都有代码实例来剖析其原理,这些代码大部分基于Python,还有一部分php及JS、html,编码小白也可以很容易上手练习,代码已全部上传到GitHub(GitHub地址参见附录1),订阅专栏即附送全部章节源代码(实际上,代码已开源在GitHub,不订阅专栏也可获取,但代码与专栏文章内容是高度关联的,没有文字说明,代码也就是一段代码而已,无法理解其原理,无法获知测试用例设计的过程,也无法获知文章中提及的相关缺陷的修复及预防措施)。
我相信:知其然知其所以然,测试必将无往而不利。
专栏相关的代码具有如下特点:
- 先代码实例揭示实现原理,再设计测试case验证,最后,给出bug修复及预防建议
- 贴合实战,数据库密码加密,api返回Json包含code自定义状态码等都与实战几无二致
- 完整项目,提供了简易电商系统的业务流程设计、接口设计、数据库设计文档及前后端代码,可直接搭建起电商网站实操演练
各章内容简单介绍如下:
1)第二章 接口测试基础
主要介绍了接口测试的基本概念、接口的请求模型、接口url组成等内容以及接口测试中涉及到的功能测试点、异常场景测试点、安全测试点、性能测试点等关键测试点,还包括http请求过程,Postman工具的使用等内容。
2)第三章 接口测试进阶
主要介绍了接口认证鉴权、数据加密、数字签名等相关的内容,并通过Postman工具模拟了客户端调用api的过程,这些知识是做接口测试必知必会的核心内容。
3)第四章 接口自动化测试
主要介绍了基于Postman工具以及通过Python语言开发测试框架实现接口自动化测试的过程,同时介绍了基于Jenkins构建工具进行持续集成的内容。
4)第五章 接口安全测试
主要介绍了sql注入、上传漏洞等接口常见安全问题,分析了安全问题产生的原因、并以示例演示如何进行针对性测试,同时,分析了相应的预防措施,另外,还介绍了业务逻辑相关的越权访问、1分钱订单支付漏洞等接口安全测试内容,以实例演示了业务应用中接口的逻辑安全漏洞,并给出了建议的风险防范措施。
5)第六章 接口性能测试
主要介绍了性能测试的基础理论以及性能的相关指标、性能测试工具JMeter的使用、性能测试脚本开发等相关内容,并以电商项目为例,实战演示了业务应用中的大并发场景下商品超卖的业务逻辑问题。
6)各章节补充内容
除了上述内容外,还有如下补充内容:
- 每一章后面都有一节“面试常见问题”,精心挑选了面试官最喜欢问的一些接口测试相关的面试题,并给出了参考答案
- 附录一:提供了专栏文章中涉及到的所有工具的官网下载地址以及安装步骤,并提供了专栏涉及的5个示例代码的GitHub地址,以及其中4个Python语言代码库的Python依赖库,可通过命令直接安装
- 附录二:提供了简易电商系统的业务流程设计,接口文档,数据库建库以及数据初始化脚本
4. 适用人群/面向读者
- 在校或应届毕业生
- 有一定经验的测试人员
- 测试经理、测试leader等测试管理者
- 接口开发人员
无论你是上述人员中的哪一种,相信在文章中均可以找到你对你有价值的点,你可以选择性的进行阅读。
购买本专栏你得到的不仅仅是7万多字的专栏文章和5个GitHub项目,更重要的,你将加入一大群志同道合,同样爱学习、钻技术的优质测试人的圈子,同时还有和作者以及作者的大咖朋友们互动交流的机会。
本着测试人员严谨求实的工作作风,文章写作及上线前虽然有多次校验,但如果你在阅读时仍然发现其中存在问题,欢迎你在文稿下方的留言区留言或添加我的个人微信私信将问题反馈给我,我将尽快修正。如果你在阅读时有测试技术、理论、原理等方面的疑问或者困惑,也欢迎留言给我,这是个难得的探讨的机会。
最后,衷心希望你能从我的专栏中有所收获。
我的微信如下:
关注公众号,更多精彩