jmeter实战

一:项目的介绍和部署

1.1:轻商城项目介绍

项目背景

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

1.2:项目功能架构

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

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

jmeter实战_第1张图片

1.3:项目技术架构

jmeter实战_第2张图片 1.4:熟悉数据库设计

作用

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

2:构造性能测试数据

jmeter实战_第3张图片

二:性能测试需求分析

2.1:获取需求 

jmeter实战_第4张图片

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

2.2:提取性能测试点

jmeter实战_第5张图片

2.3:确定性能测试目标

jmeter实战_第6张图片

三:性能测试计划及方案 

jmeter实战_第7张图片

 四:性能测试用例设计

根据测试点逐条进行细化

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

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

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

五:性能测试执行

5.1:编写测试脚本

常用测试元件

        1:取样器--http请求

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

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

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

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

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

jmeter脚本的基本结构

jmeter实战_第8张图片

按照用例去编写脚本信息

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程序运行的环境,数据库的资源,程序内部实现机制--开发人员编写的代码分 析,压测机

jmeter实战_第9张图片

 6.2.1:硬件服务器指标

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

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

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

cpu

jmeter实战_第10张图片

 测试关注点

jmeter实战_第11张图片

内存

jmeter实战_第12张图片

jmeter实战_第13张图片

 磁盘IO

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

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

jmeter实战_第14张图片

测试关注点

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

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

 网络

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

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

jmeter实战_第15张图片

测试关注

实际统计的发送速率(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语句,方便更好得优化数据库系统的性能

jmeter实战_第16张图片

 jmeter实战_第17张图片

show variables like 'slow_query%';

show variables like 'long_query_time';

慢查询开启并配置

jmeter实战_第18张图片

 jmeter实战_第19张图片

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

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

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

为什么使用数据库连接池

jmeter实战_第20张图片

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

jmeter实战_第21张图片

测试关注点

jmeter实战_第22张图片

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

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

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

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

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

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

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

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

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

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

jmeter实战_第23张图片

jmeter实战_第24张图片

 

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

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

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

你可能感兴趣的:(jmeter)