性能测试-压力测试如何快速上手?8年资深测试总结整理,永不背锅...

2023-11-22 02:30

本文主要是介绍性能测试-压力测试如何快速上手?8年资深测试总结整理,永不背锅...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

一般我们在刚介入一个项目时,我认为可以从如下几个方面来快速的上手压测工作。

熟悉业务特性

无论是做什么类型的测试工作,都脱离不了业务。
我们的被测对象,也是基于系统架构的用代码实现的高度具象的业务系统。

如果是专职做性能测试,或者刚介入一个全新的系统进行压测,想要短时间内了解业务细节是几乎不可能的。

但为了更好的快速开展工作,我个人的经验是快速熟悉业务特性,结合自己的经验对系统有个大致的了解。

什么是业务特性呢?可以参照下面几个例子:

电商下单业务:典型的先读后写类型,要考虑库存、事务的一致性,还有响应时间的范围;
大数据&报表业务:典型的读场景,可能会涉及到缓存或者消息队列,甚至是批处理;
金融风控信审业务:这种业务对响应时间没有太高的要求,但业务链路较长,不同系统间的交互要考虑;
语音识别搜索业务:涉及到语音文字的识别转换、准确率和命中率,计算密集型业务要更关注内存资源;

上述几个例子只是参考,其实最核心的思路在于:了解业务有什么特点,对响应时间、事务一致性的要求,可能的技术实现方式是什么,用到了什么技术组件,压测时要关注哪些指标。

熟悉系统架构

聊完业务特性后,被测系统的系统架构是一定要了解的。

因为我们的工作对象是具体的系统,而且压测要关注技术指标,关注请求处理的过程以及耗时等情况。

一般来说要了解被测系统的系统架构,可以通过如下几种方式:

系统架构图&网络拓扑图;
模拟几个请求,借助链路追踪工具来绘制请求链路;
如果都没有,通过监控观察请求的变化,挨个摸底;
看业务需求的prd,了解业务之间的关系,然后映射到具体的服务和接口;

在具体工作中要灵活变通,而且这种对系统架构摸底和请求链路的了解过程,也是个人快速学习和成长的过程。

团队工作方式

团队工作方式,不仅限于性能测试团队或者测试团队,而是从需求到发布整个软件研发过程各个团队是如何协同配合的。

刚进入一个新的团队或者介入一个新项目时,可以从下面几个方面去熟悉。

主要包括:
流程:包含需求评审、提测、UAT、灰度和生产发布等主要流程以及时间节点;
环境:开发环境、测试环境、UAT环境以及生产环境,主要涉及域名、权限、负责人等;
基础工具:配置中心、注册中心、需求&缺陷管理平台、CICD流水线工具、监控分析工具等;
测试工具:包含压测工具、抓包工具、造数工具、mock工具、文档管理工具、协作办公沟通工具等;
测试方法:之前怎么做压测?对指标有没有标准或定义?测试方案测试报告的撰写要求等;
协作人员:不同业务域或者业务系统的研发/运维/DBA是谁,跨团队的沟通协作方式等;

测试环境

以日常的压测场景展开来说,正常压测都是在测试环境展开的。
那么是选择功能测试环境,还是独立的性能测试环境呢?

功能测试环境通常具备这几个特点:
发布频繁;
功能&服务不稳定;
测试场景较多且交叉影响较大;
而性能测试一次压测运行的时间相对较长(短则10min长则12小时甚至几天),且为了获得误差较小的压测结果,性能测试对服务的稳定性要求较高。

因此我建议如果有条件,还是搭建一套独立的性能测试环境更好。

搭建独立的性能测试环境要注意如下几点:
独立的域名或请求入口;
应用服务器配置和生产保持一致;
应用服务数量可以最小化(生产是集群,测试环境1台服务器部署1个服务);
边缘服务&弱依赖服务&高性能服务(全读缓存,rt几毫秒)可以考虑1台服务器部署多个应用服务或者mock解决;
缓存、消息队列、数据库配置按比例降低(比如一个mysql实例,4C8G/8C16G足以满足日常压测需要);

服务的发布版本要注意如下亮点:
本次测试范围内的服务,发布对应的分支;
本次测试范围外的服务,和生产版本保持一致;

测试数据

从某种程度上来说,测试数据也可以归纳到测试环境这个大的范畴中。

压测所涉及的数据,主要分为如下几种类型:

1、铺底数据
铺地数据可以理解为冷数据,因为正常的线上业务,数据库的表中一般是要存在一定的铺底数据的,如电商的库存数据,用户基础数据如电话号码、收货地址等。

在独立的性能测试环境中,也需要准备对应的铺底数据,因为SQL执行过程中,空表和大表对性能的影响还是很大的。

准备铺底数据,最常见的有如下2种方式:

从生产环境同步(需要进行敏感数据脱敏处理);
调用业务接口,用脚本批量生成写入(无需脱敏,符合业务逻辑即可);

2、热点数据
什么是热点数据?
比如用户的登录态信息(token)、比如优惠券、比如商品图片(常存储于CDN)。

我见过很多同学在压测时先压测登录接口,然后将登录后的token拿出来再传递给下一个请求,完全没必要这么麻烦。

可以先准备一批虚拟的测试账号,跑批登录,然后将token预热到缓存中,过期时间设置的比较长即可。

在后续的测试工作中,只需要在请求头中将token和userid按照对应顺序参数化到请求中即可。

压测的场景要符合实际的业务场景,但要考虑到效率和实现成本。

其他热点数据的准备也可以参照上述的方式,提前生成,然后预热到缓存(也有本地缓存或jar包方式)。

3、参数化数据
参数化数据指的是压测过程中脚本中需要引用到的数据。以电商业务来说,常见的有用户id、商品数据、库存数据、订单数据等。

准备参数化数据,最常见的有如下3种方式:

业务逻辑上强验证的,通过脚本跑批提前生成,再从数据库中拿出来使用;
简单的自增逻辑(如订单编号),可以通过压测工具提供的插件自增生成或写代码实现;
只校验字符串位数或不为空的场景,用随机数或uuid生成即可;

做完了上述的几点数据准备工作,最后要做的就是对数据可用性进行验证,看看它是否如预期满足压测需要。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只要肯拼搏,天道酬勤。挫折和失败只是暂时的,不放弃才有机会成功。迎难而上,超越极限,拥抱未来,成就辉煌人生。

每一次努力都值得尊重,每一次坚持都值得赞扬。不要怕困难,不要怕失败,只要保持坚定的信念和毅力,成功就在不远处等待着你。

每个人都有无限的潜能,只是需要不断挑战自己才能发掘出来。不要因为失败而停下脚步,让每一次跌倒都成为你前进的动力,最终迎接成功的喜悦。

这篇关于性能测试-压力测试如何快速上手?8年资深测试总结整理,永不背锅...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406826

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase