使用代理服务器录制请求
-
添加
HTTP(S) Test Script Recorder
-
添加
Thread Group
-
在
Thread Group
中添加Recording Controller
-
打开
HTTP(S) Test Script Recorder
;设定Port =8088;设定Target Controller=Test Plan > Thread Group > Recording Controller
-
在
Requests Filtering
添加Include
与Exclude
URL正则表达式,目的为避免录制过多没必要的请求;
Include:.*\.(baidu\.com).*
Exclude:.*\.(js|css|PNG|jpg|ico|png|gif).*
-
单击保存按钮,命名脚本文件名,将对JMeter脚本的更改存储到磁盘。
-
打开Firefox浏览器,将浏览器的代理服务器地址指向
http://localhost:8088
-
单击
HTTP(S) Test Script Recorder
中的Start按钮,打开代理。 -
单机弹框种的确定按钮,JMeter的录制代理将会开启。
-
打开网页开始录制,直到录制完成。
-
添加
View Results Tree
: 用途是看Req/Resp详情
-
回放验证:为了检验,所以一个并发、一次循环即可;单击开始按钮运行按钮开始回放。
线程组
- 第一部份:在请求取样器执行错误时需要执行的下一步动作
- Continue: 继续执行接下来的操作
- Start Next Loop: 忽略错误,执行下一个循环
- Stop Thread: 退出该线程(不再进行此线程的任何操作)
- Stop Test: 等待当前执行的采样器结束后,结束整个测试
- Stop Test Now: 直接停止整个测试
- 第二部份: 线程属性
- Number of Thread(users): 线程数,模拟的用户数量
- Ramp-up Period(in seconds): 达到指定线程数所需要的时间。eg: 线程数设置为50,此处设置为5,那么每秒启动的线程数=>线程数50/5=10
- Loop Count:循环次数
- Same user on each iteration:每次迭代都用相同的用户,勾选该选项则不同次数迭代之间是串行执行,不勾选则为并行执行
- Delay Thread creation until needed: 当线程需要执行的时候,才会被创建。如果不选择这个选项,那么,在计划开始的时候,所有需要的线程就都被创建好了。
- Specify Thread lifetime: 定义线程调度时间
- Duration(seconds): 持续时间(秒),在此选项填入N,说明这个计划,从某个开始时间算起,执行N秒后结束。(会忽略 结束时间 的选项)。
- Startup delay(seconds): 启动延迟(秒),在此选项填入N,手动点击开始执行计划,然后延迟N秒后,计划才真正开始执行。
控制器
- 事务控制器 Transaction Controller
- 条件控制器 If Controller
- 循环控制器 Loop Controller
- 随机控制器 Random Controller
采样器
- 采样器(取样器): 模拟用户操作,向服务器发出请求的组件;
- 采样器作用: 向服务器发送请求,记录响应时间与响应信息;
- 常用采样器:
- HTTP Request Sampler
- Debug Sampler
- BeanShell sampler
场景逻辑控制技术
- 利用JMeter逻辑控制器
- 实现测试业务流程中的逻辑变化
- 模拟实际业务场景
监听器
- 用来动态得监控JMeter执行测试的过程,实时查看测试结果;
- 常用监听器Listener
- View Results Tree: 查看结果树
- Aggregate Report: 聚合压测报告
- Backend Listener: 后端监听器
定时器
- 顾名思义,定时器是用来控制采样器发出请求开始时间的组件
- 常见定时器:
- Constant Timer: 固定定时器
- Gaussian Random Timer: 高斯随机定时器;Deviation(偏差),Constant Delay Offset(固定延迟时间)
- Constant Throughput Timer: 吞吐量定时器
- Synchronizing Tmier: 并发(同步)定时器
断言元件的使用
- 断言的作用就是让JMeter程序判断预期结果和实际结果是否一致,从而判定请求是否成功
- 常见断言:
- Response Assertion: 响应断言
- Size Assertion: 大小断言
- XPath Assertion: XPath断言
- JSON Assertion: Json断言
常用配置元件剖析(Config Element)
- 配置元件的用途: Http请求Header、Cookie、压测时的请求参数
- 常见的配置元件:
- HTTP Header Manager
- 配置元件的执行顺序: 请求之前执行
- 配置元件的作用范围:
- 配置元件执行结果的查看:
前置处理器(Pre Processors)
- 在取样器发送请求之前执行,做一些准备工作,如设置参数、环境变量等
- 常见前置处理器举例:
- Sample Timeout PreProcessor: 1、设定请求超时时间;2、作用范围内的所有请求均生效
- BeanShell PreProcessor: 1、小型嵌入式Java源码解释器;2、在Sampler执行之前会被执行
后置处理器(Post Processors)
- 后置处理器主要用于取样器执行后的提取数据操作;
- 常见的后置处理器:
- Json Extractor
- 正则表达式Extractor
- XPath Extractor
执行顺序
- 先下后上,先左后右
JMeter Plugin Manager 安装
- 下载地址: https://jmeter-plugins.org/
- Install: 下载plugins-manager.jar并将其放入lib/ext目录中,然后重新启动JMeter
参数化测试
-
用户自定义参数
-
CSV Data Set Config :csv数据配置元件
-
xml返回数据: 正则表达式提取
-
JSon返回值: Json数据提取器
-
xml返回值: json/yaml Path Extractor
-
redis数据读取: Redis Data Set
-
JDBC-msyql链接池配置:
并发策略
- 使用Synchronizing Timer(同步定时器)控制
web service加压实战
-
WebService是一种使用http传输SOAP协议数据的远程调用技术
-
关键概念:
- WSDL: WebService服务描述语言
- SOAP: 简单对象访问协议
-
WebService例子: http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
-
使用SoapUI解析服务器代码:
-
使用Jmeter构建Http请求脚本:
-
使用并发策略执行压测
Prometheus服务端性能监控系统
- 应用场景: 时序性性能监控 → 时序性监控、关联分析、性能测试、性能分析 Prometheus
- 链路监控: 链路分析、性能追踪 SkyWalking ZipKin
- Prometheus 技术架构
prometheus系统搭建
- 准备
prometheus.yml
配置文件
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a Label job=<job_name>'to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to "http'.
static_configs:
- targets: ["192.168.3.11:9090"]
- job_name: "node_exporter"
# metrics_path defaults to '/metrics'
# scheme defaults to "http'.
static_configs:
- targets: ["192.168.3.11:9100"]
- 下载 docker 镜像: docker pull prom/prometheus
- 启动 docker 容器: docker run -d --name prometheus -p 9090:9090 -v :/etc/prometheus prom/prometheus
- 打开网址: http://192.168.3.11:9090/targets
Grafana 数据分析系统搭建
- 下载镜像: docker pull grafana/grafana
- 启动镜像: docker run -d --name grafana -p 3000:3000 -v /Users/chenqiang/docker/grafana:/var/lib/grafana grafana/grafana
- 访问地址验证: http://localhost:3000
jmeter 实时压测结果收集
-
性能监控平台部署 - InfluxDB
-
下载influxDB镜像:
docker pull influxdb:1.8
-
启动influxDB容器,将新influxDB容器命名为 Jmeterdb,执行docker创建容器命令:
docker run -d -p 8086:8086 -p 8083:8083 --name influxdb influxdb:1.8
-
执行命令进入容器内部:
docker exec -it influxdb bash
-
再容器内部创建 jmeter 数据库,用于收集JMeter发送的压测数据;执行
influx
命令进入命令台 -
执行类sql语句创建jmeter数据库:
create database jmeter
; 执行show databases
验证数据库已创建成功。
-
-
性能监控平台部署 - JMeter
- 再JMeter脚本中添加 Backend Listener 组件,用于收集数据并发送给InfluxDB;
- 在Backend Listener implementation 中选择
org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient
(注意:须使用Jmeter5.0以上版本) - 在influxdbURL中将实际的influxdb hostname填写进去
- application中填写 baidu
- 在testTitle中填写 Baidu Testing
- percentiles中填写 50;90;95;99
- 将summaryOnly设置为false
- 其余配置保持不变
- 运行JMeter,然后在influxdb中检验是否已经能够接收到数据
- 在influxdb命令台中使用查询语句,检查是否已经能够收到数据: use jmeter;select *from jmeter;
-
性能监控平台部署 - Grafana
- 容器启动 转至:
Grafana 数据分析系统搭建
- Grafana DashBoard 配置 转至:
基本性能监控系统使用
Database: jmeter
模版id: 4026
- 容器启动 转至:
-
性能监控平台部署 - 运行与结果展示
- 在JMeter中,分别将线程数分别调整为10,20,30;持续压测时间为1分钟。
- 分别对系统施加压力测试,然后在Grafana 面板中可以看到运行结果。
系统性能数据收集(cpu、mem、net、io)
- 部署性能监控工具 - node-exporter
- 拉取镜像
docker pull quay.io/prometheus/node-exporter
- 启动容器脚本:
docker run -d --name node_exporter -p 9100:9100 \ -v "/proc:/host/proc:ro" \ -v "sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ quay.io/prometheus/node-exporter
- 配置prometheus.yml,将 node-exporter的实际位置设定到prometheus.yml配置文件中
- 重启prometheus系统
- 拉取镜像
Prometheus 监控系统部署应用实战
-
组成: ==Prometheus==;==node-exporter==;==Grafana==
-
保证三个系统处于正常运行状态
-
将Prometheus作为数据源添加到Grafana中
-
在Grafana中添加 node_exporter for prometheus dashboard: dashboard_id = 11074