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、测试报告的自动生成

思考

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

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

相关推荐
网络安全指导员9 小时前
如何在JMeter中配置断言,将非200状态码视为测试成功
网络·学习·jmeter·安全·web安全·架构
侧耳倾听11110 小时前
性能测试之jmeter的基本使用
jmeter
海姐软件测试2 天前
Postman参数化设置如何设置?
开发语言·jmeter
lifewange2 天前
Jmeter面试题
jmeter
一棵树长得超出它自己2 天前
jmeter if控制器在loop控制器执行结束后执行
前端·jmeter
zzhz9254 天前
Jmeter(性能指标、指标插件、测试问题、面试题、讲解稿)
java·jvm·jmeter
熙客4 天前
Jmeter-负载测试
jmeter·压力测试
ylatin4 天前
jmeter web压力测试 压测
jmeter·压力测试
zzhz9255 天前
Jmeter操作(数据库)
数据库·jmeter