【深度测试】如何分析脚本以及对脚本进行测试

线上会存在一种任务,定时或者手动出发,我们称之为“脚本”,也可以称之为“job”

一、脚本的特性

  • 无过程:只有开始和结束,过程迅速且黑盒。
  • 无交互:脚本处理的业务场景都几乎没有交互,只有数据被改变。后续逻辑才有交互。
  • 速度快:脚本处理速度快,一般在从开始到结束,在ms级别。
  • 风险高:脚本逻辑如果有误,一般会导致数据错误,容易引发较严重的线上故障。数据修复成本高。
  • 无预发:目前job类服务是不支持预发环境验证的,不能语法环境验证,只能直接上线。

二、脚本可能用在什么情况

  • 数据清洗:同库同表情况下,数据资源替换;
  • 数据库同步数据到内存缓存:每N时间,同步一次数据库信息到内存;
  • 流水对账:结算相关,使用脚本对营收流水数据对账;
  • 结算:X内容结算为Y货币,使用脚本进行数据结算;
  • T+1生成数据:货币等审核数据同步;
  • 活动玩法:一次性的晋级淘汰玩法之类的;
  • 大量数据拉取信息:一般用在活动,结束后需要拉取特定条件的信息,方便产品做后续的数据测算;
  • 批量报名:一般用于活动,多阶段时,使用脚本完成赛段之间的数据拉取和报名;
  • 数据检查、补偿:按分钟进行数据检查,补偿发放奖励等逻辑;
  • 定时任务、触发告警:部分业务会用定时任务,按阈值触发告警,发送告警信息;
  • 轮询监听databus信息:我司很多服务都使用脚本方式进行信息监听;

三、深入分析脚本和测试脚本

端到端的测试中,可能并不去测试脚本,如果涉及到需要测试脚本,尝试自己去执行,不要过度依赖研发的执行命令(在测试研发代码的时候,对他的任意代码只可参考,保持怀疑,他的执行命令也是我们需要测试的产物);

3.1 日志测试法

对应的场景:活动玩法/数据清洗等。适用于内部逻辑复杂,接口交互较多,没有过多数据落地和页面交互的脚本。

以某活动 决赛匹配部分 举例:(该赛事交互方多,分别有pk部分,榜单部分,房间信息部分,主播信息部分,且pk匹配时间有限)
在这里插入图片描述
以上是决赛赛段的全部匹配逻辑: 蓝色部分为明显能感知到退出的部分,绿色的部分为数据库表能够看到的表现,其它所有服务端逻辑都是无法直接看到的。

对于这种服务端逻辑较重,中间数据流转逻辑复杂,没有过多页面交互和数据落地的脚本。最适用日志测试的方式,例如,可以依赖日志观测到的逻辑点如下:
在这里插入图片描述
红色箭头为判断逻辑,判断逻辑需要有日志,可以查询到一次脚本中拉取到的数据和实际判断的逻辑信息。黄色部分为调用其他服务获取到的主播或者房间信息,外部调用链需要有接口请求信息和response信息。可以为问题排查和逻辑判断提供数据依据。红色方框部分为很重要的,服务端使用数据结构做数据处理的部分,这部分需要日志信息。防止数据结构使用不当等问题的发生。

日志判断的合理位置:

  1. 有条件判断的地方 if,else,case,三目运算符等位置。

  2. 有外部接口调用的位置,需要准确得到被调用方返回的数据信息。

  3. 数据结构使用的位置,需要明确感知到数据结构处理前后逻辑和数据是否合理。

  4. 循环调用的过程,需要明确能够看到执行路径和次数,防止循环提前退出或者发生处理异常的情况。

    日志的增加需要考虑服务的压力,日志不是越多越好,过多的日志会使脚本执行速度变慢。能够清晰看到某一条执行路径即可。超出这部分的日志路径会缺失或者错误。如果业务逻辑过于复杂,可以加一部分测试时使用的日志,回归测试阶段删除或者注释掉即可。

附:日志分级&规范(等我写完再贴上来)

3.2 数据库和缓存 数据验证法

对应的场景:数据库同步数据到内存缓存中/流水对账/结算/T+1生成数据等。适用于内部数据处理逻辑较简单,且数据来源和数据处理结果有实时落地的脚本。

以活动的 文档举例:(依赖databus,处理数据的数据源来源是数据库和redis缓存,处理数据结束后,数据落地于数据库)
在这里插入图片描述
以上是某个赛段的全部结算逻辑:绿色部分为投递databus的时候可控制的传参,蓝色部分是明确落地的数据库和redis的数据源和处理结果。

对于这种偏重脚本内部逻辑较简单,数据源和处理结果都落在数据库和redis的情况,比较适用于依赖数据库和缓存数据的验证方式,用例设计可以偏重于数据校验和设计层面

截取部分用例如下:
在这里插入图片描述
在这里插入图片描述
红色箭头为多张数据库表关联逻辑的预期数据, 分支条件为databus数据依据。黄色的部分是涉及的redis key的设计。

数据库和redis的判断预期:

  1. 明确数据库中字段的关系和预期值。

  2. 明确了解数据库中多张表的关联关系。

  3. redis的数据流转和变化关系,redis的字段设计。

  4. 数据处理的时机,和不同状态下数据的变化。

    这部分需要严格确认redis key的过期时间和幂等键的合理性。以及数据库中的每个字断准确性,特别注意extra_data的数据准确性。

    上线前需要跟进为测试提供的日志的优化和删除

3.3 脚本特殊逻辑review 补充法

对应的场景:部分场景下脚本逻辑的流程图不能够详尽的画出细节,需要测试的过程中发掘测试点。适用于数据拉取,翻页等场景。

以某项目,脚本替换资源举例:
在这里插入图片描述
上述案例细节挖掘如下:

  1. 全屏动画是如何判断的,用了哪些字断(知晓这里,可以分析出不同礼物类型被影响的情况)
  2. 生成动画id,会不会影响已有资源,生成方式细节(以此来推算id生成规则是否合理,防止发生id重复的问题,或者服务重启,id的生成)

review代码:(可以看到判断的条件和生成id的方式)–担心敏感所以未放图。

适合脚本做细节挖掘点的情况如下:

  1. 条件判断的逻辑字断细节
  2. 数据拉取处理的翻页逻辑
  3. 多个脚本的情况下,脚本之间调用链路

3.4 工具/脚本辅助测算

任务调度执行平台:

  1. 可视化任务管理/运行(各环境)
  2. 与接口自动化打通,建设自动化case

四、脚本必测的通用异常case(经验总结)

在这里插入图片描述

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

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

相关文章

算法篇之二分

二分算法简介 特点 最简单的一种算法,也是最恶心,细节最多,最容易写出死循环的算法时间复杂度O(logN) 如何学习 明白其中的算法原理,二分并不是只有数组有序的的时候使用,而是看是否具有二段性。模板 朴素的二分模…

TCP TIME_WAIT 过多怎么处理

文章目录 1.什么是 TCP TIME_WAIT?2.为什么要 TIME_WAIT?3.TIME_WAIT 过多的影响4.解决办法4.1 调整短连接为长连接4.2 调整系统内核参数 5.小结参考文献 1.什么是 TCP TIME_WAIT? TCP 断开连接四次挥手过程中,主动断开连接的一方&#xff…

BeanFactory创建过程(基于Servlet)

BeanFactory创建过程(基于Servlet) 1. 概述1.2 那么问题就来了1.2.1 谁负责AnnotationConfigServletWebServerApplicationContext实例呢?1.2.2 ApplicationContextFactory初始化过程又是怎么样的? 1.3 总结 2. 最后 1. 概述 Anno…

什么可以用手机蓝牙控制LED???#串口通信【下】

什么可以用手机蓝牙控制LED???#串口通信【下】 前言预备知识1.小白玩串口控制的ASSII避坑1.1问题引入1.2解决问题 2.串口支持单词型指令控制2.1实现串口支持单词型指令控制的核心思路2.2利用字符数组来承接单词型指令2.3利用strstr函数来查找…

【Time Series】LSTM代码实战

一、简介 还是那句话,"时间序列金融"是一个很有"钱"景的话题,还是想尝试采用Stock时间序列预测任务DeepLearning。本文提供了LSTM预测股票的源代码。 二、算法原理 长短期记忆网络(LSTM)是一种特殊的循环神经…

如何衡量代码的复杂度

圈复杂度概要 最近的培训中了解到了一个概念,叫做圈复杂度。 圈复杂度(Cyclomatic Complexity)是一种衡量程序复杂度的度量方法。它由美国计算机科学家 Thomas J. McCabe 在 1976 年提出。圈复杂度通过统计程序的控制流图中的决策结构&…

linux有关安全的几个基本配置,禁止root登录,新建root权限账号

一、不安装多余的软件,能最小化安装就不要安装图形化界面,然后根据需求安装需要的软件。 二、防火墙要启用,如果您的这台服务器对外有服务只要放开服务就好了,就是说白了白名单,切忌一上来第一件事儿就是关闭防火墙&a…

Mobileye CES 2024 自动驾驶新技术新方向

Mobileye亮相2024年国际消费类电子产品展览会推出什么自动驾驶新技术? Mobileye再次亮相CES,展示了我们的最新技术,并推出了Mobileye DXP--我们全新的驾驶体验平台。 与往年一样,Mobileye是拉斯维加斯展会现场的一大亮点,让参观…

一文读懂Prodigal教程

2.prodigal教程 2.1 介绍 Prodigal 由橡树岭国家实验室和田纳西大学诺克斯维尔分校于2007年在能源部联合基因组研究所的主持下联合开发,是一种用于细菌和古细菌基因组的蛋白质编码基因预测软件工具,Prodigal 已成为世界上最受欢迎的微生物基因预测算法…

day28 节点操作——克隆节点、删除节点

目录 克隆节点删除节点 克隆节点 特殊情况下新增节点按以下操作: 复制一个原有的节点把复制的节点放入到指定的元素内部 克隆节点 元素.cloneNode(布尔值) cloneNode会克隆出一个跟原标签一样的元素,括号内传入布尔值 若为true,则代表克隆时…

Vue3批量异步更新是如何实现

文章目录 一、什么是调度执行二、如何实现可调度?三、批量更新 & 异步更新四、Vue原理五、最后 一、什么是调度执行 多次修改数据(例如自身num10次),只进行一次页面渲染(页面只会渲染最后一次num10) 指的是响应式数据发生变化…

C++ copy()函数详细介绍

copy() 是一个标准库函数,位于 头文件中。它用于将一个容器中的元素复制到另一个容器中,或者将一个范围内的元素复制到另一个范围中。 函数参数介绍 copy( first, last, d_first );first 和 last:表示输入范围的迭代器。 first 指向要复制的…

centos7 安装 java17 安装 idea

删除旧版本的java或者说是自带的,免得干扰 查找java [wanglcentos7 java]$ rpm -qa|grep javajava-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch tzdata-java-2020a-1.el7.noarch python-javapackages-3.4.1-11.el7.noarch …

展台设计搭建中6个关键元素

一、哪种风格的会展展台设计更显示设计感 从已有的展台布置局面可以看出,不同展台设计有着不同的标准与选择原则,现有的一系列展台设计标识会随着现代化会展的提升重新进入更新诉求阶段。 二、展台设计一般会有那种可以选择的类别 从出现在展台设计优化阶…

React实现组件扩展机制

在java中,SPI机制是Java中提供的一种服务发现机制。同样,前端也很需要这种机制,这样可以做到组件可插拔,可替换,减少相互冗余。 快速使用 1.扩展点使用 通过使用Extension组件定义扩展点,通过name标记扩展…

2023爱分析·知识库问答市场厂商评估报告:爱数

01 研究范围定义 研究范围: 大模型是指通过在海量数据上依托强大算力资源进行训练后能完成大量不同下游任务的模型。2023年以来,ChatGPT引爆全球大模型市场。国内众多大模型先后公测,众多互联网领军者投身大模型事业,使得大模型…

C++ //练习 3.39 编写一段程序,比较两个string对象。再编写一段程序,比较两个C风格字符串的内容。

C Primer(第5版) 练习 3.39 练习 3.39 编写一段程序,比较两个string对象。再编写一段程序,比较两个C风格字符串的内容。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*******…

每日一道Java面试题:说一说Java中的异常

写在开头 任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。老样子,用一段简单的代码开始今天的学习。 我&a…

【CanvasKeyFrames - HTML5 Canvas 图片序列帧播放工具】

前言 一、CanvasKeyFrames 是什么&#xff1f; 用来做canvas动画的工具。 二、使用步骤 效果如图&#xff1a;上下波动的线条 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; 在html中引入&#xff1a; <script src"canvas-keyframes.js"><…

源聚达科技:开一家抖音小店有没有风险

在数字化浪潮的推动下&#xff0c;抖音小店如雨后春笋般涌现&#xff0c;成为众多创业者眼中的香饽饽。然而&#xff0c;“盛名之下&#xff0c;其实难副”&#xff0c;开设一家抖音小店并非只有风光无限&#xff0c;其背后的风险也不容小觑。 首要的风险源自激烈的市场竞争。抖…