13年测试老鸟,接口性能测试总结整理,据说这是全网最全的...

目录:导读

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


前言

性能测试按照不同视角,可以分为以下几类:

用户视角的性能:
用户角度感受到的网站响应速度的快和慢。从用户在浏览器输入网址/打开应用,到整个页面呈现给用户的耗时。包含了用户端发送请求,服务端收到并执行请求,返回请求,客户端收到之后渲染的总时间。

开发人员视角的性能:
包括系统吞吐量,并发处理能力,系统稳定性,响应延迟等。如果发现有不满足要求的地方,需要定位出问题所在,并给出解决方案。

运维视角的性能:
主要关注基础设施性能和资源利用率,如网络运营商带宽能力,服务器应急配置,数据中心网络架构,服务器和网络带宽的资源利用率等。

1、为什么要做接口压力测试

清楚自己所提供的接口性能是多少;
判断出系统可能存在的问题(代码,DB,cache,系统配置,容量等),提前解决;
为设置接口的限流/熔断做参考;

2、接口压力测试的局限性

接口压力测试只注重单业务的接口性能,进行压测的时候,只关注个别接口的性能。
接口大部分时间是在线下进行,可能线上线下机器配置不一样,而且线上同时在进行着各种不同的业务。

因此在线下进行接口压力测试的结果,只能作为线上配置的一个参考值。

3、谁来做接口压力测试

对接口比较熟悉的开发人员来做,这样有以下好处:
对接口实现比较了解,对接口中潜在的问题有一定的预判
比较容易对接口进行优化(业务逻辑层面和技术层面)。

4、如何做接口压力测试

通常使用 Jmeter ,loadRunner 等进行压力测试。

5、如何设计接口压力测试方案

如何确定并发数:
可以通过尝试的方式。第一次压测的时候,可以设置自己预期接口需要达到的并发数,进行压力测试。然后通过二分法进行调整。

举例:如果期望的并发数是512 ,第一次压测并发数设置为512 ,如果系统没有压力,第二次并发就尝试设置为1024。如果系统有压力,下次就设置为256。通过逐渐尝试的方式,找出当前接口的并发阈值。

如何确定总请求次数:
有时候单纯的通过并发数并不能完全发现系统的压力状况,因为并发数只能测出系统的处理能力。

但是有时随着长时间的调用,系统可能会出现其他问题。比如:随着数据量的增多,存储磁盘满了、内存缓存用光,缓存服务使用磁盘缓存而拖慢系统等情况。

为了避免这种情况,可以尝试用现有线上业务每天产生的数量乘以一定的天数(天数的大小视业务的具体情况而定,推荐180天以上),作为接口压力测试的总请求次数。

接口压力测试数据的选取:
通常随机选择数据。但是要注意重复进行压力测试对性能的影响。

比如:
第一次压测的 Id 是从2500W 到2600W 之间选择的,下次用同样的 Id 范围做压测的时候,如果接口实现中有缓存,则会很大程度影响压力测试的结果,对压力测试的解读时候,要考虑到这个因素。

另外,使用不存在的 Id 去进行压测,结果并没有太大意义。

6、压力测试报告应该包含哪些结果

接口压力测试结果

11

服务器压力:
每次接口压力测试时,接口所在服务的服务器 cpu/jvm 使用率历史记录,jvm堆大小,响应时长图 (借助 pinpoint 查看),cpu load 值(top 命令),gc 信息等。

7、如何解读压力测试的结果

对于接口压力测试结果:
关注 响应时间是否符合要求,响应时间(前99%) 是不是在可允许的范围内。最大值是多少,是否可以容忍。 通常来说,错误百分比应该为0。

对于服务器压力:
看 cpu 使用率是否在可接受范围内,jvm 堆大小是否变化频繁,是否有 fullGC。Young GC 耗时,CPU load值是否在可接受范围内。 响应时长图是否平滑(如果有毛刺现象,需要找出原因)。

8、如何根据测试结果定位性能问题

响应时间不符合要求:
通过 pinpoint 观察调用链,找出耗时比较长的步骤,进行优化

并发数达不到要求,可以从以下几个方面进行考虑:
是否发生系统依赖资源争用(比如:数据库连接,业务处理线程数等)
业务流程/代码性能是否可以优化 c 在运行的过程中是否频繁 GC

CPU 使用率过高:
在运行的过程中是否频繁 GC;
是否发生过多的线程切换 c 程序中是否有比较耗 cpu 的代码;
cpu 内存 磁盘 io 网络 io 服务器 top 命令 vmstat pidstat / iostat;

sar jvm java mission Control 工具 jmap 命令,结合eclipse mat 工具进行分析
全链路:pinpoint

9、修复性能问题

除了只可能在极端压力测试情况下会发生的性能问题,并且修复代价过大的问题可以不进行修复(但是要在压力测试报告中体现出来此问题,以及解决方案),其他问题都必须进行修复。

如果没有专门的接口压力测试环境,记得做完接口压力测试之后,将测试数据清除(缓存,数据库,消息中间件中未消费完毕的消息 等)。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

奋斗是勇者的旗帜,坚持是胜利的密码。不论现在如何困顿,只要拥有梦想和努力,就能超越自我,征服未来。坚定信念,追逐热爱。

每一个奋斗者都是命运的雕塑家,用汗水雕刻出自己的辉煌。不论困难多么险峻,都要坚定前行,坚持不懈,唯有奋斗,方能驾驭命运的舵,开启属于自己的辉煌人生!

奋斗是心灵的舞蹈,只有不断磨砺才能跳出优美的旋律。不论前路崎岖还是艰险,相信自己的勇气与智慧,追逐梦想,凝聚力量,在奋斗中绽放出人生最灿烂的光芒!

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

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

相关文章

【云原生系列】openstack搭建过程及使用

目录 搭建步骤 准备工作 正式部署OpenStack 安装的过程 安装组件如下 登录页面 进入首页 创建实例步骤 上传镜像 配置网络 服务器配置 dashboard配置 密钥配置免密登录 创建实例 绑定浮动ip 免密登录实例 搭建步骤 准备工作 1.关闭防火墙和网关 systemctl dis…

运维高级学习---MySQL备份恢复

数据库备份,数据库为school,素材如下 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );创建sco…

【周赛第66期】题目、解答与疑义

目录 感想 判断题1.单选题1.2.(有疑义) 填空题1. 编程题1.路灯亮度题目题解答案 2.题目题解答案 感想 (吐槽) 在线IDE真不好用,不说不如CLion,抄一下leetcode的也好啊…… 希望支持比赛时实时看别人通过了…

MATLAB 创建神经网络模型的patternnet和newff函数区别

patternnet和newff都是在MATLAB中用于创建人工神经网络的函数,但它们有一些区别和适用场景。 网络类型: patternnet:用于创建多层感知器(MLP)类型的神经网络,MLP是一种前馈神经网络,由输入层、若…

Jupyter(CPP内核) || 如何在使用xeus-cling时添加第三方库

国内的搬运真是管杀不管埋。在CSDN上找了半天没有找到在xeus-cling添加第三方库的,最后还是只能自己到处去看英文文档。 先贴上英文文档的链接:Introduction — xeus-cling documentation 构建二进制文件时,通常在构建工具中指定包含目录和第…

抖音SEO源码开发指南:介绍如何开发抖音SEO源码的基本步骤和要点。

一、 抖音SEO源码开发指南: 确定目标:首先要明确开发抖音SEO源码的目标是什么,是提高搜索排名还是增加用户量等。根据不同的目标来制定开发策略和思路。 分析竞争:对于同类产品,要进行竞争分析,了解对手的…

threadLocal如何支持线程池获取

问题: ThreadLocal默认不支持子线程获取&#xff0c;而InheritableThreadLocal支持子线程获取threadLocal值&#xff0c;但是如果使用线程池&#xff0c;核心个数为1则子线程会获取到上一个threadLocal的值。 解决&#xff1a; 1.引入transmittable-thread-local jar <d…

k8s集群部署(使用kubeadm部署工具进行快速部署,相关对应版本为docker20.10.0+k8s1.23.0)

1. 安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘20GB或更多可以访问外网&#xff0c;需要拉…

在Mac系统下搭建Selenium环境并驱动Chrome浏览器

本文带领那些使用Mac的童鞋们实现Selenium驱动Chrome浏览器&#xff0c;虽然会有坑&#xff0c;但是我们可以凭借敏捷的身手躲过。下面就开始吧&#xff1a; 安装selenium 打开终端 ->pip安装&#xff08;安装命令&#xff1a;pip3 install selenium&#xff09; 安装浏览…

如何在 SwiftUI 中使用 Touch ID 和 Face ID?

1. 需要通过指纹&#xff0c;面容认证后才能打开 App 2. 添加配置 需要向 Info.plist 文件中添加一个配置&#xff0c;向用户说明为什么要访问 添加 Privacy - Face ID Usage Description 并为其赋予值 $(PRODUCT_NAME) need Touch Id or Face ID permission for app lock 3. …

LeetCode-0727

SQL50 基础 1633 select contest_id,Round(count(*) * 100/(select count(*) from Users),2) as percentage from Users cross join Registerusing(user_id)group by contest_idorder by count(*) desc,contest_id1211 select query_name , Round(avg(rating/position),2) as…

HTML不常用但是好用的标签

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

Git竞合处理

Gitee新建一个代码仓库&#xff0c;clone到本地&#xff0c;模拟竞合的情况出现 这里仓库已经配好了ssh&#xff0c;所以没有添加账户绑定的步骤 clone到本地 模拟A同学Clone代码 git clone 项目地址新建一个文件&#xff0c;上传到仓库 push到仓库 代码仓库已经可以看到了…

HEVC网络适配层介绍

h265 的分层结构 分层结构的目的 ○ 网络类型多种多样&#xff0c;不同的网络环境具有不同的特性&#xff0c;压缩视频在其中进行传输必然会受到影响&#xff1b;比如不同网络的 MTU 有所不同&#xff1b; ○ 不同的应用场景对视频有不同的需求&#xff0c;视频业务会喜用不…

springboot快速整合腾讯云COS对象存储

1、导入相关依赖 <!--腾讯云COS--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.0.1</version></dependency><dependency><groupId>com…

【矩特征】图像矩特征

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 cv2.moments() 矩特征 1. 正文 (1). 空间矩 零阶矩&#xff1a;m00一阶矩&#xff1a;m10,m01二阶矩&#xff1a;m20,m11,m02三阶矩&#xff1a;m30,m…

Python3 学习笔记 ~ 海象赋值表达式

Python 海象运算符_小嗷犬的博客-CSDN博客 myStr "abcdefghijgk"# n len(myStr) throw out exception when compling if n len(myStr) > 10 : print(f"{myStr} length: {n} is too long, expect less 10") else:print(f"{myStr} length: {n} is…

三维虚拟电子沙盘数字沙盘态势推演教程第12课

三维虚拟电子沙盘数字沙盘态势推演教程第12课 设置system.ini 如下内容 Server122.112.229.220 userGisTest Passwordchinamtouch.com 该数据库中只提供 成都市火车南站附近的数据请注意&#xff0c;104.0648,30.61658 SDK中自带了一套 导航系统&#xff0c;用的是比较详细的…

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller&#xff08;控制器存储&#xff09; 1.2.2 Service&#xff08;服务存储&#xff09; 1.2.3 Repository&#xff08;仓库存储&#xff09; 1.2.4 Component&#xff08;组件存储&…

java项目之网络视频播放器(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的网络视频播放器。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…