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、测试报告的自动生成
思考
怎么计算单机所能做出的最大并发数呢?
怎么合理进行压测数据?怎么分时段进行压测?