背景

闲鱼作为一款垂直交易社区APP,拥有复杂多样的业务场景:涉及c2c、回收寄卖、租房租赁、见面交易、验货担保等,复杂多变的交易模式。比如验货流程:
  • 涉及39个状态机节点
  • 横跨10+应用系统
  • 涉及6个业务部门的合作
  • 涉及接口几十个

需要保证每个接口、每个场景切实可行,稍微有一点点问题,就会涉及到人民币的味道,实际工作中,我们遇到各种各样的问题,比较棘手的问题如下:

问题

业务先赢的快速迭代模式下,全靠人工主力进行测试验证,测完新功能,还得回归老功能,一个小需求也须要好几个人日,版本PTM也要回归好几遍,ROI并不乐观,以下2个问题比较突出:

  1. 交易业务强依赖中台,沟通成本高,跨团队协作难,迭代效率低,测试环境下如何自洽?
  2. 复杂多样交易模式下,如何支撑需求稳步迭代上线以及日常回归验证?

测试策略-自动化

闲鱼质量基建正在快马加鞭进行中,针对闲鱼多样的交易模式,全靠人力是不可行的,累不说,改动、风险漏评估也时有发生。对此,我们根据接口->链路的策略,探索对比了几个不同的方案,在保证每个接口OK的基础上,保障全链路。

接口层

对于每一个大型应用程序来说,接口数量会不断增加,代码变更频率越来越大、系统不定期重构,这个接口的质量怎么来保障?传统编写脚本来进行的方式,投入的人力、时间成本过大,在实际的测试过程中我们探索了一些接口测试的新想法。目前业界公认的有效方式是基于引流回放的自动化测试,实现方案业内众说纷纭各有其词,但万变不离其中,引用下面这段总结,简单明了

一种是黑盒测试思路,它在线上接口请求时采集线上流量(主要是请求参数和结果),然后使用和线上环境相同的环境(数据库共用等)下用采集到的流量重新触发请求,然后断言被请求的返回值是不是和录制时的一致。这种方法比较适合对Get类型的接口进行测试,而对于写操作的请求容易造成数据污染,再加上所采集流量的数据状态(数据时效性)、环境依赖性(各种中间件、接口内部请求的RPC调用)等因素,所以这种测试方式具有一些局限性,不能满足实际测试场景中复杂的需求。

另一种思路相对白盒,主要是通过智能化的Mock手段,流量采集时采集代码运行过程中所依赖的外部中间件或者RPC调用的返回结果,当流量回放时,能够Mock本机程序对外的依赖中有可能产生变化的内容,使测试更关注本地接口的代码逻辑。

阿里集团内部,基于流量回放的思想,主要实现了2种不同的流量录制回放方案,一种是基于doom的天启/暴雪,一种是基于JVM-Sandbox的凤凰,两种实现都借力于JVM AOP。

  • 天启/暴雪
  • 天启/暴雪,其底层采用的是doom进行流量录制,其原理如下

    doom原理图
    主要流程是:

  1. 通过Java agent挂在JVM中的client以ASM的AOP方式采集主调用(采集或回放时的入口方法)的入参、返回值、子调用(应用执行过程中的一次方法调用,采集机器会采集该方法的入参和返回值用于回放时执行到该方法进行mock)的入参和返回值,然后将采集到的数据上传至server (离线模式);
  2. 回放时,client收到接口回放请求后,会执行该接口的本地逻辑,对于子调用则用采集的入参和结果进行mock;
  3. 将采集的流量和回放的结果数据进行对比。

doom方式,业务应用系统需要引入Jar包,修改启动类,修改JVM挂载agent,有部分的业务侵入性。

- 凤凰凤凰,也是采用JVM AOP实现的流量录制方案,理念和doom差不多,凤凰整体架构底层基于JVM-Sandbox(阿里开源的一款 JVM 平台非侵入式运行期 AOP 解决方案,通过字节码增强实现方法级别的AOP功能)输出模块原子能力。录制时,记录了发生调用的方法,入参、返回值和调用发生的顺序,以链式数据结构存储,回放时进行接口逻辑执行和子调用mock。<br />![凤凰录制回放.png](https://gw.alicdn.com/imgextra/i2/O1CN01m49rqS1rsh7EMIakW_!!6000000005687-2-tps-442-331.png)<br />凤凰录制回放<br />凤凰无需代码侵入修改,不需要修改应用启动参数,相对来说,对业务代码影响小,但是有应用结构要求。考虑成本和风险,以及我们的应用结构,闲鱼采用基于Sandbox的凤凰流量录制回放进行保障,变更上线流程卡点。<br />研发过程中,也会遇到各种各样的流量回放问题,比如用例过期,需要人工清楚重新录制。我们现在是采用定时任务自动清除重新录制的方式解决。<br />下面是我们的一个场景例子:<br />![image.png](https://gw.alicdn.com/imgextra/i3/O1CN01bR7Yqe1qfaA29uZCx_!!6000000005523-2-tps-1318-418.png)<br />​<br />

链路层

在基于流量录制、回放比对的接口测试过程中,我们发现这种机制对于单应用的质量保障比较实用,但是对于跨应用的链路验证、核心写操作、外调用,以及系统重构类、方案改造等大需求就有些不足,链路级的解决解决方案接踵而至。

  • Thub + 微服务

测试环境下,对于全链路上下游的强依赖,措施之一是开发测试服务化能力,建立自洽能力,测试环境下解藕对于外界诸如交易中台、菜鸟裹裹的依赖,测试环境能进行全链路闭环。
落地首要任务是梳理业务全链路节点:

- 主干链路上的每一个MTOP接口,以及接口的上下游依赖- 内部应用、中台应用、外部商家的依赖- 数据流以及TDDL梳理

业务梳理完整,进行测试服务化接口开发。下面是我们截取的一部分链路case:

同时,诸如测试环境由于依赖方测试环境不稳定block测试的情况,我们提供测试服务化接口进行封装,暴露成下单、验货等服务化能力内置于闲鱼质量平台,用于开发、测试在研发过程中使用。

  • 天算平台

天算平台,利用影子库,全链路压测的模式,线上业务数据和测试数据隔离,测试库copy线上库一部分数据。主要实现的方式是将线上的场景进行固化仿真,全链路执行,并且在执行的过程中进行所有数据变更的比对,用户可以选择任何代码版本的基线和变更版本进行对比。
大致流程

天算能力基本能满足闲鱼的交易链路,闲鱼建立了主链路相关影子库,影子链路正在调试中,用于交易服务端的全链路巡检。 同时,影子链路有诸如业务变更导致影子数据过期的问题,这个方案则主要是用于业务比较稳定的业务,新业务或者不断迭代更新的业务并未all in这个方案。

总结

综上,目前闲鱼交易,接口层用基于jvm-sandbox的流量录制方案, 日常巡检利用影子链路,研发过程自测、链路自动化用业务编排服务化能力。

doom jvm-sandbox Thub+微服务 影子链路
Release 是(github已开源)
代码侵入
应用要求
稳定性 一般 一般 一般 一般
全链路测试

展望

在基建完善的基础上,我们将继续探索flutter以及服务端的全端智能化方向的测试解决方案,希望让更多技术小二从重复劳动中释放出来,从治、防、控,三层质量网,保障闲鱼交易,让用户在闲鱼放心的卖卖卖、买买买。期待和大家一起交流业内的不同测试方案!同时感谢doom、sandbox、凤凰、天启、暴雪、全链路压测、Thub等团队提供的能力支持!

原文链接

本文为阿里云原创内容,未经允许不得转载。

闲鱼如何保障交易链路质量相关推荐

  1. 一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进

    前言 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度, ...

  2. java闲鱼支付系统_闲鱼: 多状态多操作的交易链路架构演进

    ¶ 闲鱼: 多状态多操作的交易链路架构演进 转载说明: 版权声明:本文为CSDN博主「闲鱼技术」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:htt ...

  3. 闲鱼|支撑千万日活的交易链路架构如何设计?

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 前言 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲 ...

  4. 一个多业务、多状态、多操作的交易链路,闲鱼架构如何演进?

    作者|陆漫(君爱)  出品|阿里巴巴新零售淘系技术部 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的 ...

  5. 二手市场三大顽疾背后:支付宝小程序能成闲鱼下一个流量跳板吗?

    "这个好便宜,不买有点亏"."完了,下个月就要吃土了"等等这些声音不断环绕在人们的耳边,而这里面有很大的因素就是,6.18.双十一.双十二等促销节日不断激发人们 ...

  6. 二手电商的盛与衰:闲鱼持续扩张,爱回收稳扎稳打,转转战略失焦

    2020年,中国的各类电商可谓是风云激荡. 一方面,阿里.京东.拼多多三大电商平台的特色越来越强烈,过去互相深入腹地的攻防战,也变成了各占山头. 另一方面,美团.滴滴.字节跳动.快手等公司纷纷长成了参 ...

  7. 阿里要这闲鱼,有何用?

    文丨范东成 社区只是第一步. 8月27日,一则鱼塘关闭整顿的消息出现在了闲鱼. 考虑到鱼塘对闲鱼的重要性,这的确是个十分重要的信号.作为"富人家的穷孩子",闲鱼第一次受到阿里重视, ...

  8. 万万想不到,你是这样的“闲鱼”!

    闲鱼想做的不是二手,是社区... [编者按]本文转载自微信公众号差评(chaping321) 最近世超沉迷玩游戏,每天上班时间在那开欧卡(一款开卡车的游戏)... 后来差评君实在看不下去了,跟他说你每 ...

  9. 闲鱼如何高效承接并处理用户纠纷

    背景 闲鱼是一个基于C2C场景的闲置交易平台,每个用户既是买家也是卖家,在自由享受交易乐趣的同时也容易带来一些问题,如发一些侵权违规商品而不自知,发一些带情绪化言语对他人照成了伤害等,因此这也带来了一 ...

最新文章

  1. 接口访问次数_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定
  2. Codeforces 1025D(区间dp)
  3. TP5 使用IN查询时如何限制条数
  4. JAVA 学到什么水平就可以转战 Android 了?
  5. linux之SQL语句简明教程---AND OR
  6. 【LeetCode】36. Valid Sudoku
  7. cocos2d-x初探学习笔记(8)--场景特效
  8. tensorflow代码中tf.app.run()什么意思
  9. Android 重写onBackPressed()方法 不执行问题
  10. 阿拉伯数字转中文大(小)写的函数
  11. 织梦php me,GitHub - czmz/DedeCMSv5: 中国专业的PHP网站内容管理系统-织梦内容管理系统...
  12. 独家 | 全球 AI 量化金融机构全景图(附完整分析)
  13. 点云算法在条码识别任务中的应用
  14. w ndoWs8pE模式下载,电脑店超级U盘启动盘制作工具V6.8(全能版)
  15. SAP 入门学习途径——官方工具使用
  16. springboot实现上传图片添加水印
  17. win7计算机怎么找管理员,win7如何获得管理员权限?
  18. 2.6-2.7 向量运算的基本性质零向量
  19. Spring报错 conflicts with existing, non-compatible bean definition of same name and class
  20. easydarwin 安装_流媒体技术学习笔记之(十一)Windows环境运行EasyDarwin-阿里云开发者社区...

热门文章

  1. wikioi 丘比特的烦恼 (最大权匹配)
  2. vscode美化插件推荐
  3. 【机器学习】使用Python实现k-means算法,并根据红酒的13个特征对红酒数据进行聚类。
  4. NIST数字测试套件使用说明
  5. zcmu——1601: 卡斯丁狗去挖矿(01背包-三维数组)
  6. 黄陈晨,你可以陪着我么
  7. 支持1t内存的服务器主板,使劲砸钱,能不能把电脑内存达到1T?想不到
  8. 计算机网络与嵌入式系统,嵌入式系统与计算机系统有什么不同
  9. 8.ASP.NET Core中的Kestrel Web服务器
  10. java connect four_JAVA connectFour