zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

方法测试平台阿里 如何 揭秘 mock 加班
2023-09-27 14:28:46 时间
导读 作为一名测试 我们知道不是任何情况都可以用真实对象来测 比如我们要测一个地方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异常类


这是一个获取天气的接口 比如说我传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下载 点击附件下载 直播回顾 点击查看
区块链交易所搭建开发_平台_测试_系统智能合约ATOM代示例 Cosmos(ATOM)没有传统意义上的原生智能合约,因为它没有自己的图灵完备编程语言。 相反,Cosmos 使用区块链间通信 (IBC) 协议来允许不同区块链之间的通信和价值转移。 这允许开发人员构建跨越多个区块链的去中心化应用程序。
开源测试平台横向测评系列『流马』篇:流马使用及总结 【使用篇】 ● 接口测试:创建接口(添加引用公共参数、添加引用自定义参数)、测试用例(参数关联)、业务流程测试实践 ● web自动化测试:元素管理(添加元素)、测试用例(添加元素)、设计测试场景 ● 测试计划、测试集合与测试用例相互之间的关系 【总结篇】 ● 使用总结:常见的使用注意事项,如变量引用、函数引用、关联参数引用等 ● 优化建议:结合真实使用过程,从用户角度出发,提出的7条优化建议 ● 优缺点总结:优点、缺点、评分(从不同角度评测打分)
云效平台 云效,是新型一站式研发效能平台,经过阿里巴巴多年先进的管理理念和工程实践沉淀,提供从 ldquo;需求- 编码- 测试- 发布- 运维- 运营 rdquo;端到端的持续集成持续交付服务,解决研发过程中跨角色、跨组织、跨地区的协作问题,助力企业研发效能体系升级。