携程Mock本地化实践

标签: 携程 mock 本地化 | 发表时间:2020-03-22 10:16 | 作者:Peter Sun
出处:https://www.infoq.cn

一、引言

这里说的Mock指的是系统测试或者接口测试场景下,模拟被依赖的其他服务接口进行响应返回的工具。测试人员通过服务接口级Mock的手段隔绝真实外部依赖,创造可控、稳定的测试运行环境,以提升问题的查全率和查准率。

然而,随着业务的发展和微服务化的进程,我们系统的结构越发的庞杂,Mock工具的实际效果开始变得差强人意。这里给大家分享我们遇到的挑战以及解决思路。

二、问题的出现

随着业务发展和微服务化进程,系统结构越发庞杂。服务化场景下使用Mock,有两个问题开始浮现出来。

1)工作串扰,启用Mock影响其他应用的测试工作

理想中的场景:

操作注册中心,使依赖指向Mock服务。

现实中的场景:

通过注册中心切换被测应用的依赖指向到Mock服务的动作,同样会影响到环境中其他应用的依赖指向,引发串扰(上图中应用B受到影响)。

PS:有被问及为何不调整被测应用的代码或者配置指向目标Mock,避免串扰其他应用。这种入侵代码的手段是下策。常在河边走哪有不湿鞋,总会有忘记改回来造成生产事件的时候的。

2)生效延迟

Mock的生效依赖注册中心的服务注册生效过程。由于缓存的存在,实际的生效时间是无法确定的,存在几秒到几分钟的延时。

对于功能测试场景而言,这些延时并无大碍,而在接口自动化测试场景中,这些延时将导致结果的不稳定性激增。为了避免延时带来的不确定性,通常会在测试框架中添加隐式等待的机制,重试调用被测接口,直到期望结果的出现,或者在达到最大等待时间后抛出异常。这么做的代价是测试执行效率的牺牲。在case数量很大时,这累计起来的等待时间就让人有些痛苦了。

现在问题比较清楚了,由于Mock的生效过程依赖服务架构中的“注册中心”,所以导致了Mock的串扰和延迟的出现。看着不是大问题,但确实用着不舒服。抽象一点说就是,“测试的过程依赖了被测系统的一个基础组件,造成测试执行稳定性的下降”。

三、解决思路

1)Mock 边车化,为应用提供本地化的Mock,使Mock同具体服务架构解耦。Mock一对一服务被测应用,以隔绝多应用间串扰的可能。

2)Mock 的启用和断开,通过控制被测应用所在JVM代理相关系统变量进行。即Mock的存在对应用透明,不依赖服务架构也不侵入应用代码和配置。

下图展示了应用与Mock的概要部署关系:

解决方案概述

上述问题的解决方案由四部分组成——servlet agent、本地 Mock代理、Mock server、Mock 配置客户端。

  1. servlet agent(开关):设置被测应用所在JVM的网络代理相关系统变量,导出应用对外请求,转发至“本地 Mock代理”。同时提供API供“Mock配置客户端”调用,以供人员或者脚本控制Mock的链接可断开。就是被测应用Mock与否的热开关。如图:

  1. 本地 Mock代理(桥梁):根据自身维护的路由配置转发请求至Mock server或者原始目标服务器。同时提供API供“Mock配置客户端”进行路由表的配置。在Mock启用的状态下,作为被测应用到Mock服务或者真实依赖之间桥梁。如图:

  1. Mock server:就是原本意义上的Mock。根据Mock的配置内容进行具体response的返回。市面上也有不少开源的Mock工具可以放在这块来用,最好选择提供了API供外部调用进行设置的。这样跟“Mock 配置客户端”对接起来工作量就很小了,在方案中的位置如上图。

  2. Mock 配置客户端:提供简单的API,在方案中的问题如上图。

  • 供测试脚本调用,在测试脚本中直接控制Mock的链接,断开,启动,停止,和具体Mock的设置。
  • 供GUI工具调用,让测试人员可以控制Mock行为。

最终对测试脚本暴露出来就是这个“Mock配置客户端”吐出的具体API。这部分可以发挥想象力,结合具体场景包装的使用起来方便些就行了。

Mock的开关和配置过程简图:

Mock打开时的依赖请求过程简图:

四、小结

我们通过使Mock本地化,给Mock加开关(servlet agent),做桥梁(本地Mock代理)的方法解开了Mock工具同服务架构之间的耦合关系,解决了启用Mock时的串扰和延时问题。

我们发现这个方案存在一定的普适性,未来可以考虑把Mock开关从 JVM层(servlet agent)下降到系统层,那么也就具备了服务其他语言应用的能力了。

作者介绍

Peter Sun,携程高级测试经理。

本文转载自公众号携程技术(ID:ctriptech)。

原文链接

https://mp.weixin.qq.com/s?__biz=MjM5MDI3MjA5MQ==&mid=2697269453&idx=2&sn=4062e1028d0bedab3ba9b4bc6b044c77&chksm=8376eff9b40166eff5ceeab6aea2be9917e8d5559c4101a28b9cd165b42f9aed16f4b5435d3f&scene=27#wechat_redirect

相关 [携程 mock 本地化] 推荐:

携程Mock本地化实践

- - InfoQ推荐
这里说的Mock指的是系统测试或者接口测试场景下,模拟被依赖的其他服务接口进行响应返回的工具. 测试人员通过服务接口级Mock的手段隔绝真实外部依赖,创造可控、稳定的测试运行环境,以提升问题的查全率和查准率. 然而,随着业务的发展和微服务化的进程,我们系统的结构越发的庞杂,Mock工具的实际效果开始变得差强人意.

8个纯CSS编写的手机设备Mock Up模型

- - 设计达人
很多设计师在交付设计稿给客户预览时,都喜欢把自己的作品放在一些手机模型或电脑模型上演示,这样可以让客户看到最终的效果输出,所以MOCK UP我们应该收藏一些,在今天的文章中,我们分享8个纯CSS编写的手机设备Mock Up模型,手机品牌有很多哦,如:iPhone5S/5C、诺基亚的Lumia 920、HTC、三星等等,下面一起看看介绍.

经验复盘-使用docker方式搭建mock数据平台

- - 掘金 架构
「Offer 驾到,掘友接招. 我正在参与2022春招系列活动-经验复盘,点击查看  征文活动详情. 我们在进行前端开发时需要后端提供相应接口,这样我们需要等后端开发完毕后才能进行开发. 这样的话大大影响我们的开发进度,一般情况下我们只需要让后端提供接口文档即可. 但是如果想测试交互的话就需要自己mock数据了.

“携程们”的危机

- - 派代网 - 资讯
今年的在线旅游市场,热度绝对不逊于电子商务的任何一个领域. 继6月份艺龙、芒果网、酷讯网和途牛网等在线旅游网站陆续推出“返利促销”优惠活动之后,在线旅游行业老大携程也加入了这场混战:7月6日,携程宣布投入5亿美元(约合32亿元人民币)开展低价促销,促销活动从7月起持续一年时间,涉及酒店、机票和旅游门票等,并宣称此次促销将“拉开国内在线旅游业以价格战为前奏的洗牌大幕”.

爬取携程信息

- - IT瘾-geek
print("评分为:{}".format(userRating)). print("评论内容为:{}".format(commentText)) '''. 数据库操作 ''' #获取数据库链接 connection = pymysql.connect(host = 'localhost',.

Pokki – 本地化网络应用 | 小众软件 > 桌面工具

- dokie - 小众软件
Pokki 是一个建立在Chromium之上的框架,它让开发人员可以使用标准Web技术来构建应用程序. 某种意义上说, Pokki 就是本地化的 Chrome 扩展. Pokki 现在可以为用户提供8个应用程序,包括 Gmail、Facebook、Groupon、eBay、华尔街日报、Living Social 和 Twitter.

HTML5和本地化的对比:移动应用之辩

- Sai - 译言-电脑/网络/数码科技
来源HTML5 vs Native: The Mobile App Debate. 移动应用和HTML5是目前最热门的两种技术,其彼此间存在着大量的重叠之处. Web应用运行在移动浏览器上,而且它们也可被重新包装成运行在各种移动平台上的本地化(native)应用. 有着对范围广泛的各种平台的支持,结合了移动浏览器威力十足的强大功能,开发者正转向HTML5这一被称作“一次编写,多处运行”的解决方案.

本地化电子商务的未来=Facebook + Foursquare + Yelp + Groupon

- xinquan - 36氪
编者按:本文由Zong创始人兼CEO David Marcus投递. Zong是Facebook Credits、AT&T以及很多先进网站和移动应用的移动支付服务提供商. 大肆炒作,疯狂估价,加上社交、地理定位、点评和团购释放出来的魅力,使得整个市场全面兴奋. SecondMarket对Facebook的最新估值约为300亿美元,Foursquare虽然尚处于天使投资阶段,但已经获得2000万美元投资,1.15亿美元的投资后估值,Yelp,去年年底拒绝了Google 5.5亿美元的收购,已经获得超过2500万美元投资,估值没有公开但非常高,Groupon获得1.35亿美元投资,估值高达13.5亿美元.

几款移动互联网时代的本地化应用

- WanZheng - 爱范儿 · Beats of Bits
从未想到基于手机的生活方式会变成这样,也没想到手机会变成如此的重要. 变化如此之快,真的难以想象,这就是移动互联网时代的移动生活. 大家都知道移动互联网是一座金矿,而且很多的互联网从业者或者是爱好者已经投入到挖矿过程当中. 在这样的时代背景下不断产生很多有价值的商业模式和很 Cooool 的产品,而且它们在不断融入到我们的生活当中.

美国博客称苹果应在中国实现本地化

- 小熊TONY - cnBeta.COM
美国科技博客Business Insider今天刊文称,iPhone的中文输入法并不适应中国用户的需求,而苹果尚未意识到在中国等市场实现本地化的重要性.