导读:作为一名测试,我们知道不是任何情况都可以用真实对象来测,比如我们要测一个地方PM2.5超过900的情况,我们不能每天等着PM2.5的指数超过900再测试,这个时候可以用一个虚拟对象来创建测试,做一个Mock。如何构造Mock使用场景?如何使用Mock提效,不用老加班? 11月2日,阿里巴巴研发效能事业部-云效平台技术专家孙琛,在云效Work Like Alibaba系列直播上,结合视频演示为大家分享了Mock平台的功能实践,让大家在测试开发过程中用Mock提效。
为什么会需要Mock?
传统架构下的一些银行、保险、证券等金融类客户,存在很多的第三方的接口会用于代付、转账等,当对方提供的测试环境不稳定时,我们自身的研发效能就会受到影响。比如说联调,如果对方系统挂了,我们肯定要Delay一天,这种环境不稳定的情况是传统架构比较容易出现的。还有种情况,假设我们要测一个账户,他一天内有100多次转账记录的数据准备,如果让银行准备的话,可能会拿这个用户来回来回转账,会非常麻烦。
另外,现在比较流行的互联网架构下,有一种分布式实践,就是把自己的业务拆成很多的服务,有提供者、消费者,粒度非常细。例如下图,有非常复杂的依赖关系,在开发过程中,如果同时让菱形和三角形来开发,那在三角形还没有准备好的时候,我们怎么保证菱形的业务能正确走下去?还有一种现在比较提倡的前后端分离,如何在后端代码还没有准备好,或者说接口还没有提供出来的时候,可以先做前端页面的一个逻辑?这些是Mock需要解决的问题。
Mock解决方案
1.Mock解决不稳定的问题。Mock服务非常简单,没有业务逻辑,所以它足够稳定。比如说银行那边的接口挂了,全都接到Mock平台的话,所有的请求权会从Mock平台出,而不会跟银行的接口有什么关联。
2.快速构造复杂数据。我们可以自定义一个返回结果,有了自定义的返回结果后,就可以构造非常复杂的数据,不需要银行或者其他第三方给我们准备数据,完全可以用我的数据在返回里面把它定义好,再继续做业务的一个验证。
3.快速构造异常场景。对于一些异常的情况,比如网络延迟高,或者返回特殊异常的时候,也可以用Mock来构造。
服务端Mock平台
服务端Mock平台主要是在服务调用者和服务提供者中间,让调用者不再直接调用那个提供者,而去调用我们的Mock平台,目前Mock平台支持Http、Dubbo、Sofa、Hsf(Edas)。Mock能让测试以及联调不受环境的影响,提升研发测试效率,并且对于开发也没有任何侵入性,不需要额外编写代码,只需要在页面配置就可以完成接口的Mock,同时也可以支持一些业务复杂情况下,在Mock里模拟各类场景。
Mock平台基础功能
  • 多协议支持:Http(s)、Dubbo、Sofa、Hsf(Edas),还有一些rpc的请求。
  • 多格式支持:支持一些常见的Json,Xml,还有其他一些自定义格式都是支持。
  • 标签化:对管理来说,有一个标签化的管理,能快速定位到我们需要的Mock。
  • 动态表达式:如果我们希望返回结果不是最简单的,就这么一个静态文本,我们希望是它可以输出当前的日期,或者是一些简单的逻辑运算,希望他有一个最简单的动态化的功能,或者再简单的举个例子,就是说我们希望他跟入参会有一些互动。
  • 多端口:支持任意端口请求,避免开发修改代码。
  • 异常Mock:Http异常Code,Rpc异常类
以一个Http的例子来做一个演示。
这是一个获取天气的接口,比如说我传city=杭州,它就会返回杭州的天气情况,比如温度、pm指数等,这个很常见。假设接到的需求要模拟pm2.5超过900的情况,看下我自身的业务逻辑会怎么走?我们不能每天在那里等pm2.5超过900才去做测试,所以可以做一个Mock。
我们新增一个天气的Mock,然后选择Http,填个Mock名字,然后API的话,把接口url填这里。那返回值的话,我们可以先从真实的返回值里面做修改,把真实调用的返回结果拷贝下,我们希望pm2.5非常高,那把原先的pm2.5值修改为999。这样子的话,一个最简单的Mock就定义好了。
我们接着做一次对域名的切换,比如说原先是指向真实的服务器,现在改成我们的一个Mock服务器,我们把这个域名指向Mock服务器,然后再做次刷新,可以看到pm2.5就变成999,我们的Mock就生效了,这就是一个最简单的Http的Mock使用场景。
Mock平台高级功能
基础功能基本上可以解决大部分的日常使用问题,Mock平台还有一些比较高级的特性。比如说我们 支持动态Mock。当我们需要写一些很复杂的逻辑时,例如:希望当参数没传的时候,返回一个error信息,我们可以在这里用Java的一个返回结果,然后在这里写具体的一个脚本。比如说city=杭州。
这就是举一个最简单的例子,你可以在这里写任意的一个代码。
然后再讲一下 匹配规则。比如说当city=罗马的时候,我们会输出一个失败,因为还没有罗马这个城市的支持情况。当Admin来访问的时候,我们会打出另外一种情况,这里大家注意到有权重的问题,就是说当Mock匹配到了以后,它会以权重值来决定它的优先级。比如说当city=罗马时,它会说我们还不支持的城市,但是当city=罗马&admin,会输出管理员你说了算,因为管理员的权重比罗马要高。这就是一个匹配规则。
前置步骤:主要是做一些自定义的解析。比如在前置步骤里,我先定义一些变量,比如说a=hello,那可以直接在表达式里面直接引用这个a。"你说了算${a}",最终输出为"你说了算hello",这就是前置步骤的一个用法。
Mock录制:你可以在没有任何Mock的情况下,先把你的域名绑定到Mock平台,它会先请求Mock平台,然后把你的入参拿到一个真实的服务器平台去请求,拿到一个具体的返回值,这样有了入参和返回值,还有具体的API后,就会生成一个具体的Mock。这在初期快速建立Mock的一些数据的时候会用到。
 
内置模块:主要是基于动态Mock的基础上,我们内置了很多模块:随机字符串,Json或者Xml的解析,Http调用,数据库等。
回调:有些服务希望在Mock请求到以后,由Mock发起一个新的请求到一个具体的地址,做一些回调用。
这里有个报文的演示。
一般情况下会用的比较多。比如说参数是一个很大的报文,结果里面也是一个报文,但是返回结果里面的某些值,假设这个返回结果的这个城市,它需要根据入参的城市来做一个定义,就可以用这种形式。
比如再看这个例子,可以看到它的包里是这么一个报文,Mock以后,就是我们Mock它的一个报文。刚才看到,城市是可以动态的根据入参报文的那个动态修改,比如说查看北京的,那它就会报北京的数据,对于金融类企业,这种是比较有用的。
常见问题
问1:如果我希望不同的入参,能返回不同的值,那我们具体要怎么做呢?
答1:其实Mock平台是支撑三种不同的做法。一个动态表达式,还有编程模式,还有匹配规则,那这三个分别在什么场景下用呢?
动态表达式比较适合于你的返回值是一个模板,就是有模板可套的,比如是一个很大的报文,只是里面状态或者说里面的code,会随着入参的不同而不同。在这种情况下,你完全可以把入参中的code或者是状态,用动态表达式的方式来做。
第二种就是它的返回值完全不一样,就完全不是同一套模板,格式也可能不一样。这种情况下,可以用之前的if else来写,比如说当入参等于多少的时候,你返回这样一个模板。
第三种情况,就是当你觉得写代码比较困难,或者觉得没必要的时候,可以用匹配规则。比如说入参等于多少的时候,你可以设置一个规则,它返回什么样的参数,当入参等于另外一个规则的时候,返回另外一个参数。
以上三种情况可以根据具体情况结合操作。
问2:用了这个Mock平台以后,开发代码要怎么配合修改呢?
答2:我觉得开发代码一般情况下是不用改的。对于http类型,开发经常会用一些域名加端口加API的方式访问,你完全可以把API配到Mock平台上,然后通过修改这个域名对应的host,或者说DNS来切换一个真实的测试环境和Mock环境。对于rpc类型的话,我们一般会有自己的一些配置,会选择直连一个提供者,他可以把提供者的IP,也就是Mock平台的IP配进去。
问3:假设我是同一个接口,然后我有不同的项目在并行开发,但我希望A项目的调用,返回的是A,B项目的话返回是B,那我们Mock平台,只能配一个Mock怎么办?
答3:这里可以用IP来区分,我们可以用匹配规则的IP属性,当IP等于A项目,我们可以给它返回A项目的一个数据,如果IP是B项目,那就是返回B项目的一个数据。
问4:对于rpc请求,可能就是把API包上传到mock平台上。有些同学可能会说他的API包,不在一个里面,是分散到各个Jar包里面的怎么办?
 
答4:我们其实也考虑到这个情况,让那个Jar包管理模块里面有一个添加依赖的方式,你可以把多个Jar包同时上传到平台上。
问5:假设我现在刚开始做,只需要Mock服务里的一个方法,怎么办?
答5:这个不用担心。比如说你有5个方法,你只实现了其中1个Mock方法,其余4个会真实调用你的测试环境,所以你可以理解这4个是不变的,只是某1个你用了Mock。
问6:可能会有一些同学发现,就是我Mock一个请求过来,可能会有非常多个Mock全都匹配到,那调用的时候到底调用哪一个呢?
 
答6:上面也说过,我们有一个匹配规则的权重,权重数字大的肯定会比权重小的优先调用,如果没有匹配规则的话,会有一个新旧的顺序,新的Mock会覆盖旧的Mock的返回值。

如何让测试少加班?阿里Mock平台使用方法揭秘!相关推荐

  1. 测试开发【Mock平台】06开发:项目管理功能(二)Atnd页面搭建经验实战与学习线路梳理

    [Mock平台]为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React 框架完成搭建一个测试工具平台,希望作为一个实战项目能为你的测试开发学习有帮助. 经过一段 ...

  2. 测试开发【Mock平台】04实战:前后端项目初始化与登录鉴权实现

    [Mock平台]为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React 框架完成搭建一个测试工具平台,希望作为一个实战项目能为你的测试开发学习有帮助. 一.后端 ...

  3. 鏖战双十一-阿里直播平台面临的技术挑战

    http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 前言:一直以来双十一都是以交易为重心 ...

  4. 关于NB-IOT模块链接阿里物联网平台的学习笔记-记录

    关于NB-IOT模块链接阿里物联网平台思路的学习笔记-记录 叙述 调试思路总结 调试过程 AT命令-方式一 AT命令-方式二 AT命令-方式三 软件 关于遇到问题 总结 叙述 前一段是写了一篇&quo ...

  5. 鏖战双十一:阿里直播平台面临的技术挑战

    " 一直以来双十一都是以交易为重心,2015年当然也是如此,但是这并不妨碍万能的淘宝将双十一打造的让用户更欢乐.体验更丰富.玩法更多样.内容更有趣.因此,2015年诞生了以直播为特色的游戏双 ...

  6. 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)...

    转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...

  7. mock平台架构及实现

    转载: http://blog.csdn.net/xkhgnc_6666/article/details/51757209 在测试过程中有些情况通过手工测试是无法测试出来的或是非常难复现,比如网络异常 ...

  8. 使用 Moq 测试.NET Core 应用 -- Mock 方法

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用Moq来Mock方法. 使用的代码: https://git ...

  9. 记一次telnet自定义端口不通(阿里云平台)

    防火墙关闭 设置自定义端口6000,netstat -an|grep 6000服务存在 服务器本地:#telnet ip 6000正常 外网:telnet 外网ip 6000无法访问 排查过程: 阿里 ...

最新文章

  1. Vue计算属性和监听属性
  2. TCP协议三步挥手与四步挥手
  3. Proxy Pattern using C# (转载)
  4. LeetCode 1678. 设计 Goal 解析器
  5. WPF入门教程系列十四——依赖属性(四)
  6. html中写meta会乱码,BeautifulSoup+Unicode,该死的html乱码,尽管在meta标记中指定了字符集...
  7. android studio 触摸锁,学习AndroidStudio布局,并编写一个图案解锁demo
  8. 非线性最小二乘通俗易懂解释
  9. GNU C的定义长度为0的数组
  10. C#Socket通讯之超时检测
  11. Web自动化测试:超详细的环境搭建步骤
  12. donet 微服务开发 学习-consul 服务端Api开发
  13. 2012最犀利语录大全
  14. PS小知识(三)——画圆滑线及虚线
  15. python入门到精通 _6文件读写
  16. SDN:简述对SDN架构的认识
  17. android 自定义热点区,Android 自定义View之中国地图热点区域分布
  18. 写英文IEEE论文的技巧
  19. 科学计数法和有效数字
  20. 采轩服饰工业园选择飞鱼星完成无线覆盖

热门文章

  1. 【檀越剑指大厂—NIO】NIO学习与使用
  2. 利用匿名管道向Android手机发送adb命令
  3. 启动hdfs时报错:hadoop102:ERROR:Unable to wirte in /opt/module/hadoop-3.1.3/logs. Aborting.
  4. mysql 列名大写_MySQL数据库表名、列名、别名区分大小写的问题
  5. Neutron 理解 (3): Open vSwitch + GRE/VxLAN 组网
  6. JavaSwing人事管理系统(Java课程设计)
  7. 单片机c语言孔雀开屏,单片机C语言案教程教学指南.doc
  8. OpenCV学习(30) 轮廓defects
  9. 最近/最远曼哈顿距离
  10. 强大的ANTLR4(1)