vs 启动调用的目标发生异常_如何解决不可测、异常场景的问题?

阿里QA导读:在软件研发过程中,发布前跨多个系统的联调测试是不可或缺的一环,而在联调过程中,经常会遇到一些比较棘手的困难,阻塞整个联调进程。其中比较典型的有:第三方的研发节奏不一致,导致无法联调;下游的业务异常难以构造,待测系统的处理逻辑无法验证;其它的一些异常场景,例如下游超时等。这些问题如何解决呢?阿里巴巴高级测试开发专家雨清带来了他的解决方案。

以上的具体场景都发生在应用发布前的联调阶段,其实在发布后,线上质量保障部分也同样存在一些难以验证的场景,例如:核对脚本无验证直接上线,日志监控无验证等。

a68cd475020818efbabdbfc48da5d5bf.png

痛点小结:

  • 请求异常场景难以构造:消息乱序、并发场景等;

  • 下游超时场景难以构造:超时成功、超时失败等;

  • 研发节奏不一致,下游应用没有开发完毕,无法联调;

  • 下游的业务异常难以模拟;

  • 线上质量,实时核对脚本,由于线下“异常数据”难以构造,往往没有验证直接上线;

  • 线上质量,日志监控,由于“异常日志”难以构造,监控配置后无法验证。

简单来说,质量保障过程中存在非常多的“不可测”场景,而此类场景如果被忽视往往会带来非常严重的故障。以下游超时场景为例,在电商下单过程中如果出现了支付超时,需要非常谨慎的处理,一旦出现逻辑漏洞就会导致用户资损。更多关于异常场景的分析,可以翻阅本文附录--异常场景分析。

验证平台的出现,就是为了解决上述“不可测”场景,降低联调成本、扩展测试边界。

验证平台(VIP)Verification  Platform


目标:

一个简单通用的提供异常场景测试、mock能力的辅助测试平台。

架构设计

验证平台由两部分组成,server和agent。其中agent部署到应用服务器上,并通过jvm attach的方式关联上应用进程,从而实现基于函数+精准流量粒度的字节码增强;server 独立部署,管控了agent、服务器、规则等核心实体,提供操作页面和hsf接口服务,支撑手工联调以及自动化。

d4c976639fdb99714d48e77a2c86d902.png

  • vip-server核心能力:应用入驻、服务器管理、规则管理、agent管理等。

  • vip-agent核心能力:规则解析、规则启停、服务器信息采集、心跳、增强报告等。

  • 支持的场景:超时异常、请求异常、污染数据、mock。

工作原理

vip-server端,负责创建和维护规则,同时通过应用维度来管理相关的线下、预发服务器,监听agent的心跳和增强报告。

vip-agent不持久化规则,实时监听server的指令,并定时(默认30秒)上报心跳,以及命中规则后上报增强报告。

以此来确保服务端的规则全局唯一,不会产生串扰,同时规则可以灵活的复用。同时服务端通过心跳来监控所有的agent状态,确保有一个全局的视野,方便用户进行应用维度的管控。

工作流程示意图:

a424f24c5a9fd644f8f1a30ffe992e1f.png

简要流程说明:

  1. server提供了一键式入驻的功能,给应用下发vip-agent并启动。不会阻断应用运行;

  2. 在server上创建规则,规则的定义见下一小节;

  3. server下发规则到应用B(待测系统),并控制启停状态;

  4. 应用A发起请求到应用B(待测系统),规则生效,对特定流量进行增强:构造乱序、并发,构造超时场景,污染DB、日志,mock下游返回等等。

规则定义

规则:一个原子化的增强能力,包含了定位和处理两部分。

b0d313685d61c17ea3512a2c7e9669aa.png

规则状态机:

4043cbba0431fcdf970e63ed643b49ee.png

平台使用


极速使用说明

  1. 确认服务器地址,一键安装并启动agent;

  2. 通过页面创建规则;

  3. 通过页面启、停规则。

一个案例

一、部署vip-agent

3d5c6f5b4f1ebba2ee60e0d12a427567.png

二、创建规则

  1. 选择场景;

  2. 填写基础信息:对应的应用名、规则名称、描述;

  3. 填写定位信息:类名(实现类)、方法名、方法入参(默认全部)、匹配请求(默认全部);

b9da3864e0a3951cd5b96072cc42a3c5.png

三、启、停规则

f15b2d761033175b040b94e2f77cc592.png

方案拓展


构造并发场景

平台提供了延迟执行的能力,在特定的请求达到指定的函数后,会暂停指定的时间(延迟执行规则中的延迟时间),在这个时间段内,另一个请求打到应用中,以此来构造并发的场景。

图中的请求1和请求2不一定是相同的业务类型,例如在电子凭证系统中,可以是一个核销的请求和一个退款的请求同时到来,产生并发。

0532ff33da10652edce308b374062d24.png

提前验证实时巡检

实时巡检是通过编写比对脚本,在生产环境进行应用间的数据一致性校验,用以保障生产环境的数据正确性。脚本的触发、运行、结果触达、异常报警等往往由巡检平台提供。巡检脚本往往无法在测试环境进行验证,难点如下。

难点:

  1. 构造测试环境全链路的真实数据;

  2. 精准污染核心字段;

  3. 触发测试环境的待测实时核对脚本。

解法:

  1. vip创建规则,篡改DAL层写入DB的数据;

  2. 跑全链路自动化用例,落全链路真实数据;

  3. 通过实时核对平台接口触发,运行待测的核对脚本。

下图是一个使用案例,其中关键的几个平台、工具说明如下:

  • 链路级自动化平台:一个自动化开发、运维平台,本案中用于构造测试环境的全链路真实数据;

  • 一键校验工具:触发测试环境的待测实时核对脚本的工具;

  • 实时核对平台:巡检脚本的运行容器;

  • 交易中心:真实应用,控制交易的业务流程;

  • 凭证中心:真实应用,用户购买虚拟商品(券),最终落成用户名下的电子凭证。

21e3c2cb0e99f89cd6b270037c30b153.png

如图所示,虚拟商品交易场景下,交易中心和凭证中心的数据应该是一致的,例如:用户、商户、商品、金额、订单状态机和凭证状态机等。本案的做法为,第一步通过vip创建污染DB数据的规则,并使之生效;第二步,通过自动化平台发起购买流程,在凭证中心往DB写用户名下的电子凭证时,vip-agent会篡改部分数据,导致凭证中心和交易中心的数据不一致;第三步,运行“待测的巡检脚本”,通过脚本是否校验出数据的不一致,来检验脚本本身是否符合预期。

vip还支持非常多的其它场景,不再一一赘述。

异常场景分析


系统调用抽象

如果把系统中的一次核心的逻辑处理看作一个“业务操作”,那么一次服务系统被调用的过程大致可以划分为三个部分:业务处理前,业务处理中,业务处理后。

业务处理前,系统主要的过程可以划分为:参数校验和幂等校验。参数校验,验证服务调用方传入的参数是否符合要求,类型是否正确、必填的参数是否都填了、非0校验等;幂等校验,验证请求是否是合法的,例如由于网络抖动等原因引起的重发,可能调用方发起了一次服务调用,而SUT(被测系统)却收到了两次一样的请求。

业务处理中,SUT(被测系统)具体处理业务逻辑的过程,可以归类为:业务校验、业务处理、数据持久化。业务校验是基于业务层面的校验,例如付款时,需要校验用户余额是否充足等;业务处理是程序中正式处理数据和计算的部分,例如从用户余额中扣除资金并增加到商家账户中等;数据持久化就是将数据落到数据库。

业务处理后,SUT在完成业务处理后,根据处理的情况:是否成功,失败的原因等,组装结果,返回给服务调用方。

fb6ac3e5ccafc70a96f78269e9581623.png

异常用例设计

主要的异常场景分类:

  • 业务处理前:入参异常、幂等异常;

  • 业务处理中:业务异常、下游异常、DB异常;

  • 业务处理后:返回异常。      

下图所示模板从左向右依次细化异常场景,直至到一个具体的案例,因此每个叶子节点对应了一个用例。该模板方便使用者有体系化的进行异常场景测试用例设计。

6de16d05ecc656a61cdf9ddc6bbec88f.png

说明:“异常用例设计模版”已获国家发明专利授权(注意:可以借鉴但不要随意使用~):CN109240908B


b6d59198ac83c72ab395b12350b2f1c7.png

点个“在看”支持一下?

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

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

相关文章

Linux内核 scatterlist介绍

scatterlist 物理内存的散列表。通俗讲,就是把一些分散的物理内存,以列表的形式组织起来 诞生背景 假设有三个模块可以访问memory:CPU、DMA控制器和某个外设。CPU通过MMU以虚拟地址(VA)的形式访问memory;…

Linux内核 crypto文件夹 密码学知识学习

密码算法分类 对称算法非对称算法消息摘要(单向哈希)算法这些算法作为加密函数框架的最底层,提供加密和解密的实际操作。这些函数可以在内核crypto文件夹下,相应的文件中找到。不过内核模块不能直接调用这些函数,因为…

Linux crypto相关知识的汇总 Linux加密框架crypto中的算法和算法模式(一)

Linux加密框架中的算法和算法模式 Linux加密框架中的算法和算法模式(一)_家有一希的博客-CSDN博客 加密框架支持的密码算法主要是对称密码算法和哈希算法,暂时不支持非对称密码算法。除密码算法外,加密框架还包括伪随机数生成算法…

Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式

参考链接 Linux加密框架中的算法和算法模式(二)_家有一希的博客-CSDN博客 对称算法 分组算法模式 ECB模式 ECB模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密如下图所示如果两个明文块相同&#xff0c…

Linux加密框架中的算法和算法模式

参考链接 Linux加密框架中的算法和算法模式(三)_家有一希的博客-CSDN博客 对称算法 14 如上所示,在arc4.c中定义了两个与RC4算法相关的算法实现,分别为arc4和ecb(arc4),其中arc4是RC算法的算法实现,而ecb…

Linux加密框架crypto AES代码相关

例子 aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.11) - Bootlin static struct crypto_alg aes_alg {.cra_name "aes",.cra_driver_name "aes-generic",.cra_priority 100,.cra_flags CRYPTO_ALG_TYPE_CIPHER,.cra_blocks…

Linux加密框架 crypto RC4

参考链接 arc4.h Linux加密框架中的主要数据结构(一)_家有一希的博客-CSDN博客 头文件 arc4.h - include/crypto/arc4.h - Linux source code (v5.15.11) - Bootlin实现代码 arc4.c arc4.c - crypto/arc4.c - Linux source code (v5.15.11) - Bootlin…

Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common

参考链接 Linux加密框架中的主要数据结构(二)_家有一希的博客-CSDN博客 定义 通用算法说明数据结构crypto_alg的联合体成员变量cra_u中包含多种算法的个性化属性,如分组算法、块加密算法、压缩算法、伪随机数算法等,但不包含哈希…

Linux加密框架 crypto 哈希算法举例 MD5

参考链接 Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的博客-CSDN博客Linux加密框架中的主要数据结构(二)_家有一希的博客-CSDN博客 MD5 md5.h - include/crypto/md5.h …

事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...

一、事务事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。--摘自百科在MySQL里,事务是在引擎层面实现,比如MyIsam不支持,InnoDB支持面试清单(Java岗):JavaJVM数…

Linux加密框架 crypto 算法模板

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin 定义 struct crypto_template {struct list_head list;struct hlist_head instances;struct modu…

Linux加密框架 crypto 算法模板 CBC模板举例

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客https://blog.csdn.net/CHYabc123456hh/article/details/122194754 CBC算法模板 cbc.c - crypto/cbc.c - Linux source code (v5.15.11) - BootlinCBC算法模板属性 1)CBC算法模板名…

leetcode数组汇总_LeetCode刷题实战43:字符串相乘

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家…

Linux加密框架 crypto 算法模板 HMAC模板举例

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlinhmac.c - crypto/hmac.c - Linux…

判断非负整数是否是3的倍数_五年级数学因数与倍数知识点汇总与解题方法技巧...

在日常教学过程中,我发现孩子们和某些家长对学习数学的方法有一些误区,就是觉着数学,单纯就是逻辑思维,只要多做练习题就能学好,但是不是这样的,低年级的学生,学习数学还是以背诵为主&#xff0…

tcp通讯一次最多能发送多少数据?_关于TCP/IP,必须知道的十个知识点

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络…

Linux内核crypto子系统的调用逻辑

testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin上述代码是内核内部即crypto子系统对外提供密码服务的测试程序调用流程&#xff1a;crypto API <—> crypto core <—> crypto_register_alg处于用户态的程序想要调用处于内核态的密码算法&…

Linux加密框架 crypto算法模板 以及CBC算法模板实例

参考链接 Linux加密框架中的主要数据结构&#xff08;四&#xff09;_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin struct crypto_instance {struct crypto_alg alg;struct crypto_template *tmpl;union {/* Node i…

tomcat temp 大量 upload 文件_渗透测试之文件上传漏洞总结

文末下载上传环境源码客户端js检查一般都是在网页上写一段javascript脚本&#xff0c;校验上传文件的后缀名&#xff0c;有白名单形式也有黑名单形式。查看源代码可以看到有如下代码对上传文件类型进行了限制&#xff1a;我们可以看到对上传文件类型进行了限制。绕过方法1.我们…

Linux加密框架 crypto算法模板 以及HMAC算法模板实例

HMAC算法模板实例 HMAC算法模板的创建实例的接口是hmac_create函数hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin hmac_create输入的参数包括 算法模板 tmpl 和 算法模板实例参数 tbhmac_cretae函数返回的结果为0表示算法模板实例已经创建注册算法模…