当前位置: 首页 > news >正文

jmeter实战

一:项目的介绍和部署

1.1:轻商城项目介绍

项目背景

轻商城项目是一个现在流行的电商项目,我们需要综合评估该项目中各个关键接口的性能,并给出优化建 议,以满足项目上线后的性能需要。

1.2:项目功能架构

前台商城:购物车,订单,支付,优惠券等

后台管理系统:商品管理,会员管理,商场管理,推广管理等

1.3:项目技术架构

 1.4:熟悉数据库设计

作用

1:熟悉数据库设计结构,便于后期对数据库的性能监控,方便定位问题

2:构造性能测试数据

二:性能测试需求分析

2.1:获取需求 

客户方给出(传统行业);根据运营数据来计算(互联网行业);根据竞品分析(新上线的无历史数据) 

2.2:提取性能测试点

2.3:确定性能测试目标

三:性能测试计划及方案 

 四:性能测试用例设计

根据测试点逐条进行细化

        性能测试的数据,有明确的要求,需要达到一定的业务量

        从接口维度上描述测试步骤

        如果接口有关联,放在一个测试用例中

五:性能测试执行

5.1:编写测试脚本

常用测试元件

        1:取样器--http请求

        2:配置元件-用户定义变量

        3:配置元件--http请求默认值

        4:后置处理器--json提取器

        5:断言--响应断言/json断言

        6:监听器--聚合报告/察看结果树

jmeter脚本的基本结构

按照用例去编写脚本信息

5.2:建立测试环境 

如何搭建性能测试环境

性能测试环境的特点:

        独占性 尽量保持性能测试环境与真实生产环境一致性

        硬件环境

                包括服务器环境,网络环境等

        软件环境

                版本一致:包括操作系统,数据库,被测应用程序,第三方软件等

                配置一致:包括操作系统,数据库,被测应用程序,第三方软件等

        使用场景一致性

                基础业务数据的一致

                业务操作模式的一致性:尽量模拟真实场景下用户的使用情况

如何构造性能测试数据

目的:压测环境中的数据量尽量与生产环境中数据量一致

方法:为了快速创建大量数据,可以直接操作数据库进行添加

        准备插入数据的sql语句

        循环执行sql语句来插入数据

        导包>>连接数据库>>创建游标>>执行sql语句>>关闭游标>>关闭连接

import pymysql

conn =pymysql.Connect(host='www.litemall360.com',port=3306,user='root',passwd='123456'

,database='litemall',charset='utf8')  #建立连接

cursor = conn.cursor()   #创建游标

sql11 = "INSERT INTO `litemall`.`litemall_address`(`id`, `name`, `user_id`, `province`, `city`, `county`, `address_detail`, `area_code`, `postal_code`, `tel`, `is_default`, `add_time`, `update_time`, `deleted`) VALUES ({}, {}, {}, '北京市', '市辖区', '东城区', '123123', '110101', '', '13426388766', 0, '2022-09-14 18:20:06', '2022-09-14 18:20:06', 0);"

start_id=4

for i in range(3):    start_id= start_id+i

   cursor.execute(sql11.format(start_id,start_id,start_id))

conn.commit()  #提交

cursor.close()  #关闭游标

conn.close()   #关闭连接

5.3:性能测试监控

系统指标:响应时间,吞吐量,错误率,并发数

资源指标:cpu,内存,磁盘,网络

5.4:执行测试脚本

登录

进入首页

收索商品

六:性能分析和调优

6.1:性能调优的步骤

        1:确定问题:根据性能监控的数据和性能分析的结果,确定性能存在的问题

        2:确定原因:确定了问题之后,对问题进行分析,找出问题产生的原因

        3:给出解决的方案:确定调整目标和解决方案

        4:验证问题:按照给出的解决方案,重新进行测试

        5:分析调优结果:分析出问题的性能指标是否有提升,关注其他指标未下降

6.2:性能瓶颈分析

        在实际的性能测试中,会遇到各种问题,比如tps压不上去,导致这种现象的原因很多,作为测试人 员应该配合开发人员进行分析尽快找出瓶颈的所在

服务器的资源,jvm--java程序运行的环境,数据库的资源,程序内部实现机制--开发人员编写的代码分 析,压测机

 6.2.1:硬件服务器指标

cpu,内存,磁盘,主板,显卡,机箱,电源,散热器等

        运行速度上:cpu>>内存>>磁盘

        存储空间上 :磁盘>>内存>>cpu

cpu

 测试关注点

内存

 磁盘IO

        磁盘IO瓶颈:影响性能是磁盘的读写速度(Input和Output),不是磁盘的大小

 查看磁盘IO使用的命令:iostat -x l l

测试关注点

如果%util接近100%,说明磁盘长时间占用cpu在发送请求,说明磁盘传输速度不足,I/O系统已经满负荷,存在瓶颈

如果%iowait的值过高,说明磁盘io传输数据的任务很多,在等待,表示硬盘存在I/O瓶颈

 网络

网络瓶颈:影响性能的是网络的传输速度,与网络的总带宽进行对比,接近总带宽,说明网络存在的瓶颈

查看网络使用的命令:sar -n DEV 1 2

测试关注

实际统计的发送速率(rxKB/s)和接收速率(txKB/s),与网络的总带宽进行对比,查看使用的百分比(如果无限接近100%,说明存在网络性能瓶颈)

补充:宽带和带宽

宽带:用户(业务)维度来描述网络速度的方式,比如:20M(兆)宽带,100M宽带,200M宽带

           速率单位:b(bit)/s

带宽:数据在网络中传输的速率,比如下载东西(迅雷),在技术中都是用带宽来描述速率的

            速率单位:B(byte)/s

区别:1B=8bit      

实际情况:1000M的宽带---对应的带宽速率是1000/8=125M

 6.2.2:数据库

数据库瓶颈--慢查询

慢查询的定义:指执行速度低于设置的阀值得sql语句

作用:帮助定位查询速度较慢得sql语句,方便更好得优化数据库系统的性能

 

show variables like 'slow_query%';

show variables like 'long_query_time';

慢查询开启并配置

 

set global slow_query_log='ON';   #开启慢查询日志

set global long_query_time=1;     #设置慢查询时间标准,设置之后会在下次会话生效

数据库瓶颈--数据库连接池

为什么使用数据库连接池

数据库连接池定义:事先建立连接,负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个,节省了sql语句执行前后连接的和关闭的时间 

测试关注点

show VARIABLES like '%MAX_CONNECTIONS%';                     #查看mysql最大连接数

show status like 'Threads_connected';                       #查询当前数据库已建立连接数

执行脚本100个线程组查看建立的连接数的比例

数据库瓶颈--数据库死锁

        当一个用户修改数据时,对该数据进行加锁操作,使其他用户不能进行修改

        只有当第一个用户修改完成之后,其他用户才能修改

MySQL常见有两种锁:表锁,行锁

        表锁:效率低,但是安全性高(不会出现死锁)

        行锁:效率高,但是安全性低(会出现死锁)

死锁:是指两个或者两个以上的进程再执行过程中,因争夺资源而造成的一种相互等待的现象

 

SHOW OPEN TABLES where in_use>=1;                 #查看当前正在使用的表(可能是锁定的表)

show PROCESSLIST;                                                    #查看执行长时间的线程,找到对应的sql

kill process_id;                                                                 #如果锁死,先手动杀死死锁的连接

相关文章:

  • 【零基础学QT】第十章 项目打包,利用Inno Setup制作软件安装包
  • LeetCode合并有序数组
  • 微信小程序分享一个视频给好友
  • 南大通用GBase8s 常用SQL语句(260)
  • Windows11 VMware-Ubuntu-Android12 源码下载和编译
  • javaMVC土特产交易平台系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 南大通用GBase8s 常用SQL语句(256)
  • 01-JVM-类加载篇
  • C#基础--泛型
  • 【云原生kubernetes从入门到实践系列教程 ] 四.docker volumes持久化
  • 如何用python自动化微信小程序
  • javaH5醉美南湾湖网站设计计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • Windows11+VS2019驱动开发环境搭建
  • 文件防泄密系统如何保障企业文档的安全性?
  • 【数据结构与算法】ArrayList与顺序表(上)
  • echarts的各种常用效果展示
  • express.js的介绍及使用
  • FineReport中如何实现自动滚屏效果
  • Gradle 5.0 正式版发布
  • Java 网络编程(2):UDP 的使用
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js操作时间(持续更新)
  • node 版本过低
  • NSTimer学习笔记
  • PAT A1120
  • php的插入排序,通过双层for循环
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 对JS继承的一点思考
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 入门级的git使用指北
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 数组的操作
  • 小程序button引导用户授权
  • 学习HTTP相关知识笔记
  • 正则与JS中的正则
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ###C语言程序设计-----C语言学习(6)#
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $ git push -u origin master 推送到远程库出错
  • (a /b)*c的值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (WSI分类)WSI分类文献小综述 2024
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (免费分享)基于springboot,vue疗养中心管理系统