接口测试入门课
15
15
1.0x
00:00/00:00
登录|注册

09 | 微服务接口:怎么用Mock解决混乱的调用关系?

轻量化启动和销毁
处理速度
简单性
学习成本
技术栈考量
设计经验
Mock框架选择
Mock服务
依赖关系
流水线自动驱动
解决方案
混乱体现
解决外部依赖阻塞项目进度的经验分享
混乱的调用关系
RESTful接口
微服务改造
选取和通过代码调用测试参数
测试脚本代码
测试辅助工具
思考题
微服务的接口测试
微服务接口
总结

该思维导图由 AI 生成,仅供参考

你好,我是陈磊。
欢迎你继续和我一起学习接口测试,到目前为止,我们已经学习了接口测试的逻辑模拟,也就是测试辅助工具和测试脚本代码,也学习了如何选取和通过代码调用测试参数,掌握了这些内容,你就算是一个接口测试的老手了。无论你的被测接口是一个你熟悉的协议,还是一个陌生的协议,它们都不会耽误你的工作进度了。
这节课是我们专栏的最后一节课,我想给你讲一讲关于微服务的接口测试。
现如今在我的工作中,我主要面对的就是微服务测试,每个服务都是 RESTful 接口。在最开始的微服务改造过程中,我的测试其实比之前的业务测试更容易,每一个接口通过测试框架来编写测试脚本就可以完成执行了,而且一次写完后再通过平台调用,也显得很轻松。但是这种美好的场景并没有持续多久。为什么呢? 你先听听我的故事。

微服务下混乱的调用关系

开发团队开始采用微服务架构开发系统的时候,我的测试团队也开始同步学习对应的测试技术,我也像从前一样,逐步封装自己的测试框架,并且采用 Postman 和 Python 代码,完成接口测试脚本的快速积累,同时引入了参数类,完成了 Excel 参数的封装调用。
在开始的一些项目中,只要开发工程师提交了代码仓库主干的合并请求后,除去代码的静态扫描外,持续集成平台会自动调取一个开源的智能化单元测试框架,来完成单元测试,通过后它会自动部署被测系统,然后再执行测试脚本,这整个流程全部是流水线自动驱动完成的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在微服务架构下面对混乱的调用关系时,如何利用Mock服务来解决服务依赖关系的问题。作者分享了面对微服务架构下的混乱调用关系时的困惑和思考,提出了使用Mock服务来解决服务依赖关系的问题。在选择Mock框架时,作者建议根据团队技术栈和维护便捷性进行选择,同时推荐了一种不需要编程语言的Json约束方式来快速开发和启动Mock服务。作者强调了Mock服务设计的简单性、处理速度和轻量化启动、销毁的重要性。最后,作者建议读者尽快掌握一个Mock服务框架,以便在混乱中理清思路,快速进行接口测试,交付高质量的项目。整体而言,本文通过作者的实际经验,为读者提供了解决微服务接口测试中混乱调用关系的实用建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《接口测试入门课》
新⼈⾸单¥29
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • aoe
    看到这篇,测试同学已经和程序员不相上下了。作为一名Java程序员,收获很多,十分感谢!也有几个问题请教您: 1. 测试的微服务混用通信方式(HTTP同步、消息中间件异步),这时除了使用mock服务器测试,是否也需要搭建“消息中间件”才能完成测试?还是可以用HTTP代替? 2. 老师在工作中是否遇到过对底层工具、核心类代码做“微基准测试”?如果有,一般哪部分代码需要进行此类测试? 3. 能否分享一下接口测试时常用的异常数据?例如:类型不一致、空字符串、超出长度、必传参数为空,SQL注入语句、传多个无效参数占用带宽、POST提交时包含10M+甚至更大容量的信息等。

    作者回复: 您好,您的问题我一一回答,希望有些帮助: 1. 测试的微服务混用通信方式(HTTP同步、消息中间件异步),这时除了使用mock服务器测试,是否也需要搭建“消息中间件”才能完成测试?还是可以用HTTP代替? 答如果仅仅是为了做Mock可以使用http代替,这里并不是说用MQ不好,如果这个事情是测试来做,很多测试并无法独立完成,因此这里以解决问题为根本出发点。如果测试团队技术比较好,那么使用MQ会更好。 2. 老师在工作中是否遇到过对底层工具、核心类代码做“微基准测试”?如果有,一般哪部分代码需要进行此类测试? 答:接口测试并不适合对底层工具或者核心类做测试,这部分只适合对外提供或者对内提供调用的接口,如果是对核心代码,建议还是使用单元测试,可是采用EvoSuite这个框架做一次批量单元测试。EvoSuite可以在我的Blog https://blog.csdn.net/crisschan找到,我对这个开源框架的使用有一些心德以及一些坑我都有记录。 3. 能否分享一下接口测试时常用的异常数据?例如:类型不一致、空字符串、超出长度、必传参数为空,SQL注入语句、传多个无效参数占用带宽、POST提交时包含10M+甚至更大容量的信息等。 答:异常我比较建议最开始使用边界值,例如整型的就包含了1,1.1,-1,-1.1,“asb”,null,True。先确定类型以及接口的程序中的约束,然后确定边界值,最后在完成测试入参组合,组合可以使用正交试验的方法,正交计算如果不是很熟悉(终归这个测试使用比较多)可以参考一下我写的正交试验的计算库:https://github.com/crisschan/TamanduaOATs,写的并没有那么好,是C++写的,但是可以使用,在您这样一个开发面前我有点班门弄斧。参数中是不是包含大容量的信息这些还是要看具体的参数要求,并不是一概而论。 谢谢您

    2020-02-19
    3
    23
  • OK,最后一节小结一下: 1:测试的痛点? 1-1:测试环境的搭建,微痛,一般都易解决 1-2:测试工具的搭建,稍痛,有现场工具也可以自己弄,关键是对接口的入参、出参、自动化的认识和积累,这是本专栏重点阐述和解决的问题 1-3:测试业务的积累,这个是一个针对简单业务不存在的问题,对于复杂业务需要不断积累的问题,对于接口测试比较难克服的问题,输入A返回B怎么判断这是一个OK的用例?复杂的接口,不敢说千变万化,不过一个接口可以有十几二十几中的输入又有十几二十几重的响应是很正常的,不了解业务基本判断不出来是否OK。这个每个企业的业务不同复杂度不同,不能一概而论,除了自己多和产品、研发以及其他了解的人多沟通,自己多思考多总结多积累,好像没有什么好法子,当然,如果项目文档比较完善也在持续跟进到是一种捷径 1-4:测试依赖问题,包括专栏里提到的外部服务依赖,另外就是测试数据依赖,目前我的经验是为了提高响应速度,微服务是依赖缓存数据进行计算的,不过缓存数据并不是从数据库直接放进去的需要经过复杂的计算,这种情况会到是测试链条拉长,需要配置数据刷新缓存,然后才能开始接口测试,有于业务本身的复杂性,不理解业务其实就是没法开展的。这个专栏里并未提到,我们目前的做法是隔离研发和厕所环境,测试环境的数据保持纯洁性,然后再进行定时任务的刷新,使依赖数据可以一直维持。 1-5:性能测试,接口测试功能OK,仅是其一,性能也很重要。也是接口测试内容,这个具体也有一些具体的方法和工具。并且有些问题仅通过功能测试是难以发现的,比如:线程安全问题,代码逻辑导致的性能差的问题。 2:专栏讲的核心内容? 2-1:利用工具提高效率,有现成用现成,没有就自己造 2-2:工具怎么造,封装、抽象、迭代,提高编码能力 3:有些收获,了解测试或者说接口测试思路,主要是时刻保持工具可复用化的观点。这个需要,工作生活中,养成这样的习惯。

    作者回复: 谢谢您的总结,开发、测试,生产一般都是三个环境,dev环境是开发owner所有我没有说,这些内容我在我的博客中有写可以开讨论一下,您在专栏的留言让我很是敬畏。您说的我很认同性能部分也是接口测试内容,最开始规划了,因为极客时间有了类似课程,这些都被砍掉了。未来我也会将这些砍掉的内容放到我的blog里面。谢谢您的支持

    2020-02-26
    2
    9
  • 每天晒白牙
    看到"挡板"这两个字,一下子勾起了我16和17年在一家第三方支付公司的经历,那时候也是需要依赖第三方,然后测试的时候需要让下游服务加个"挡板",那个时候听着觉得好玩儿,后面才慢慢知道就是返回假数据,也就是mock

    作者回复: 挡板我也是在银行或者第三方支付行业听说的。我们有了类似的经历。

    2020-02-21
    6
  • VeryYoung
    文中有提到一款智能化单元测试框架,能请问下该框架是哪个吗?

    作者回复: EvoSuite,是我稍微熟悉一点的,具体怎么使用已经使用中有什么坑,可以看一下https://blog.csdn.net/crisschan我的博客中里面是有详细的介绍的。

    2020-02-22
    2
    3
  • 蜡笔小新爱看书
    Mock服务,可以理解为Charles的Map Local功能么?

    作者回复: 也可以

    2021-01-01
    2
    2
  • sincoolvip
    快看完了再由衷的评价,此课程作为一个指引 ,是非常好的,可以看得出作者的测试开发功底,对于有基础的同学来讲,一个指引就够了。所以还是挺好的一个课程。

    作者回复: 谢谢您

    2020-05-12
    2
  • ZeroIce
    似乎问题很多都已经不属于接口测试的问题了😖

    作者回复: 恩,相信很多人都开始觉得测试做了很多不是测试的事情,但是随着devops的出现,做事情的边界已经和之前不一样了,现在开发、测试运维是一个team,大家统一的目标是交付一个高质量的项目,因此目前这些内容还是属于测试的工作。

    2020-02-19
    2
  • smallfish
    一个很有趣的观点,json、python和java的学习成本对比,其实我想表达一个观点,对于测试人员,java优势比python大,我的观点如下:1.java市场占有率太高,开发使用的大概率是java,而测试是和开发使用的同一门语言,就会有共同话语,这样开发就会更好沟通,提高测试效率;2.所谓【人生苦短,我用python】,但其实现在IDE工具很强大,只需要负责关系逻辑代码就OK,一个玩笑话:写ython的都是使用游标卡尺量间距;3.大量的测试工具,都是使用java进行开发的,对于后期的扩展,java拥有很大的优势;4.java的学习成本并没有老师你说的那么夸张,那是对于开发人员来说的,对于测试人员,学基础就够用了,和python我的感觉是差不了太多。 老师讲的mock使用这种场景,我的实际工作中并没有遇到过,我们提测都是一次所有微服务同时提测,不会存在依赖性的服务,一个提测一个没有提测。但实际工作中mock服务还是很有用途的,我是这么使用的,是在开发开完接口设计评审和输出设计文档后,mock出接口,编写测试用例时,可以进行模拟调用,测试一下自己的用例是否OK。但老师讲的这个也是一个思路,可能有些公司会遇到这样的问题吧。

    作者回复: 感谢您的留言,其实怎么做解决问题才是主要的。java、python、go选哪种语言不是很重要。重要的是解决问题的思路。

    2020-03-22
    1
  • random0
    请问老师,如果已经通过mock服务测试完成,此时其他服务也已经正常,这时仍需要按正常流程回归一遍吧?

    作者回复: 最后的集成测试还是要有的

    2021-03-03
  • 捷后愚生
    本文总结 为什么需要mock? a服务--b服务--c服务,需要测试a服务,但是b服务或者c服务有问题,不能返回报文或者不能返回正确的报文 a系统--b系统--c系统,需要测试a系统,但是b系统或者c系统有问题,不能返回报文或者不能返回正确的报文 所以需要一个工具模拟返回的报文,这可以保证a能顺利的测试,这就是mock服务或者挡板工具。 怎么选取mock工具? 1.学习成本低、上手快并且完全适合你自己技术栈的 Mock 框架 2.Mock 服务容易修改和维护 3.处理速度快 4.Mock 服务要能轻量化启动,并且容易销毁 除了老师提到的mock工具,其实fiddler也是可以做mock测试的,老师怎么看?

    作者回复: 很棒,谢谢

    2020-11-28
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部