两个案例全面阐述全链路测试怎么做

news2024/10/19 8:58:00

首先我们先针对全链路功能测试部分进行一下讲解。去年的时候,有一家电商公司可能知道我一直在帮银行做相关的测试,就请我帮他们去做一些规划。这个平台有虚拟订单,也有实体订单,方式不太一样。

还涉及到分账分佣以及跟银行的对接,如个人通过微信朋友圈也可以进行推销,有上下级关系,不同的层级中也涉及相应的分账。整个测试过程中涉及到资金的交互以及商品是否能买卖等情况。

我们在测试的过程中发现小金额订单的结算过程中,会出现无法正常扣钱、正常退款等情况,如1毛钱、1分钱。同时在分摊分账的过程中计算出来也有一些问题。

整个过程中我们通过模拟准生产环境去跟第三方平台进行业务交互,模拟各种业务交易的场景是否能够正常处理。这个过程需要测试人员用真实的、不同的银行卡账户去买东西,用真实的手机号去注册。除了提货这个环节,其他的环节全部都是真实的。

全链路的测试过程中会涉及到不同系统的业务交互关系,我们在测试的过程中一定要将业务场景梳理出来,去进行测试,以上这部分就是全链路测试的功能性测试。

接下来我们讲一下全链路测试的非功能性的测试。前段时间我帮一个银行做的一个项目,他们是做了系统的重构,已经上线了十几天了。数据量非常大,几千万的数据量。在这基础上去做测试。

在这个系统中我不是测试人员,我是负责SQL调优的。我通过全链路的监控方式把比较慢、耗时比较高的语法定位出来,定位出来之后进行调优。

在这个系统中测试工作是由甲方的测试人员自己去做,我只是负责调优。所以在测试过程中覆盖度的高低情况我并没有去参与。

我只负责在开发和测试人员在测试、开发的过程中,通过第三方监控工具把交易耗时的时间和交易码等与相对应的语法定位出来,定位出来之后,针对SQL进行调优。是否第三方有交互我就不负责了。


全链路压测就是预判上线之后是否会出现故障,同时也是降低运维成本。如果上线之后问题比较多,开发人员和运维人员就会每天忙于运维,而没有时间去做新的功能的开发。这也是性能测试人员和全链路测试人员在企业存在的重要性和价值。

大家将来上升到测试管理人员或者性能测试管理人员的时候,如果老板对你们的价值产生质疑,那我们可以回应他,如果没有做性能测试,如果出现意外事件,你要多购买多少台硬件。

开发人员和运维人员要定位问题、还要请人去复测,这个时候成本就更高了。另外客户的体验也会很差,一个系统经常出问题,客户还会继续跟你合作吗?

我们当时在测试这个系统的时候,出现的问题是上线后第三方的外呼太多了。上线之前我们内部的系统我已经调优过了,几乎都是在毫秒级以内了。

但是在业务过程中,交易调度了三四十次。如果每次1秒,那就是三四十秒了,但是我们内部语法是毫秒级的。这里的问题就是架构设计的问题。

如果我们在全链路压测中遇到这类问题,排除SQL没问题,我们就要看看转换SQL是否有问题,就会发现是for循环一直调用,导致问题出现,这样就可以把问题定位出来了。

刚才我们讲到了性能测试中响应时间慢的问题,但是我们的全链路测试不能只靠这个指标。我们作为性能测试专家也好、性能测试支持人员也好、我们要了解业务的拆分和流量的预估。

流量的预估指的是QPS到这台服务器的流量是多少,可能每秒钟要写入100万笔,另一台服务器是1000万笔,那我们前端的并发要设置多少,均摊到不同的数据库才可以达到每秒钟我们需要的数量。这一块内容后面我们也会进行详细讲解。

在全链路测试的过程中,如果出现软、硬件不够用的情况,我们要考虑是否需要扩容集群来满足相应的指标,或者并发量少的时候要递减。

之前我帮一家公司做问卷调查,一个全国性的学生就业情况调查。当时他们担心会有问题,让我们帮忙测试调优。流量一直正常开着,成本会很大。

给他们建议,在高并发的时候通过弹性的方式无限扩容,来增加流量,提高网络的访问量,当这个问卷调查做完后,就把流量降到最低,通过这种方式来降低成本。

财务系统这类系统会涉及到跨年度的大量数据结算。之前我遇到一个系统,涉及十几年共计好几千万笔数据,好多表都通过填表的方式去核算、计算。他们问我,这个能不能帮忙调优,我说我只能部署到能正常展现出来,不让它很慢,但是没办法达到结果秒级反馈。

他们需要多少毫秒之内能出来,我说没办法,这么大的数据量,最多只能到几秒以内。十几年的数据都要去计算,建议通过跑批的方式结算出来,不能实时结算,这样才能提高效率。

我们在全链路测试的过程中,要把容量的规划也要考虑进去,才能知道有没有问题。这个系统存在问题已经十多年了,到了我这里才把这个问题处理掉。

之前他们也有做测试,在测试的过程中只是开发人员帮助测试人员构造数据,构造完成之后,就按照比例扣减,在某种环境下去压测。

我们当时很大胆地要求他们在硬盘空间充足的情况下,把原来的客户数据脱敏导出来,模拟大量计算的过程中有没有问题。出了问题之后,我们再去做调优。

全链路测试我们要把交易流、场景流、容量、硬件设施设备都要大胆的提出来,扩展进去,做不到的提出来。在测试方案提出之后,让老板知道我能做这些事情,做不到不是我能力的问题,是资源的问题。

接下来的文章会继续为大家介绍全链路测试的场景分析以及技术方法,欢迎大家继续关注。

(本系列文章根据《优品软件培育计划》公益直播内容整理,可以私信我获取直播回放链接。)

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

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

相关文章

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【IC设计】复旦微行业分析

文章目录 概述各产品线安全与识别芯片:非挥发存储器:智能电表 MCU :集成电路测试服务: 前景公司是FPGA领军企业,在国产替代背景下深度受益优势 1:公司最早推出亿门级 FPGA 产品,提前卡位 28nm 赛…

python的多线程和多进程

首先需要明确的是,多进程和其他语言的一样,能够利用多核cpu,但是python由于GIL的存在,多线程在执行的时候,实际上,每一时刻只有一个线程在执行。相当于是单线程。然而多线程在某些情况下,还是能…

爬虫逆向-js进阶

1.作用域和闭包 //作用域 // var a 3 // // function test(a){ // var a 1; // console.log(函数内部,a) // } // test(2) // // console.log(a)//闭包 // function jiami(){ // function encrypt(){ // console.log(在这里进行加密了) // } // p…

GaussDB高智能--自治运维技术(中)

目录 2.4 日志分析 (1)日志解析阶段 (2)日志分析模型的训练 (3)在线检测模块 2.5 慢SQL发现 (1)训练阶段 (2)预测流程 2.6 慢SQL诊断 &#x…

只想简单跑个 AI 大模型,却发现并不简单

之前我用 Ollama 在本地跑大语言模型(可以参考《AI LLM 利器 Ollama 架构和对话处理流程解析》)。这次想再捣鼓点进阶操作,比如 fine-tuning。 我的想法是:既然有现成的大模型,为什么不自己整理些特定领域的数据集&am…

如何捕捉行情爆发的前兆

在金融市场的激烈角逐中,每一次行情的爆发都是投资者获取丰厚回报的关键时刻。然而,如何识别并把握这些时刻,却是一门需要深厚金融专业知识和敏锐洞察力的艺术。今天,我们就来深入探讨行情爆发的初期信号,揭示那些能够…

锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】

1 锥线性对偶理论 本部分看似和分布鲁棒、两阶段鲁棒优化没什么关系,但值得优先学习,原因将在最后揭晓。 二阶锥 二阶锥(second-order cone,又称ice-cream/Lorentz cone)的形式为: 非负象限锥 半正定锥 …

初入Linux网络

1.网络发展 独立模式:计算机之间相互独立——>网络互联:多台计算机连接在一起完成数据共享——>局域网LAN:更多的计算机通过交换机和路由器连接在一起——>广域网WAN:将相隔万里的计算机连在一起。 2.协议 计算机之间…

【AI论文精读5】知识图谱与LLM结合的路线图-P3

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 P1,P2,P4 5 LLM增强的知识图谱 知识图谱(KGs) 以其结构化的方式呈现知识而闻名,它们已被广泛应用于许多下游任务,如问答系统、推荐系统和网页搜索等…

(一)Mysql篇---Mysql整体架构

MySql框架浅析 首先,上一张图先让各位看看大致结构: 从上到下,依次说一下结构: 连接层:这里主要是处理客户端和数据库连接的,直接使用的Tomcat的连接池,可以调整最大连接数; 服务…

OpenEuler 软件安装与服务管理全攻略

在 OpenEuler 操作系统的日常使用中,软件安装和服务管理是至关重要的操作环节。本文将以严谨的方式为大家详细阐述 OpenEuler 中安装软件的多种方法,涵盖 RPM、DNF 的概念与操作命令以及操作实验,同时还包括源代码软件的安装方法和使用 syste…

JDK-23与JavaFX的安装

一、JDK-23的安装 1.下载 JDK-23 官网直接下载,页面下如图: 2.安装 JDK-23 2.1、解压下载的文件 找到下载的 ZIP 文件,右键点击并选择“解压到指定文件夹”,将其解压缩到您希望的目录,例如 C:\Program Files\Java\…

react18中如何实现同步的setState来实现所见即所得的效果

在react项目中,实现添加列表项,最后一项自动显示在可视区域范围!! 实现效果 代码实现 import { useState, useRef } from "react"; import { flushSync } from "react-dom"; function FlushSyncRef() {con…

MySQL面试专题-索引

一、MySQL为什么要选择B树来存储索引? MySQL的索引选择B树作为数据结构来进行存储,其本质原因在于可以减少IO次数,提高查询效率,简单来说就是保证在树的高度不变的情况下可以存储更多的数据。 (一)IO角度 在…

【状态机DP】【记忆化搜索及翻译递推】【空间优化】力扣3290. 最高乘法得分

给你一个大小为 4 的整数数组 a 和一个大小 至少为 4 的整数数组 b。 你需要从数组 b 中选择四个下标 i0, i1, i2, 和 i3&#xff0c;并满足 i0 < i1 < i2 < i3。你的得分将是 a[0] * b[i0] a[1] * b[i1] a[2] * b[i2] a[3] * b[i3] 的值。 返回你能够获得的 最大…

Chromium form表单post提交过程分析c++

form表单get提交参考之前文章Chromium 前端form表单提交过程分析c-CSDN博客 一、表单post提交测试例子&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head&…

【C++11】可变模板参数详解

个人主页&#xff1a;chian-ocean 文章专栏 C 可变模板参数详解 1. 引言 C模板是现代C编程中一个非常强大且灵活的工具。在C11标准中&#xff0c;引入了可变模板参数&#xff08;variadic templates&#xff09;&#xff0c;它为模板编程带来了革命性改变。它的出现允许我们…

第五课:Python学习之if语句

判断&#xff08;if&#xff09;语句 目标 开发中的应用场景if 语句体验if 语句进阶综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的&#xff0c;我们每天都在做各种各样的选择&#xff0c;如果这样&#xff1f;如果那样&#xff1f;…… 程序中的判断 # 定义…

faust,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - faust。 Github地址&#xff1a;https://github.com/robinhood/faust 在分布式系统和实时数据处理的世界里&#xff0c;消息流处理&#xff08;Stream Processing&#xff09;变得越来越重要。Faust 是一个 Python 库…