性能测试Ⅱ(压力测试与负载测试详解)

协议

性能理论:并发编程 ,系统调度,调度算法

监控

压力测试与负载测试的区别是什么?

负载测试

在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量

目的:

1、验证服务被部署的系统出现资源瓶颈的时候,服务依然能够提供产品的特性

2、找到系统的最大饱和状态,或者是最大的处理极限,为系统后续的容量规划提供参考的数据

压力测试

     该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点:

• 检查系统在处于压力情况下时应用的性能表现

• 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上)

• 这种方式一般用于测试系统的稳定性

稳定性:指的是系统在最大的极限下,依然能够正常的访问,不会对客户造成任何的影响。

验收负载测试

      在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。

流量回放

获取生产环境的网络请求,拿到QA的环境执行

配置测试

      被测环境软硬件环境参数的调整,达到最优的分配原则。

JVM:CPU,内存

MySQL:连接数,超时参数

操作系统监控:CPU和内存 使用率达到多少的时候触发报警机制

达到一个好的系统的表现:服务在客户端高并发的情况下依然能够正常的为客户提供业务的能力和服务

并发测试

       模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是:

• 发现系统中可能隐藏的并发访问(线程同步和死锁)的问题

• 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用(调度算法)情况

• 使用的测试工具如profiler等

 

高并发情况下

1、线程同步

2、死锁

业务:文件读写的时候特别容易发生

死锁:

A和B两个,为了保持线程同步,那么A操作B的时候,锁定B,B操作A的时候,锁定A。

线程同步:

A和B两个任务,有100张车票,A和B同时进行抢购,各抢100张

可靠性测试给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行。

稳定性测试:系统在持续运行很长的一段时间后依然能稳定的运行。

JMeter执⾏原理

      JMerer通过线程组来驱动多个(也可以理解为LR⼯具⾥⾯的虚拟⽤户)运⾏测试脚本对⽬标服务器发起⼤量的⽹络请 求,在每个客户端上可以运⾏多个线程组,也就是说⼀个测试计划⾥⾯可以包含N个线程组。

继续

如果有⼀个请求错误,其他的请求会继续,不会因为有⼀个请求错误的导致其他请求终⽌。

 

启动下⼀个进程循环

如果请求出现问题,同⼀脚本中的其他请求就都不再执⾏,直接执⾏下⼀个进程的信息。如登录后下⼀个请求是查 看个⼈主⻚,但是因为登录出错,下个接⼝查看个⼈主⻚就不会被执⾏。

 

停⽌线程

停⽌线程指的是如果请求失败,就停⽌当前线程执⾏,不再继续执⾏。如果线程数很多的,那么导致的结果是停⽌ 的线程就会很多,处于真正运⾏的线程会很少,最后导致服务器的负载不够,⼀般不建议构选改选项。

 

停⽌测试

如果请求失败,那么停⽌所有线程执⾏,也就是说停⽌整个测试。

 

⽴即停⽌测试

如果请求失败,⽴即停⽌整个测试场景的执⾏。

线程数

⼀个线程可以理解为对应模拟⼀个⽤户,所以线程数越多,那么也就认为可以模拟的⽤户数越多。

Ramp-Up时间(秒)

该属性指的是所有线程从启动到开始运⾏的时间间隔,单位是秒,也就是说所有线程在多⻓时间内开始执⾏,如线 程数设置50,设置的时间为5秒,那么计算的公式为:

循环次数

循环次数可以理解为,请求的重复次数。如果选择“永远”,那么请求将⼀直进⾏,不建议这样操作。

调度器

所谓调度器可以理解为设置何时开始运⾏。

持续时间

测试计划持续多⻓时间

启动延迟

从当前时间延迟多⻓时间开始运⾏测试,也就是说点击执⾏后,仅仅是做初始化的场景,不会执⾏测试,等待延迟 到达后开始运⾏测试,执⾏的时间为持续时间设置的时间。

总的虚拟用户数是50,每秒启动10个用户,并发测试50个用户(10秒加载完所有用户,然后同时执行)

聚合报告在监听器中添加

 

Label:取样器名称

Samples:取样器运⾏次数

Average:单个请求的平均响应时间

Median:50%请求的响应时间

90%Line:90%请求响应时间

95%Line:95%请求响应时间

99%Line:99%请求的响应时间

Min:请求的最⼩响应时间

Max:请求的最⼤响应时间

Std.Dev:响应时间的标准⽅差

Error%:事务错误率

Throughput:吞吐率,也就是TPS

KB/sec:每秒数据包流量

Avg.Bytes:平均数据流量

Received KB/sec:每秒从服务器端接收到的数据量

SentKB/sec:每秒从客户端发送的请求的数量

标准偏差SD:标准偏差为您提供了一定程度的稳定性,但是,只需注意,标准偏差不会显示最慢和最快的响应,而是有助于识别响应趋势。低标准偏差意味着系统内的性能更稳定或更一致。

响应时间图的添加

 

参数化:相同的测试步骤,不同的测试数据,那么这个时候我们把测试的数据分离到文件中,在JMeter中,是通过CSV数据文件设置来实现的。

CSV Data Set Config的添加

创建一个含有登录账户和密码的文件

在CSV中添加文件,文件编码中添加UTF-8,更改名称:username,passward,

再使用${uswename}和${passward}调用变量

再到线程组中设置线程数,也就是登录账号的数量

执行后会看到登录的账户


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

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

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

相关文章

全志F1C200S嵌入式驱动开发(解决spi加载过慢的问题)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前的几个章节当中,我们陆续解决了spi-nor驱动的问题、uboot支持spi-nor的问题。按道理来说,下面要做的应该就是用uboot的loady命令把kernel、dtb、rootfs这些文件下载到ddr,然…

Mysql中日期时间的加减

Mysql中日期时间的加减,可以使用date_add()函数和date_sub()函数 1、date_add()为日期增加一个时间间隔 语法格式为: DATE_ADD(date,INTERVAL expr type) #date 指定的时间,可以是now(),也可以是其它时间 #INTERVAL 间隔关键字 #expr 添加…

WebRTC Simulcast介绍

原文地址👇 https://blog.livekit.io/an-introduction-to-webrtc-simulcast-6c5f1f6402eb/ 你想知道的关于Simulcast的一切 Simulcast是WebRTC中最酷的功能之一,它允许WebRTC会议在参与者网络连接不可预测的情况下进行扩展。在这篇文章中,我们将深入探讨Simulcas…

element ui input 深层循环v-model绑定默认数据删除不了的情况

例子&#xff1a; 在项目开发中遇到的&#xff0c;简单记录一下 <el-input style"width: 180px"v-model"item.dataForm"input"handleChangeDataForm($event)"type"number"placeholder"请输入1-2的数值"size"smal…

欧姆龙CX系列PLC串口转以太网欧姆龙cp1hplc以太网连接电脑

你是否还在为工厂设备信息采集困难而烦恼&#xff1f;捷米特JM-ETH-CX转以太网通讯处理器为你解决这个问题&#xff01; 捷米特JM-ETH-CX转以太网通讯处理器专门为满足工厂设备信息化需求而设计&#xff0c;可以用于欧姆龙多个系列PLC的太网数据采集&#xff0c;非常方便构建生…

【育儿】幼儿学习笔记 (一)

文章目录 [TOC] 一、前言二、2~6岁 目标三、1~3年级 目标学习内容校内校外 三、学习技巧表达结构表达方法板块化学习学习进度控制古诗词推荐 四、听文史类幼儿园小学 五、看 一、前言 语文、英语属于语言类学科 二、2~6岁 目标 听 ★★★★★ \color{Orange}{★★★★★} ★…

设计模式之责任链模式

// 定义请求类 class Request {private String content;public Request(String content) {this.content content;}public String getContent() {return content;} }// 抽象处理器 abstract class Handler {protected Handler successor; // 后继处理器public void setSuccesso…

Go语言channel

通道 通道&#xff08;channel&#xff09;是Go语言提供的一种在gorountine之间进行数据创术的通信机制。通道的声明非常简单&#xff0c;只需要使用chan 关键字即可&#xff0c;关闭则需要使用close函数。 注意&#xff1a;通过close函数关闭channel不是必须的。不主动关闭的…

java中list集合根据枚举类型排序

自定义枚举类 import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import java.util.Arrays; Getter NoArgsConstructor AllArgsConstructor public enum ProContant {QCC("QCC",1),FQCC("FQCC",2),HELIHUA(&quo…

4、非线性数据结构

上一节课我们讲了线性数据结构&#xff0c;这一节我们说下非线性数据结构。 非线性数据结构&#xff0c;从字面意思来看&#xff0c;就是指不是线性的结构。线性结构的特点是只有一个前驱和一个后继。 那么非线性结构的特点就是有多个前驱或后继了。 如果只存在一个没有前驱的…

ChatGPT是什么?ChatGPT里的G、P、T分别指什么

前言 ChatGPT是一种基于人工智能技术的聊天机器人&#xff0c;它可以模拟人们的对话方式进行自然语言交流&#xff0c;并根据用户提出的问题、需求、意愿等信息提供相关服务或回答问题。 ChatGPT的G、P、T分别指“生成式”&#xff08;Generative&#xff09;、“预训练”&…

买卖股票的最佳时机系列

//方法一 class Solution { public:int dp[100005];int maxProfit(vector<int>& prices) {//dp[i]表示前i天买入卖出的获取的最大利润//min_val表示前i-1天买入的最小值&#xff1b;dp[0]0;int min_valprices[0];for(int i1;i<prices.size();i){dp[i]max(dp[i-1],…

HikariCP连接池

HikariCP连接池 HikariCP连接池是高性能的JDBC连接池&#xff0c;官网标注的三大特点&#xff1a;快速、简单、可靠&#xff0c;性能优于其他连接池。 官网详细地说明了HikariCP所做的一些优化&#xff0c;总结如下&#xff1a; 字节码精简&#xff1a;优化代码&#xff0c;直…

Jsonp劫持

JSONP 介绍 jsonp是一种协议&#xff0c;准确的说&#xff0c;他是json的一种使用模式&#xff0c;为了解决Json受同源策略限制的问题。 基本语法 JSONP的基本语法为&#xff1a;callback({“name”:”test”, “msg”:”success”}) 常见的例子包括函数调用&#xff08;如…

mac怎么转换音频格式?

mac怎么转换音频格式&#xff1f;相信很多小伙伴都知道&#xff0c;平时我们接触到的音频格式大多是mp3格式的&#xff0c;因为mp3是电脑上最为流行的音频格式&#xff0c;不过除了mp3格式外&#xff0c;还有很多不同的音频格式&#xff0c;有时候不同网上或者不同软件上下载到…

Java开发中的分层开发和整洁架构

分层开发(横向拆分) 分层开发的概念: maven多模块开发项目管理.可以利用这种管理功能,实现一个项目的多层次模块开发–分层开发. 比如,当前项目HelloController依赖HelloService 这样做目的: 复杂开发过程.解耦(不调整依赖关系,无法解耦).分层开发(横向拆分)和纵向拆分的区别…

麒麟v10-coredns 启动失败

现象 在麒麟ARM芯片的机器上搭建k8s&#xff0c;其中的的一个组件cordons 发现启动失败&#xff0c;查看日志如下所示&#xff1a;No such device or address 问题分析 期初猜测kubelet与containerd的cgroupDriver驱动不一致导致。分别查看是一致的。没有问题。发现系统存在…

科大讯飞语音合成Java springboot集成

科大讯飞语音合成 文本转语音 一、引入依赖&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.5.0</version></dependency>二、下载响应的sdk&#xff0c;我这里是下载的…

docker查看log

显示所有 log # 显示某个容器的所有log $ docker logs [OPTIONS] <CONTAINER># 显示 docker-compose 启动的所有容器的log $ docker-compose logs显示实时 log 效果和Linux的 tail-f filename 一样&#xff0c;可以把最新内容刷新显示到屏幕上。 $ docker logs -f <C…