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

Jmeter的压测使用

Jmeter基础功能回顾

一、创建Jmeter脚本

1、录制新建

(1)适用群体:初学者

2、手动创建

(1)需要了解Jmeter的常用组件

元件:多个类似功能组件的容器(类似于类)

各元件作用

组件:实现独立的某个功能(类似于方法)

组件示例

二、接口压力测试请求的创建

压测前需要保证接口的功能是正确的,压测才是有效的。

接口常用请求方式:

  • 1、post
  • 2、get
  • 3、put
  • 4、delete

取样器

三、压力测试请求中的数据传递

在接口请求的过程中,接口之间会有数据传递的功能。例如:系统登录的功能,请求登录的接口,一般给返回给用户一个token的字段,token会有有效期,在有效期内,用户所有的请求带上这个token字段,服务器 就会知道是哪一个用户做的请求。

关联:

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。

Jmeter常用的关联方法:

1、JSON提取器

JSON提取器

2、XPATH提取器

XPATH提取器

3、正则表达式提取器

正则表达式提取器

四、压力测试中的结果断言校验

断言:让程序自动判断预期结果和实际结果是否一致。

Jmeter常用断言:

1、Response Assertion

2、JSON Assertion

五、利用Beanshell生成测试数据

1、Beanshell script逻辑生成数据

2、Java代码逻辑生成数据

六、全局变量与CSV数据导入

1、User Defined Variables

2、CSV Data Set

七、压测结果数据解读

1、聚合报告

2、请求/响应结果树

3、Debug Sampler

被压测实战应用简介与搭建

一、实战应用简介

1、被压测应用:订餐网(模拟电商应用)

2、常见业务场景:登录,浏览,选择餐馆,添加购物车,下订单,订单浏览,...,等

3、目标:通过对该网站的压测,学习、体会实际业务场景中压测工具的使用方法

4、练习项目源码位置:https://github.com/princeqjzh/meican

5、运行环境:Java+mysql+maven

6、说明:例子程序中部分功能做了mock,使用的时候不用关注例子程序返回数据的正确性

二、实战应用设置与启动

1、例子程序启动过程:

(1)将git源码克隆到本地磁盘

(2)将项目中的sql/e_menu.sql导入MySQL数据库,创建项目数据

(3)在src/main/resources/hibernate.cfg.xml中配置MySQL DB的用户名、密码;

(4)项目编译、构建

(5)启动、运行Web应用程序

三、实战应用设置-MySQL

1、使用MySQL客户端工具(navicate),初始化数据库

2、执行SQL语句导入功能,运行项目中的e_menu.sql语句

3、Demo-数据导入

导入SQL数据

导入成功

四、实战应用设置-Java

1、Java配置:版本1.8

2、安装包

下载路径:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

3、命令安装

CentOS:yum install java-1.8.0-openjdk* -y
Ubuntu:apt-get install oracle-java8-installer
Mac:brew cask install java

4、解压安装

(1)将JDK运行程序直接解压缩到本地路径,然后配置环境变量

(2)JAVA_HOME=<jdk root path>

(3)export PATH=$PATH:$JAVA_HOME/bin

5、Java环境安装正确验证

验证Java是否安装成功

五、实战应用设置-Maven

1、Maven:下载依赖与程序编译、打包、运行

2、下载:

(1)下载位置:http://maven.apache.org/download.cgi

(2)下载文件:zip或者tar格式压缩包,带bin字样的表明是可以直接运行的二进制文件

下载

3、Maven安装和环境变量配置

(1)将安装包解压到本地路径,然后配置环境变量

(2)export M2_HOME=/xxx/xxx/apache-maven-x.x.x

(3)export PATH=$PATH:$M2_HOME/bin

4、验证Maven是否安装成功:

(1)mvn -v

5、 加速依赖包下载方法,在setting.xml中提那家阿里云镜像

   <mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url></mirror>

五、实战应用设置-开发工具(自行选择)

1、开发工具 Intellij Idea:

(1)外观、字体修改

(2)启动鼠标滚轮放大缩小字体

(3)隐藏显示一些可以不看的文件或文件夹,比如:target

六、实战应用设置-参数

1、配置应用中的数据库连接信息:host,port,user,password

2、参数设定位置:src/main/resources/hibernate.cfg.xml

3、配置参数

<property name="connection.url">
jdbc:mysql://localhost:3306/e_menu?serverTimezone=GMT
</property>
<property name="connection.username">root</property>
<property name="connection.password">ymx0607!</property>

七、实战应用-启动项目

1、编译

若编译后无run configurations,

2、启动项目:

若编译后无run configurations,选择方法二、三

(方法一)双击上图选中的e_menu,就可启动项目

(方法二)命令行运行

mvn tomcat7:run

(方法三)直接把编译后的e_menu.war 放到之前装好的tomcat的webapps目录下

3、访问:http://localhost:8080/e_menu/userlogin/login.jsp(默认密码:admin admin)

压测脚本的编写

一、压测业务规划

1、梳理常用业务场景

2、尽量真实的模拟用户行为,让压测结果更贴近真实结果

3、正常与异常用例场景都需要被覆盖到

4、压力测试涉及的业务内容:

(1)首页

(2)登录

(3)浏览饭店列表

(4)选择饭店

(5)添加购物车

(6)提交订单

(7)查看订单

5、业务场景规划

正常:登录成功的场景

异常:登录失败的场景

二、编写前准备:

1、被压测页面URL获取方法

(1)问研发(依赖别人)

(2)抓包(依赖自己)

(3)读代码(主要依赖自己)

2、组织测试业务参数

(1)新建用户(添加数据)

(2)梳理测试商户数据

(3)梳理测试商品数据

3、也测业务流程控制

(1)预计接口访问次数

(2)不同接口的分流比例

(3)数据传递位置(参数?响应payload?Header?Cookie?)

三、编写压测脚本

1、抓包获取压测接口

四、压测流程图

五、构造压测脚本

注意:

1、先安装插件:Random CSV Data Set

2、脚本在项目jmx下

脚本

整体设计思路:

1、有两个场景:登录成功、登录失败,基于对业务的了解,做了分配的数据。分配的比例,是通过rate随机变量去设置的。假设:60%登录成功,40%登录失败。

2、选择饭店是随机循环的,通过循环控制器实现,访问1次或多次

3、公共信息放在用户定义的变量中,菜品信息放在Http Cookie管理器

4、查看结果树和聚合报告查看运行结果

压测实施简介与后续安排

一、压测实施

1、制定压测策略,不同的并发数10,15,20,25,30...

2、记录结果

3、测试期望结果

(1)验证能够支撑多大并发数,峰值数

(2)验证错误率,定义可接受范围,<=0.1% or <=0.5% or must=0%

4、验证压测目的:寻找系统性能点

二、后续安排

1、压测具体操作过程

2、实施过程可以配合性能监控平台进行压测监控

3、自动化压测执行并发数的压测实施

4、测试报告的自动生成

思考

怎么计算单机所能做出的最大并发数呢?

怎么合理进行压测数据?怎么分时段进行压测?


http://www.mrgr.cn/news/96485.html

相关文章:

  • 从PDF到精准答案:Coze助力RAGFlow框架提升数据召回率
  • 源码刨析与插入实现:RBT比AVL强在何处?
  • SpringBoot实现RBAC权限校验模型
  • C++进阶——位图+布隆过滤器+海量数据处理
  • 小学数学解题方法专题3-列表法-提升2
  • 3.27学习总结 爬虫+二维数组+Object类常用方法
  • RocketMQ - 从消息可靠传输谈高可用
  • 在Qt中判断输入的js脚本是否只包含函数
  • fluent_UDF学习笔记
  • 横扫SQL面试——连续性登录问题
  • 在bootstrap下实现万年历
  • Muduo网络库实现 [二] - Buffer模块
  • 基于自定义注解+反射+AOP+Redis的通用开关设计:在投行交易与风控系统的落地实践
  • SpringBoot 概述
  • Dubbo分布式开发框架
  • 机器学习课程
  • 深入解析音频:格式、同步及封装容器
  • 一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证
  • 【导航定位】GNSS数据协议-RINEX OBS
  • iOS审核被拒:Missing privacy manifest 第三方库添加隐私声明文件