怎么做收费网站,雅安市建设网站,扬中网站推广价格,手机网站运营前言
性能测试是一个全栈工程师/架构师必会的技能之一#xff0c;只有学会性能测试#xff0c;才能根据得到的测试报告进行分析#xff0c;找到系统性能的瓶颈所在#xff0c;而这也是优化架构设计中重要的依据。
测试流程#xff1a;
需求分析→环境搭建→测试计划→脚…前言
性能测试是一个全栈工程师/架构师必会的技能之一只有学会性能测试才能根据得到的测试报告进行分析找到系统性能的瓶颈所在而这也是优化架构设计中重要的依据。
测试流程
需求分析→环境搭建→测试计划→脚本开发→执行与监控→缺陷管理→结果与报告 压力测试
1、线程组设置这里的线程数与同步定时器的用户数量一样2、添加HTTP cookie管理器3、默认请求值4、添加一个事务控制器可以当作一个业务5、在事务控制器下添加同步定时器设置用户数量这里与线程组的线程数一样超时时间可设置6、添加脚本http请求7、添加查看结果树8、添加-监听器9、在最后添加一个聚合报告添加处添加-监听器
负载测试实战
1、线程组的设置50个用户持续时间按秒计算这里30060*5意思就是运行时长为5分钟2、添加HTTP cookie管理器3、默认请求值4、添加一个事务控制器可以当作一个业务5、在事务控制器下添加高斯随机定时器总的延时 固定延迟时间 高斯随机生成的偏差值说明单位都是毫秒固定延迟300ms偏差100ms意思是时间延迟300-400ms之间6、添加脚本http请求7、添加-监听器8、在最后添加一个聚合报告添加处添加-监听器
第一章 Bug引发的又一次思考
1. 课程介绍
目录
性能测试认知主要内容
什么是性能测试性能测试分类性能测试指标性能测试的基本流程
jmeter性能测试工具
jmeter的介绍与组成jmeter工具的多并发请求jmeter工具脚本开发的精要技巧
linux与MySQL的性能理解
linux服务器性能监控指标与分析MySQL数据库性能指标分析
课程学习目标
掌握性能测试的基本流程掌握性能测试工具jmeter的基本使用掌握性能指标所代表的的含义掌握性能监控的基本命令了解慢查询的含义掌握海量数据下的数据库优化方案
2. 打开一个页面非常慢是Bug吗
打开一个页面非常慢是Bug吗
可能是原因网络慢、客户端运算能力不足、资源大到现有的网络无法承载、服务端资源响应时间过长。
页面打开慢的影响是什么
用户体验不好从而导致用户流失用户流失会导致项目失败项目失败可能会导致公司破产
3. 页面响应耗时可以提前预知吗 在测试阶段是否能够发现页面响应慢 当然可以 如何在测试阶段发现页面响应慢
模拟大量用户访问监控每个请求的响应是否准确监控服务器的资源使用
第2章 性能测试认知
1. 企业级软件为什么要做性能测试
历史上由于性能问题引发的事件
12306网站崩溃用户购票失败淘宝双十一网站崩溃
网站崩溃或慢对用户的影响
离开
企业为什么要做性能测试
提升用户体验
细化性能测试的目的
预估软件性能瓶顶预估软件优化时间验证是否存在多并发的逻辑问题
2. 什么是性能测试 性能是用来描述产品除功能外的所具有的速度效率和能力的综合能力评价 对产品或是物品的性能惊喜定性或是定量的量测过程 在这个过程中我们使用一些工具来进行场景的模拟从而进行性能测试
3. 性能测试案例
测试需求测试20个用户访问网站在负载达到30QPS时的平均响应时间QPSQuery Per Second 每秒查询率。一台查询服务器每秒能够处理的查询次数作为域名服务器的性能经常用每秒查询率来衡量测试步骤
1、添加线程组线程数准备时长循环次数1.1、线程数虚拟用户数一个虚拟用户占用一个进程或线程设置多少个虚拟用户设置多少个线程1.2、准备时长s设置的虚拟用户数需要多长时间全部启动。eg线程数为20准备时长为10则说明需要10秒钟启动20个进程。1.3、循环次数每个线程发送请求的次数。eg线程数为20循环次数为5那么每个线程发送5次请求总请求数为20*5100 2、添加HTTP请求 3、设置QPS限制控制给定的取样器发送请求的吞吐量 4、添加监视器-聚合报告、察看结果树 5、运行脚本 6、聚合报告解析响应时间单位毫秒1Label每个Jmeter的element都有一个Name属性这里显示的就是Name属性的值2#Sample表示你这次测试中一共发出了多少个请求如果模拟10个用户每个用户迭代10次那么这里显示1003Average平均响应时间-默认情况下是单个Request的平均响应时间当使用了Transaction Controller 时也可以以Transaction为单位显示平均响应时间4Median中位数50%用户的响应时间590%Line90%用户响应时间6Min最小响应时间7Max最大响应时间8Error%本次测试中出现错误的请求的数量/请求的总数9Throughput吞吐量-默认情况下白石每秒的请求数10KB/sec每秒从服务器端接收到的数据量 4. 性能测试的分类
性能测试的分类
压力测试、负载测试、并发测试、稳定性测试
什么是压力测试
压力测试也叫强度测试它是指逐步给系统增加压力测试系统的性能变化使系统某些资源达到饱和或系统崩溃的边缘从而确定系统所能承受的最大压力举个例子:百米赛跑逐步增加你的负重直到你完不成百米的程度也就是崩溃的边缘你所能承受的最大负重
什么是负载测试
被测试系统正常服务的前提下系统所能承担的最大服务负荷数量(即最大并发数量)最终分析出系统性能的瓶颈举个例子:百米赛跑设置必须15秒完成负重奔跑(不断增加负重)
压力测试和负载测试的区别
压力测试要测试出系统即将崩溃时能够承受的最大并发数负载测试是满足系统指标要求的情况下能够承受的最大并发数
什么是并发测试
举个例子:商场卖货售后员根据库存表单记录表卖货仓库管理员应该在出货时同时更新库存表单记录表但由于用户过多表单记录更新不及时导致仓库已经没有货了但是售货员看到库存表单记录表中还显示有库存仍然在卖货但已经发不出去货了
5. 性能测试场景剖析
电商秒杀、学习系统考试、12306抢票、新闻热点事件、 网络游戏运营、视频网站播放
6. 必知必会的性能测试指标
并发用户量同一单位时间进行同一操作的用户数量吞吐量单位时间内系统成功传输的数据量单位通常是MB、GB吞吐率:又叫Throughput单位时间内系统成功处理的请求数量通常单位为(请求数量/每秒、req/s)
7. 性能测试基本流程
标准性能测试流程
8. 简述 性能测试流程
1.分析性能需求。挑选用户使用最频繁的场景来测试比如登陆搜索下单等等。确定性能指标比如事务通过率为100%TOP99%是5秒最大并发用户为1000人CPU和内存的使用率在70%以下
2.制定性能测试计划明确测试时间(通常在功能稳定后如第一轮测试后进行)和测试环境和测试工具
3.编写测试用例
4.搭建测试环境准备好测试数据
5.编写性能测试脚本
6.性能测试脚本调优。设置检查点、参数化、关联、集合点、事务调整思考时间删除冗余脚本
7.设计测试场景运行测试脚本监控服务器
8.分析测试结果收集相关的日志提单给开发
9.回归性能测试
10.编写测试报告
第三章. JMeter测试工具篇
目录
JMeter介绍与安装
JMeter介绍与安装JMeter的组成结构第一个性能测试案例
JMeter模拟多用户同时发送请求
逻辑分支控制配置管理发送请求的设置
JMeter脚本开发精要技巧
关联、断言、参数化、数据监控
1. JMeter介绍与安装
JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支持等优势。除了压力测试外JMeter也可以应用的接口测试上。JMeter下载、安装及启动
下载
访问JMeter官网https://jmeter.apache.org/download_jmeter.cgi 点击下载windows版本apache-jmeter-5.1.1.zip
安装
解压到D盘即可使用目录结构
bin目录启动命令jmeter.bat 在Windows可启动的批处理文件jmeter.sh 在Linux可执行的shell脚本jmeter.properties: 核心配置文件(配置中文编码)
lib目录存放Jmeter依赖的jar包同时安装插件放于lib中的ext目录中 启动
进入bin目录双击jmeter.bat文件即可启动jmeter
(如果打不开则说明其工作环境JDK没搭建好,原因JMeter需要基于Java环境)
在dos中进入到apache-jmeter的bin目录中然后执行命令jmeter也可以启动
3、配置jmeter工作环境
方式安装jdk并配置环境变量
1安装jdk要求是1.8级以上版本
在安装jdk的过程中记得把路径复制一份,方便后面使用。
2配置jdk的系统环境变量
a》java_homejdk的安装路径(需要新建)
b》path增加jdk的工作目录bin ( %java_home%\bin; ) (只需编辑往里添加工作路径)
3验证
A、在dos中输入命令javac显示javac命令的格式及选项
B、启动bin目录中jmeter.bat能正常打开。
设置界面为简体中文,如下 2、使用JMeter来做接口功能测试
过程测试计划-》线程组-》http请求-》响应断言-》断言结果-》参看结果树! 其中测试计划是自带的。
测试计划相当于项目某某项目-测试计划
添加线程组相当于功能点、或者接口某某接口-线程组
在“测试计划”上右键–添加–线程(用户)–线程组。 然后可以对线程组进行设置(一般在做性能测试时才需要去设置接口几乎不用)
线程组参数详解
名称根据业务来设置合适名称接口测试就是接口名称性能测试就是功能点2. 遇错误的动作默认“继续”忽略错误继续完成请求3. 线程数虚拟用户数默认是1个一个用户占用一个线程。多用户并发测试时就需要在这里设置并发用户数也就是设置多少个线程数。Ramp-Up 时间(秒)启动所有虚拟用户所需的时间。含义如下 比如如果线程数为10启动时长为2秒那就意味着2秒内需启动10个用户平均下来就是每秒启动5个用户。启动时间为0则代表同时启动 并发。循环次数每个用户发送请求的次数好比参数化。如果线程数为10循环次数为5 那么每个线程(用户)发送5次请求。总请求数为10*550 如果勾选了“永远” 那么所有线程会一直发送请求直到手动停止运行或者设置了调度器。调度器设置线程组启动的持续时间和延迟时间(调度器需勾选循环次数为永远才有效) 持续时间秒测试持续的时间24小时24*3600秒 启动延迟秒测试延迟启动的时间
添加HTTP请求相当于测试用例中的测试步骤某某-HTTP请求
在“线程组”上右键–添加–取样器–HTTP请求 设置HTTP请求信息
基本》
2.1. Web服务器
协议向目标服务器发送HTTP请求的协议可以是HTTP或HTTPS默认为HTTP
服务器名称或IP HTTP请求发送到的目标服务器名称或IP 比如www.jd.com
端口号目标服务器的端口号默认值为80 ,可以不写https为443。
注意 “ 服务器名称或IP”中不用输入http://, 请求时会自动加入 ; 2.2. Http请求
方法发送HTTP请求的方法,包括GET、POST等。路径目标URL路径(服务器名称与参数之间的部分)内容编码 编码方式默认值为iso8859改为utf-8支持中文。跟随重定向当HTTP请求的响应是302/301时JMeter会跟随重定向到目标页面。使用keepAlive jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信保持长 连接减少连接的次数进而缩短了连接时间****
2.3. 请求参数
A)参数: get请求所携带的数据列表名值对 (同请求一起发送参数)B)消息体数据: post请求所携带的请求数据是json格式数据类似于字典C)文件上传: post请求本地文件上传文件类型一定是file说明所添加的参数中有中文时需要勾选“编码” Http请求 示例 https://www.jd.com/打开京东首页get请求 添加响应断言
在“HTTP请求”上右键–添加–断言–响应断言(检查请求后的响应是否正确) 需要设置的断言的内容 包括适用范围(那个请求)响应的字段匹配规则以及添加要检查的测试模式
3.1、apply to 表达的是断言那个请求默认是只断言主请求main sample only
3.2、测试字段 表达的是断言的内容有响应文本响应代码响应信息等等一般都是断言响应文本
3.3、模式匹配规则 表达的是断言的方式有包括、匹配、相等等等一般使用包括或者相等
3.4、测试模式 根据业务来编写可以理解为我们的预期结果
4. 添加断言结果
在“HTTP请求”上右键 - “添加”- “监听器” - “断言结果” 查看断言的结果 【断言】又名检查点
含义 检查预期数据与实际数据是否匹配
方式 先添加响应断言再添加断言结果是一个组合
断言成功 断言结果只有一行为请求的名称则表示成功。 断言失败 断言结果有两行第二行显示失败的原因。
5. 察看结果树 目的是查看请求发送后 的结果
在“HTTP请求”上右键–添加–监听器–察看结果树 点击发送请求结果如下 第四章 JMeter模拟多用户同时发送请求
1、一个简单的压力测试实战
现有一个http请求接口http://localhost:8080/goods/to_list 要使用Jmeter对其进行压测测试步骤如下:
a.新建一个线程组。 b. 设置线程组参数。这里配置为10个线程同时启动循环一次。 c. 新增http请求默认值。 在上一步创建的线程组上新增http请求默认值所有的请求都会使用设置的默认值这设置协议为httpIP为localhost端口为8080。 d. 添加要压测的http请求。 下图第一个红框内的协议、IP、端口不需要设置会使用步骤c中设置的默认值只需设置请求路径Path即可这里填入/goods/to_list。 e. 新增监听器用于查看压测结果。这里添加三种聚合报告、图形结果、用表格查看结果区别在于结果展现形式不同。 f. 点击运行按钮开始压测并查看结果。 五、如何查看系统负载何性能瓶颈 服务器上执行以下命令
top如下图所示可以看到系统负载load average情况1分钟平均负载5分钟平均负载15分钟平均负载分别是1.58, 0.50, 0.23同时可以看到最耗费资源的进程为mysql。 2、如何创建带参数的请求
1. 首先新建一个http请求。 2.设置请求路径并添加参数。 如下图所示Path中填写请求路径点击Add添加参数有一个名为token的参数。 至此给带参数请求已创建完成点击运行即可开始压测。
3、如何模拟设置多个变量模拟多个用户请求接口
新建Csv Data Set Config设置。 2.新建配置文件config.txt配置用户信息。 文件名随便写里面数据每行有两个值userId和userToken中间用逗号隔开我这里设置了两个用户的信息。 3.引用配置文件。 Csv Data Set Config中引用配置文件config.txt并定义变量名为userId和userToken。 4.请求中引用配置文件中的变量。 在填写参数Value的地方不要将值写死而是写为 变量名这种格式我这里想要引用配置文件中 u s e r T o k e n 的值所以写为 {变量名}这种格式我这里想要引用配置文件中userToken的值所以写为 变量名这种格式我这里想要引用配置文件中userToken的值所以写为{userToken}。 至此配置完毕点击运行按钮即可开始压测。
3. jmeter模拟多用户并发
一. 100个真实的用户
一个账号模拟100虚拟用户同时登录和100账号同时登录 区别
1个账号100个人用同时登录100个人100个账号同时登录。
相同
两个都是100人同时登录具体看项目需求。
账号来源
利用“注册”或“创建”账号接口创建100个用户“查询”接口保存100个账号的账号、密码到一个文件。
3、提取100个账号、密码的文件
meter脚本整体布局
线程组一级----请求默认值、请求头、http请求、察看结果树二级-----正则表达式、BeanShell 后置处理程序三级。HTTP请求默认值是存放系统通用ip的位置协议:http 服务名称或ip:127.0.0.1;HTTP信息头管理接口请求之前需要带的信息部分接口不带不能运行Authorization、Content-Type、Accept、User-Agent例如必须带的token就在信息头中存放登录请求请求方法、请求路径、消息体正则表达式提取token创建请求请求方法、请求路径、消息体参数化用户名创建多个用户查询账号请求方法、请求路径、消息体正则表达式提取用户名、密码BeanShell 后置处理程序存储返回值到文件中 2查询请求中的正则表达式和BeanShell 后置处理程序
正则表达提取-----获取想要的字段内容 详看https://blog.csdn.net/belief_009/article/details/123051440 BeanShell 后置处理程序----将提取到的字段内容存储在指定文件4.csv中
FileWriter fsnew FileWriter(D://近期//4.csv,true);
BufferedWriter out new BufferedWriter(fs);out.write(vars.get(username),vars.get(id)); //username、id为正则定义名称
out.write(System.getProperty(line.separator)); //相当于\n自动换行out.close();
fs.close();线程组线程数设置数目等于提取到的条数执行脚本得到100个用户的账号和密码 二、100个用户同时登录
设置线程组 线程数并发用户数 Ramp-up时间(秒)启动所有线程所需要的时长
0----代表同时并发100----线程数100时间100秒。代表每隔1s启动一个线程100/1001
循环次数Loop Count
默认值是12----线程数100循环次数2。代表启动200个线程勾选“永远”会一直执行需要人工停止一般配合调度器使用。 补充同步定时器
作用阻塞线程直到指定的线程数量到达后在一起释放可以瞬间产生很大的压力使用同步定时器时循环次数要勾选为永远 2. 模拟多用户登录 线程组下添加-----CSV 数据文件设置 将存储用户账号、密码的文件引入并命名变量名称在登录时调用。 调用传参${name}注释本系统账号密码一致所以只需要调用一列值
/api/v1/oauth/token?username${name}password${name}scopeallgrant_typepassword
执行测试查看结果
100用户同时登录 第五章. jmeter脚本开发
1. 脚本开发方式大纲 1、badboy进行录制和导出
badboy下载地址:
链接https://pan.baidu.com/s/18Po3RssrBRSnn_-xsHop1g 提取码h4w4
直接解压就可以使用在界面上输入对应录制的url进行操作录制完成后导出为export to jmeter在jmeter中打开后即可对脚本进行优化 2、jmeter代理服务器 a、设置启动服务代理在网络设置代理服务如果为第三方服务器则写第三方服务器的IP而非本地IP127.0.0.1
b、打开jmeter新建线程组目的为了录制后的脚本有地方存放目标控制器选择对应的主线程组存放脚本添加非测试元件http代理服务器点击启动后则可以进行录制录制完成后停止在线程组中回出现请求的录制脚本 c、可在http服务代理请求中排除模式使用正则表达式进行过滤
d、再次代理请求录制已发现.png格式已被过滤掉了 3、进行fiddler抓包后导出jmx格式在jmeter中打开后进行优化抓包后选择对应的url进行备注选中url按M键备注
下载fiddler插件后导出jmx
插件下载链接
链接https://pan.baidu.com/s/18uffy67lIfNatMGkjnC_2g 提取码iy20 在jmeter中打开导出的文件可以看到对应的备注url进行录制脚本优化 工具是测试中的辅助并非必需品。
总结
通过以上介绍的性能测试的思路和工具我们基本上可以完成一次性能测试以及部分问题的性能定位但是往往性能问题总是隐藏得很深的并且受各种条件的影响比如各个环节的配置参数网络情况机器情况性能测试的工具等等所以性能测试的结果往往不能脱离某个环境单独比较不同的配置环境应用的性能都会呈现出不同的结果出现问题时也需要我们从前到后从上到下仔细分析每一个流程的执行情况逐步通过工具协助定位才能最终找到瓶颈。总之性能测试是一门考验耐心细心知识广度 深度的活每次遇到问题多问几个为什么多做几次分析和验证并尝试解决优化它一定会让你对系统有更多不一样的认识。