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

简介: 作为一名测试,我们知道不是任何情况都可以用真实对象来测,比如我们要测一个地方PM2.5超过900的情况,我们不能每天等着PM2.5的指数超过900再测试,这个时候可以用一个虚拟对象来创建测试,做一个Mock。
导读:作为一名测试,我们知道不是任何情况都可以用真实对象来测,比如我们要测一个地方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的返回值。

PDF下载: 点击附件下载

直播回顾: 点击查看
相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
相关文章
|
22天前
|
传感器 数据采集 监控
LabVIEW电池管理系统测试平台
LabVIEW电池管理系统测试平台
22 4
|
2天前
|
测试技术
Mock测试的重要前提是什么
Mock测试的重要前提是什么
|
1月前
|
人工智能 分布式计算 DataWorks
首批!阿里云 MaxCompute 完成中国信通院数据智能平台专项测试
2024年5月31日,在中国信通院组织的首批数据智能平台专项测试中,阿里云数据智能平台解决方案(MaxCompute、DataWorks、PAI)顺利完成测试。
137 5
首批!阿里云 MaxCompute 完成中国信通院数据智能平台专项测试
|
16天前
|
前端开发
什么是 Mock 测试?
Mock 是在前后端分离开发中,用于模拟后端数据的工具,让前端能提前开发而无需等待真实接口。它的重要性在于加速协同开发,避免因数据延迟导致的阻塞。通过工具如 Apifox,可以创建请求,设定 Mock 参数和测试脚本,进行 Mock 测试以确保数据符合预期。了解 Mock.js 语法有助于更好地进行 Mock 测试。
|
1月前
|
Linux 测试技术 开发工具
CentOS Linux 8使用阿里源(安装jdk11、git测试)
CentOS Linux 8使用阿里源(安装jdk11、git测试)
169 1
|
23天前
|
传感器 存储 数据采集
LabVIEW阀性能测试平台
LabVIEW阀性能测试平台
16 0
|
1月前
|
消息中间件 Kubernetes Kafka
AutoMQ 自动化持续测试平台技术内幕
Marathon 是一个针对流系统 AutoMQ 的自动化持续测试平台,旨在在模拟生产环境和各种故障场景中验证 SLA 的可靠性。设计原则包括易拓展、可观测和低成本。平台采用分布式架构,Controller 负责资源管理和任务编排,动态调整 Worker 数量和配置,而 Worker 是无状态的,用于生成负载和上报数据。系统基于 K8S,利用服务发现、事件总线和 Spot 实例降低成本并提高弹性。测试场景以代码形式描述,支持不同流量模型和断言,提供丰富的可观测性和告警功能。未来,Marathon 有望泛化为适用于各种分布式系统的测试平台。
32 0
AutoMQ 自动化持续测试平台技术内幕
|
1月前
|
测试技术 UED
Mock 工具使用 - 模拟弱网测试
在移动互联网时代,弱网测试至关重要,尤其面对多样化的网络环境和应用场景,如2G, 3G, 4G及弱信号WiFi。弱网通常指低于3G的网络或弱信号WiFi。Charles工具能方便地模拟不同网络条件,包括带宽、丢包和延迟,以进行功能测试和优化用户体验。通过Proxy -> Throttle Setting启用限制,选择预设或自定义参数(如下载速度、带宽和延迟)进行测试。通过基础模拟和定制设置,确保移动端应用在弱网环境下的稳定性和性能。
32 1
|
29天前
|
jenkins Java 测试技术
电商返利平台的测试与持续集成
电商返利平台的测试与持续集成
|
1月前
|
前端开发 测试技术
接口测试:Mock 的价值与意义
Mock测试用于替代复杂或不可用的对象,常见于前后端交互、第三方系统及硬件解耦。它不依赖真实数据,节省工作量和联调时间。核心包括匹配规则(决定修改哪个接口)和模拟响应(设计篡改内容以符合测试用例)。
20 0

热门文章

最新文章