目录
- JMeter基础功能回顾
- 被压测实战应用简介与搭建
- 压测脚本的编写
- 压测实施简介与后续安排
一、JMeter基础功能回顾
- 创建JMeter脚本
- 录制新建
- 手动创建
- 接口压力测试请求的创建
- Post
- Get
- Put
- 压力测试请求中的数据传递
- JSON提取器
- XPATH提取器
- 压力测试中的结果断言校验
- Response Assertion
- JSON Assertion
- 利用Beanshell生成测试数据
- Beanshell script逻辑生成数据
- Java代码逻辑生成数据
- 全局变量与CSV数据导入
- User Defined Variables
- CSV Data Set
- 压测结果数据解读
- 聚合报告
- 请求/响应结果树
- Debug Sampler
二、被压测实战应用简介与搭建
- 被压测应用:订餐网(模拟电商应用)
- 常见业务场景:登录,浏览,选择餐馆,添加购物车,下订单,订单浏览,...,等
- 通过对该网站的压测,学习、体会实际业务场景中压测工具的使用方法
- 练习项目源码位置:https://github.com/princeqjzh/meican
- 运行环境:java + mysql + maven
- 说明:例子程序中的部分功能做了mock,使用的时候不用关注例子程序返回数据的正确性
实战应用设置与启动
- 例子程序启动过程:
- 将git源码克隆到本地磁盘
- 将项目中的
sql/e_menu.sql
导入mysql数据库,创建项目数据 - 在
src/main/resources/hibernate.cfg.xml
中配置MySQL DB的用户名、密码 - 项目编译、构建
- 启动、运行Web应用程序
实战应用设置-MySQL
- 使用MySQL客户端工具(mysql workbench),初始化数据库
- 执行SQL语句导入功能,运行项目中的
e_menu.sql
语句 -
Demo-数据导入
实战应用设置-Java
- Java配置
- 版本:1.8安装包
- 下载路径:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.htm
- 命令安装
- CentOS:
yum install java-1.8.0-openjdk* -y
- Ubuntu:
apt-get install oracle-java8-installer
- Mac:
brew cask install java
- CentOS:
- 解压安装
- 将JDK运行程序直接解压缩到本地路径,然后配置环境变量
JAVA_HOME=<jdk root path>
export PATH=$PATH:$JAVA_HOME/bin
- 将JDK运行程序直接解压缩到本地路径,然后配置环境变量
- Java环境安装正确验证:
java -version
实战应用设置-Maven
Maven:下载依赖与程序编译、打包、运行
-
安装方法- Demo
- 下载位置:http://maven.apache.org/download.cgi
- 下载文件:zip或者tar格式压缩包,带bin字样的表明是可以直接运行的二进制文件。
- Binary为二进制文件,解压后可直接运行
-
Source为源代码文件,解压后需要编译并发布
-
Maven环境安装方法
- 将安装包解压到本地路径,然后配置环境变量
export M2_HOME=<maven root path>
export PATH=$PATH:$M2_HOME/bin
- 将安装包解压到本地路径,然后配置环境变量
-
验证Maven安装成功的方法-Demo:
mvn -version
加速依赖包下载方法,在settings.xml 中添加阿里云镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
实战应用设置-开发工具
- 开发工具 IntelliJ Idea:
下载地址:https://www.jetbrains.com/idea/download/#section=windows
-
外观,字体
-
启用鼠标滚轮放大缩小字体
-
隐藏显示一些可以不看的文件或文件夹,比如 target、.gitignore
实战应用设置-参数
- 配置应用中的数据库连接信息:host, port, user, password
- 参数设定位置:`src/main/resources/hibernate.cfg.xml
-
Demo-配置参数
实战应用-启动
- IDE 启动:
-
启动、运行Sample项目:Demo -启动应用
- 命令行启动:
- 项目编译:
mvn clean install
- 项目启动:
mvn tomcat7:run
- 访问美餐网
- 访问8080端口,默认账户密码admin/admin
-
使用订单网
三、压测脚本编写
压测业务规划
- 梳理常业务场景
- 尽量真实的模拟用户行为,让压测结果更贴近真实结果
- 正常与异常用例场景都需要被覆盖到
- 压力测试涉及的业务内容:
- 首页
- 登录
- 浏览饭店列表
- 选择饭店
- 添加购物车
- 提交订单
- 查看订单
- 业务场景规划(Demo)
-
正常:登录成功场景
-
异常:登录失败场景
-
编写前的准备
- 被压测页面URL获取方法
- 问研发(依赖别人)
- 抓包(依赖自己)
- 读代码(主要依赖自己)
- 组织测试业务参数
- 新建用户(添加数据)
- 梳理测试商户数据
- 梳理测试商品数据
- 压测业务流程控制
- 预计接口访问次数
- 不同接口的分流比例
- 数据传递位置(参数? 响应payload? Header? Cookie? )
编写压测脚本
-
抓包获取压测接口详情~Demo
-
从源码中辅助获取接口参数详情~Demo
压测流程图
开始压测
-
项目中的压测脚本路径
-
项目中的压测脚本
-
安装JMeter插件:Random CSV Data Set
-
开始压测
四、压测实施简介与后续安排
压测实施
- 制定压测策略不同的并发数10,15,20,25,30 ......
- 记录结果
- 测试期望结果
- 验证能够支撑多大并发数,峰值数
- 验证错误率,定义可接受范围,<= 0.1% or <= 0.5% or must = 0%
-
压测目的:寻找系统性能点
五、后续安排
- 压测具体操作过程留待下次课程讲解
- 实施过程可以配合性能监控平台进行压测监控
- 自动化压测执行分并发数的压测实施
- 测试报告的自动生成
- 精彩内容敬请期待....