佛山市外贸网站建设刚开始的网站开发公司

web/2025/10/6 17:01:58/文章来源:
佛山市外贸网站建设,刚开始的网站开发公司,网贷审核网站怎么做,外贸网站推广平台‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦#xff5e;作者#xff1a;马力部门#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求#xff0c;为商家提供各… ‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦作者马力部门新零售测试一、背景上半年公司的网关系统进行了重构需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求为商家提供各种服务稍有不慎就容易出现较大故障所以如何迁移是个比较慎重的问题。这个迁移项目主要的验证重点是确保新网关对于接口的请求和返回的处理和老网关一致而主要的验证难点在于仅从功能层面进行手工验证很难覆盖各种场景尤其是如何构造各种请求参数以及检查各种返回的内容。若要人肉进行细致的接口级别的验证那么花费的时间就会很长、效率很低。经过统计和梳理涉及的接口超过了 1000 个在这个数量级上总花费的时间成本很高研发团队难以承受。这不得不让我们停下来思考一下是否有另一种高效的方式来解决这个问题。这时就想到了采用录制回放对比的方式。随着业务的快速发展回归时需要考虑的场景越来越多测试的耗时越来越长越来越多的公司提出并采用录制回放的方式来提高效率比如阿里开源的 jvm-sandbox-repeater基于已有的流量进行录制无需人肉准备脚本和数据通过将录制的流量进行回放还原真实的场景最后提供回放结果判断是否符合预期提高业务回归效率。从场景上来说网关迁移验证做的也是回归测试这个思路也是通用的所以设计了一个类似的系统进行回放对比验证。二、系统设计如果需要采用录制回放对比的方式首先第一步就是录制在录制前需要确认下数据和流量的来源。数据越丰富、多样性越强回放能够发现的问题越多一些实时的流量采集方式通过拦截转发的方式获取数据所以需要一定的配置和改造成本。幸运的是网关的日志对于接口的请求参数会进行记录实际上已经完成了录制这个过程可以采用成本最小的方式通过拉取测试环境老网关的日志来获取请求数据然后进行解析再进行回放和对比。基本流程如下下面会对各步骤的逻辑进行说明2.1 日志拉取和清洗作为整个流程的第一步通过拉取日志获得需要回放的流量。回放对实时性要求不高但是当初请求的时刻和回放的时刻之间的时间差也不能太长比如早上创建一个商品并进行了查询操作下午可能进行了删除如果选择晚上再进行回放的话查询结果就会为空数据的质量就会下降造成数据损耗。需要考虑设置一个较短的时间间隔进行回放目前通过定时任务每隔一小时启动一次进行拉取和回放根据当前启动时间自动生成对应的时间范围去日志平台获取日志比如任务启动时间是 11:10 分那么自动转换成 10:00-11:00 的时间范围去拉取日志进行回放。获得日志后第二步就是日志清洗。日志清洗的作用有两个过滤。有一些接口是不需要迁移到新网关的进行过滤减少对最后统计结果的干扰。另外录制回放运行时也会请求网关需要过滤掉这部分人工流量。采样。虽然是测试环境一天的数据量也有 10W 全部处理时耗较长同时初期会有大量重复问题爆出增大排查成本。根据二八定律以及实际的观察小部分接口贡献了大部分流量考虑每个接口雨露均沾和数据的多样性选择接口场景作为采样纬度返回结果中的不同 code 认为是不同的场景这样除了正常请求也考虑到异常请求的回放。 初期可以设置一个较小的采样阈值 Limit 来收集问题减少人工排查问题的成本。等问题修复稳定运行一段时间后再考虑逐步增大阈值。2.2 进行回放考虑到数据是不断变化的同时对于登陆态生命周期是否正常也需要进行观察所以回放并不是拿新网关请求的返回和日志中记录的老网关进行对比而是同时请求两个网关再对各自的返回进行比较。在请求过程中可能遇到接口超时等情况遵循尽可能成功的原则做对应的处理比如超时进行重试等。另一个影响比对效率的因素就是性能每一个请求都可以独立处理就意味着可以并发执行如 python 的 multiprocessing 多进程的方法 p multiprocessing.Pool(8) while line: p.apply_async(process_line, args(...)) line file.readline() p.close() p.join()在 6C 的机器上对 2000 条日志进行回放通过不同的并发数观察结果如下pool(1) 耗时:1292spool(6) 耗时:212spool(8) 耗时:155spool(12) :耗时:102s发现性能提升还是很明显的根据实际运行机器的CPU性能配置适合的并发数即可。2.3 结果比较整个系统中最核心的逻辑就是结果对比逻辑了。从新网关获取到的返回 response1 和老网关获取到的返回 response2 理论上是要一致的。初步的比较逻辑就是采用递归比较将返回对象中的每个元素进行比较判断内容是否一致。实际的运行过程中往往会出现各种正常情况下返回结果不一致的情况接口请求返回含有时间字段而时间字段是根据当前处理时间生成的。一些写接口返回的是新生成的对象 id 每次请求返回都不同。比如创建一个商品下了一笔订单返回的都是新生成的商品 id 或者订单号。返回数据列表时有些场景返回的数据是不保证顺序的导致偶尔的比对失败。针对上述情况设计了兼容模式进行特殊处理。首先定义一个 dict 存储接口名以及需要忽略的字段ignore_dict { youzan.retail.stock.receiving.order.export.1.0.0: [response], youzan.retail.trademanager.refundorder.export.1.0.0: [response], youzan.retail.trade.api.service.pay.qrcode.1.0.1: [url], youzan.retail.product.spu.queryone.1.0.0: [list]}其中定义两个特殊字段 response 和 list对于 response 字段只检查字段长度和类型不检查内容是否一致主要针对返回序列号、订单号的场景对于 list 字段对于其中的list类型做无序比较处理核心对比方法如下对于需要忽略的字段和类型进行特殊处理减小误报def compare_data(data_1, data_2, COMP_SWITCH, ignore_list): if isinstance(data_1, dict) and isinstance(data_2, dict): diff_data {} only_data_1_has {} only_data_2_has {} d2_keys list(data_2.keys()) for d1k in data_1.keys(): # 忽略某些字段 if COMP_SWITCH and __doignore(d1k, ignore_list): continue if d1k in d2_keys: d2_keys.remove(d1k) temp_only_data_1_has, temp_only_data_2_has, temp_diff_data compare_data(data_1.get(d1k), data_2.get(d1k), COMP_SWITCH, ignore_list) if temp_only_data_1_has: only_data_1_has[d1k] temp_only_data_1_has if temp_only_data_2_has: only_data_2_has[d1k] temp_only_data_2_has if temp_diff_data: diff_data[d1k] temp_diff_data else: only_data_1_has[d1k] data_1.get(d1k) for d2k in d2_keys: if COMP_SWITCH and __doignore(d2k, ignore_list): continue only_data_2_has[d2k] data_2.get(d2k) return only_data_1_has, only_data_2_has, diff_data else: if data_1 data_2: return None, None, None else: if COMP_SWITCH and isinstance(data_1, list) and isinstance(data_2, list): if __process_list(data_1, data_2, COMP_SWITCH, ignore_list): return None, None, None else: return None, None, [data_1, data_2] else: return None, None, [data_1, data_2]比对逻辑中加入了 COMP_SWITCH 开关先按常规方式进行比较当常规方式比较失败再开启兼容模式进行比较这样的做法是为了统计和观察哪些接口会使用兼容模式使用兼容模式是否合理(还有兼容模式本身有没有bug)。2.4 处理失败每次执行任务会生成一个批次号每个接口请求回放对比完成后保存结果时也会带上批次号写入数据库。当任务执行完成后会根据批次号将失败的结果再拉取出来进行重试。失败重试时回放的逻辑和正常运行时略有不同两次回放间隔了 30s 依次进行这是避免当多次请求操作同一个对象时因为第一次请求执行比较慢导致第二次请求命中唯一性校验而失败。当重试结果仍然失败那么需要人工介入进行排查判断是否是新网关逻辑的问题还是有字段需要特殊兼容的问题进行处理。2.5 结果判断和迁移策略对于回放成功的接口会记录当时回放成功返回的code等信息到结果表同时记录对应code的次数加1多次回放后会形成如下的统计结果{200: 94, 234000001: 16, 234000002: 1}当统计结果中存在正常的code和异常的code同时没有回放失败记录的情况就可以认为新网关对该接口的返回和老网关是一致的。回放通过的次数越多可信性就越强。在这种情况下再将接口的流量切换到新网关观察日常业务调用的情况通过拉取新网关日志记录返回的code和数目当新网关返回的结果中也包含正常和异常的code时认为在新网关也能正常请求可以准备线上迁移了。通过QA环境的对比回放同时在预发环境全量迁移后观察业务功能是否正常最后线上逐步灰度流量和监控最后确保接口迁移到新网关是正常的。三、面向普通测试场景的解决方案因为属于回归类的工具这套系统除了可以解决验证新老网关返回对比是否一致的问题外还能够帮助验证分支环境和基础环境之间请求对比是否一致的问题(尤其是系统重构的情况)对业务场景进行回归。为支持普通回归场景只要在原来的系统上进行少量的改动主要的改动就是配置需要回放的接口和需要回放到的环境。在回放阶段之前是回放到新网关和老网关现在都回放到同一网关通过不同的 X-Service-Chain 请求头控制请求到达不同的后端环境然后获得返回值进行对比。四、最后本文提供了一种通过采集日志进行回放对比来解决接口对比一致性的思路运用到了新老网关重构验证等回归场景。在新老网关迁移验证过程中该系统起到了非常大的作用。通过该系统校验了接口 1200产生回放记录数目 30w 条发现问题 30 最终保障了线上切换工作的平稳进行。由于能够获取了接口和参数可以进一步做一些权限、后端参数校验这样的检查减少测试人员在这方面投入的测试时间这套系统已经投入实际使用后面有机会可以再介绍其实现原理和使用效果。期待未来能够挖掘出更多的使用场景解决更多的验证问题提高测试的效率和准确性。扩展阅读有赞业务中台测试团队介绍Dubbo 压测插件 2.0 —— 基于普通 API 调用有赞精准测试实践K8S 在有赞 PaaS 测试环境中的实践一次 Logback 发现的隐患有赞持续集成容器化实践前端精准测试探索覆盖率实时统计工具Vol.335最后打个小广告有赞新零售测试团队长期招人期待你的加入如果你也是聪明、皮实、有要性的小伙伴如果你对零售、SaaS有更多想法欢迎投递简历maliyouzan.com加入我们一起enjoy‍‍‍‍‍‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发帖百度秒收录网站分享内网怎么做网站

逻辑回归(Logistic Regression)是数据挖掘中一种经典且广泛应用的算法,主要用于解决分类问题。尽管名字中带有“回归”,它的核心目标却是预测离散的类别,而不是连续的数值。逻辑回归凭借其简单、高效、易于解释的特性&…

网站网络拓扑图徐州城乡建设局安监处网站

如何让大模型更聪明?提升AI智能的关键策略 🤖 如何让大模型更聪明?提升AI智能的关键策略摘要引言方向一:算法创新🚀1.1 自监督学习的崛起1.2 强化学习的应用 方向二:数据质量与多样性📊2.1 数据…

手机黄山网站九江网站设计服务机构哪家好

来源:物联传媒2019年NB-IoT行业获得了快速发展,用户数有望较2018年提升3倍以上,预计随着2020年基站数的大幅提升,为行业发展提供更进一步的支撑,加速技术成熟度提升,用户数有望保持快速增长。NB-IoT是万物互…

sdcms网站源码海外免费服务器

buffer在芯片物理上一般指的是SRAM,也可以指寄存器组。buffer的作用是用来在逻辑芯片上暂时存储数据,但不会是大量的数据。如果是大量数据一般会使用DRAM(典型的指DDR)作为存储芯片,用来存储大密度数据。line buffer可…

物流网站查询网站设计公司费用

简介 ISO/IEC 7064:2003 信息技术 安全技术 校验字符系统 密码学 Mod37 校验算法(Java和C#) ISO/IEC 7064 modulo 37-2 适用范围 1.1 本标准规定了一组校验字符系统,它可以防止在复制或键人数据时产生的串的错误。串的长度 可以是固定的或是可变的,包…

怎么优化网站代码代工平台

知识库服务依赖该数据库,Embedding 形式个性化训练 ChatGPT,必不可少的就是向量数据库 因为 qdrant 向量数据库只支持 Docker 部署,所以需要先安装好 Docker 服务。 命令行安装 拉取镜像 docker pull qdrant/qdrant 运行服务 docker run -…

河南网站备案代理网站建设类文章要发多少片

算法沉淀——动态规划篇(子数组系列问题(上)) 前言一、最大子数组和二、环形子数组的最大和三、乘积最大子数组四、乘积为正数的最长子数组长度 前言 几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都…

上海建设网站的网站wordpress密码正确登录不

单日3亿日志数据准实时存储和分析 –ClickHouse 在自如大前端研发中心的应用 第一章 架构设计 和 用户体系建设 文章目录 单日3亿日志数据准实时存储和分析前言一、pandas是什么?二、使用步骤1.引入库2.读入数据 总结 前言 用户行为数据的收集和分析,…

网站主页不收录淘宝店采用哪些方法做网站推广

在完成二级建造师的报名程序后,考生无法进行退考。如果是不参加考试,可以选择弃考。弃考对个人并没有负面影响,缺席考试的话也不会被记录在个人诚信档案中。当然,如果弃考的话此次考试的成绩将被记为0,下一年参加考试按…

什么公司能做网站建设江苏建设网证书查询

第一章 构件 具有某种功能的 可复用的软件结构单元,为组装服务,可部署,具有规范的接口规约和显式的语境依赖 构件模型 构件模型是对构件本质特征的抽象描述,可以把它想象成一个类的组合,它封装了多个类,并具有一个或多个服务而提供了简单…

外国购物网站设计风格网站做记录访客

原标题:Java 幽灵引用的作用来源:imzoer,blog.csdn.net/imzoer/article/details/8044900找实习的时候,面试大摩,就遇到了这个问题,当时真不该跟面试官交流这个内容的。垃圾收集过程中,对象的可触…

网站加速代码阿里云服务器价格表包年

灵活控制光影,能让场景的渲染效果更加丰富逼真,常见的光源:环境光、点光源、平行光和聚光灯。 环境光 环境光是指场景的整体光照效果,由于场景内若干光源的多次反射形成一致的效果,一般是用来为整个场景指定一个基础的亮度。所以环境光是没有明确的光源位置,在各处形成…

做机械配件的网站山西太原建设厅官方网站

adb connect失败 1. 确认两个设备在同一个局域网 2. 确认此网络是否有adb连接的权限(有的公司网络不允许adb) 3. 确认防火墙设置 如果前面3步都确认没问题,Ping ip也能成功,那么有可能就是端口的问题: step1: 先用有线连接设备&#xff0…

织梦怎么做手机网站第一页网站SEO

PostgreSQL的视图pg_tables pg_tables 是 PostgreSQL 中的一个系统视图,用于显示当前数据库中所有用户定义的表的信息。这个视图提供了关于表的名称、所属模式(schema)、所有者以及表类型等详细信息。 pg_tables 视图的主要列 列名类型描述…

网站建设比较好的公司哈尔滨建设网站哪家好

360后缀勒索病毒,是BeijingCrypt勒索家族中的一种勒索软件病毒,这种恶意软件一旦攻击了企业的服务器就会利用自身独特的加密技术来全盘扫描系统文件,并对用户的全部文件进行加密,并要求用户支付赎金以解锁文件。近期,我…

做网站赚钱的时代过去了吗wordpress怎么建立空白文档

编者按:Pete Warden是TensorFlow移动团队的技术负责人。曾在Jetpac担任首次技术官。Jetpac的深度学习技术经过优化,可在移动和嵌入式设备上运行。该公司已于2014年被谷歌收购。Pete还曾在苹果公司从事GPU优化领域的图像处理工作,并为OReilly撰…

定制网站建设托管南京网站开发

map:接受两个参数(函数,Iterable),map将传入的函数依次作用于Iterable的每个元素,并且返回新的Iterable def f(x):return x*x r map(f,[1,2,3,4]) #此时的r为惰性求值——可用next()和for...in取值 #通过list()返…

南宁网站设计多少钱一个电商网站建设实训心得

百度问的是开放性的问题,应该是为了考察你的综合能力吧,问了两个问题 一,html&css 涉及的内容 块元素与行内元素,浮动,清除浮动 1,一个100px的容器,里面塞了一个空的div,这个di…

免费seo网站贵阳网站开发公司

设计技术: springboot、mysql、maven、前端vue 主要功能: 住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等功能模块。 管理员功能模块 管理员通过后台登录页面…

深圳网页制作与网站建设公司wordpress 新闻页面

分类: LINUX 1) PCM设备的句柄.2) 指定同时可供回放或截获的PCM流的方向3) 提供一些关于我们想要使用的设置选项的信息,比如缓冲区大小,采样率,PCM数据格式等4) 检查硬件是否支持设置选项.4.1) 初始化PCM变量4.2) 分配hwparams结构4.3) 打开PCM设备4.4) 以声卡的全部…