一文2500字从0到1实现压测自动化!

大家好,我是小码哥,最近工作有点忙,一直在实现压测自动化的功能,今天来分享一下实现思路

我所在的业务线现在项目比较少了,所以最近一个月我都没有做业务测试,需求开发完后RD直接走免测就上线,无需QA介入测试

而Q3组里定了一个工作量很多的技术Topic,老板期望进一步实现端到端交付,从Server、FE、客户端单独进行功能测试,转变成只有客户端测试,通过测试客户端和嵌入在客户端上的前端页面来覆盖Server的业务逻辑,从而减轻整体QA的人力消耗,说白了就是降本增效

要想实现完整的端到端交付,意味着许多人工的工作,需要进行自动化,并且有合理的数据指标表明某环节达到通过标准(这里指准入标准,准出标准)

研发测试流程一般会经历如下阶段:需求发布评审-》交互设计评审-》开发技术评审-》测试用例设计评审-》需求准入-》需求测试-》需求准出-》上线/发版

准入标准指RD可以将改动的代码合入到代码库的标准(数据指标有可以卡单元测试增量代码行覆盖率等),准出标准指改动的代码可以上线或者发版的标准(数据指标有测试覆盖率等)

  • 项目各阶段规范制定(含通过标准)

  • 测试用例自动生成(分为两部分:给RD自测的准入测试用例,QA测试阶段要的测试用例)

  • 测试环境自动部署(提测后根据提测分支自动部署测试环境)

  • 压测自动化能力

本篇文章只谈压测自动化如何进行实现

日常压测步骤

洋子目前都在做服务端测试,日常测试工作主要就是接口测试,通过CR开发写的代码、后端日志、查数据库或者查Redis数据找Bug

虽然看开发的代码对于从来没有看过代码的同学来说比较困难,新手往往看不太懂复杂的代码逻辑,但在一个岗位已经快4年了,我发现后端写的代码大部分其实也是在CRUD,对于我来说也没有什么成长性了

所以我也在寻求工作的转变(当前我的业务测试经验已经很丰富,想着进一步提升自己的开发水平,也方便后续自己跳槽),正好我所在的业务线对于大项目都会涉及压测(就是常说的性能测试),压测相当耗费人力,要完成整个压测任务,通常需要执行下面几个步骤:

  • 制定压测方案

  • 准备压测数据,配置压测词表

  • 执行压测前,发送压测风险通告

  • 执行压测中,观察压测平台监控

  • 完成一次压测任务,查看本次压测任务的报告,问题分析及调优

  • RD修复压测问题后进行复压,完成整个项目的压测后,发送项目压测报告

制定压测方案

压测方案主要包含压测对象(如果是服务端的压测,一般就是对API接口进行压测),压测场景,压测数据,压测域名信息,接口参数,发压的目标QPS等

对于压测场景:一般指压测的方法,压测时候需要确定是单接口发压,还是链路级别发压,另外要确定都是读接口发压还是有写接口发压,对于读写接口混合压测,根据情况先压写接口生产数据,再压读接口(压测之前建议了解清楚业务逻辑,具体情况需要具体分析)

链路级别发压:一般指有关联性的接口按照一定的顺序进行发压,比如现在我进入了抖音直播间,进直播间依次调用了A,B,C三个接口,那么要压测这个进场链路,尽可能模拟真实场景,就要同时对A,B,C三个接口同时发压,如果只是单独压测A或B或C接口,就可能导致压测结果和实际结果不符

构造压测数据,配置压测词表

对于服务端的压测,压测数据一般指动态接口请求参数的数据压测数据(比如账号id信息,cookie等)一般可以提前准备存储在一个文件当中,在压测时解析文件,读取其中的动态参数替换到原本的接口请求参数

那么压测词表又是什么呢?

我们内部有个通用压测平台,配置好压测词表和压测场景基础信息(如压测域名)后就可以发压

压测词表:如果是压测HTTP协议的后端接口,压测所需的元数据,每一行代表一个请求,包含请求的 method、path、params、header、body等等

以上数据构造方式还是有一些不足,因为压测数据是人工通过写脚本的形式构造出来,跟线上的数据还是有差异,为了进一步模拟线上压测数据构造还可以根据采集线上Nginx日志文件把压测数据存入到数据仓库,构造压测词表时,从数仓中筛选出相应的数据,作为压测所需的词表文件,当然要想实现这些,需要有公司内部基建来支持

还有些同学是用Jmeter去压测,那么关于压测数据的构造,Jmeter支持压测动态参数化数据(支持配置CSV文件,用Csv Data配置元件来进行参数化),以及正则表达式解析多个数据,压测词表也可以通过配置HTTP请求来达到同样的效果

压测风险通告

在压测前,要发送压测风险通报,因为压测的接口如果有依赖的下游,在压测过程当中可能因为流量太大,影响到下游服务,可以拉一个压测群,把对应服务的负责人都拉进去,然后压测前发送压测风险通报

压测中观察监控&压测问题分析、调优

压测报告查看&发送

完成单次压测任务后,一般需要根据性能指标(实际QPS和目标QPS,服务可用性,错误码,平均响应时间等)结合后端日志做出判断是否有问题,发送对应压测报告

如何实现压测自动化

我们先根据上面的压测步骤总结下哪些地方需要人工执行,哪些虽然要人工执行但可以自动化,哪些要人工执行但自动化的成本相当高,先实现成本较低的部分

按照我们的老板的话,所有的人工操作都可以自动化,虽然听着有些激进,但还是有一定道理

根据压测的各个步骤来进行实现成本分析

  • 制定压测方案(需要人工操作,自动化成本高)

  • 准备压测数据,配置压测词表(需要人工操作,自动化成本高,压测配置平台暂无相关接口)

  • 执行压测前,发送压测风险通告(自动化成本低,可用机器人在群聊自动触发)

  • 执行压测中,观察压测平台监控(自动化成本低,观察监控可配置熔断策略,无需人工再观察)

  • 完成一次压测任务,查看本次压测任务的报告,问题分析及调优(生成压测报告自动化成本低,问题分析需要人工操作)

  • RD修复压测问题后进行复压,完成整个项目的压测后,发送项目压测报告(复压部分可以自动化为,复制此前的压测任务,降低配置成本)

我画了一张设计压测自动化的设计图,见下图

图片

对于新增接口压测还是需要前置人工配置压测词表,如果有相关接口,还可以结合白盒分析技术自动化生成压测词表,实现压测全流程自动化

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

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

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

相关文章

手机ip切换成全局模式怎么弄

在当今数字化时代,智能手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开它的陪伴。随着网络技术的不断发展,手机IP地址的切换技术也逐渐走进大众视野,中,“全局模式” 作为IP切…

windows环境下vscode编写c语言连接mysql

创建一个文件夹test02 在文件夹中创建test.c文件 用vscode打开test02文件夹 自动生成tasks.json和launch.json文件,需要安装这里通C/C Runner插件来自动生成json文件和一些文件夹。 接下来配置mysql 本地已经安装了mysql数据库,此安装过程省略。 有…

java如何部署web后端服务

java如何部署web后端服务 简单记录一下,方便后续使用。 部署流程 1.web打包 2.关掉需要升级的运行中的服务 /microservice/hedgingcustomer-0.0.1-SNAPSHOT/conf/bin/ 执行脚本 sh shutdown.sh 3.解压文件 返回到/microservice 将升级包上传到该路径&#x…

JAVA IDEA 取消掉Warning:(22, 14) Class ‘XXXController‘ is never used 提示信息

方法一:代码修改 无用的方法: 删除对应的代码。增加该类对应的应用实现。 方法二:取消掉提示 找到settings—Editor—Inspections,搜索Unused declaration 右边的勾取消掉,对应的校验属性。

座舱软件开发“道与术”

脑图 仅仅个人归纳见解,欢迎专家莅临指导。

【CHI】CHI协议自问自答

学习CHI有一段时间了,如今回过头来,再读协议,一些问题做个记录。如果有错误的地方,欢迎指正。如果有其他的问题,也欢迎留言讨论。 spec: IHI0050F_amba_chi_architecture_spec 【持续更新ing】 目录 1. …

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

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

JVM成神之路

目录 JVM入门关: 一:JVM的内存布局是咋样的? 二:方法区,永久代,元空间有什么区别? 三:常量池和字符串常量池有什么区别? 四:什么是堆溢出,什…

结构化系统分析,结构化系统设计(正片)

结构化分析方法:是面向数据流进行需求分析的方法,是用抽象模型的概念,按软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。 数据流图(DFD)&#xf…

Linux系统:本机(物理主机)访问不了虚拟机中的apache服务问题的解决方案

学习目标: 提示:本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案 Linux系统:Ubuntu 23.04; 文中提到的“本机”:代表,宿主机,物理主机; 首先&#xff0c…

吴恩达深度学习笔记(7)

误差分析: 你运行一个算法代替人类计算,但是没有达到人类的效果,需要手动检查算法中的错误,对模型的一些部分做相应调整,才能更好地提升分类的精度。如果不加分析去做,可能几个月的努力对于提升精度并没有…

旋转花键材质及运用场景

旋转花键的材质有很多种,其材质选择是一个涉及多方面因素的重要决策,‌主要取决于应用场景的具体要求,包括设备的运行环境、负载大小、运行速度以及所需的耐磨性和耐腐蚀性等因素。 1、碳钢:价格低廉、具有较好的韧性和耐磨性&…

【分享】项目开发中的计算问题

事件背景 最近也就上个月吧,拿到一个新的需求,新建一个页面,三个Grid联动,涉及很多的页面和sql以及Java计算。 简略的画个表格表示一下: 第一个Grid: 第二个Grid: 第三个Grid: 业…

openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

前言 本文主要介绍如何在openKlyin系统中设置ssh连接,并结合cpolar内网穿透工具实现远程也可以ssh连接本地局域网内部署的openKlyin系统. openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式,打造具有自…

Axure显示与隐藏——元件动作一

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:显示与隐藏 主要内容:显示/隐藏/切换三种效果,动画效果,更多效果 应用场景:元件自身状态变化、操作…

LinkedList作者:我虽然开发了LinkedList,但是我更爱用ArrayList

感谢Java面试教程关于LinkedList经验分享 PS冷知识:LinkedList的作者更爱使用ArrayList。 ArrayList 和 LinkedList 是 Java 中两种常见的 List 实现类,它们在底层数据结构、性能特征和使用场景上有显著的区别。 底层数据结构: ArrayList …

Flux.never 使用说明书

public static <T> Flux<T> never()Create a Flux that will never signal any data, error or completion signal. 创建一个永远不会发出任何数据、错误或完成信号的 Flux。 Type Parameters: T - the Subscriber type target Returns: a never completing Flu…

软件缺陷报告

软件缺陷报告样例 软件缺陷基本内容 标题&#xff1a;一句话概述缺陷预置条件&#xff1a;缺陷的前提条件重现步骤&#xff1a;缺陷出现步骤期望结果&#xff1a;没有出现缺陷应该的结果实际结果&#xff1a;缺陷结果 软件缺陷的状态 新建&#xff08;激活&#xff09;->…

idea2024启动Java项目报Error running CloudPlApplication. Command line is too long.

idea2024启动Java项目报Error running CloudPlApplication. Command line is too long. 解决方案&#xff1a; 1、打开Edit Configurations 2、点击Modify options设置&#xff0c;勾选Shorten command line 3、在Edit Configurations界面下方新增的Shorten command line选项中…

前海一个很偏僻的路边免费停车点

​这个偏僻的路边免费停车点具体位置在前海金融中心大厦附近的中国中铁门口&#xff0c;大概有可以停30~50个位置的样子。缺点是很多灰尘哈。第一次路过的时候&#xff0c;我还以为很多车在等红绿灯&#xff0c;靠近才发现&#xff0c;这些车只是停在路面上。其中要想知道看车子…