- 部署jmeter pod
- 下载jmeter的yaml文件:
apiVersion: v1
kind: Namespace
metadata:
name: jmeter-load
---
apiVersion: v1
kind: Service
metadata:
name: demo-load-service
namespace: jmeter-load
labels:
app: demo-load
spec:
type: ClusterIP
ports:
- port: 22000
targetPort: 22000
protocol: TCP
selector:
app: demo-load
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: demo-load-deploy
namespace: jmeter-load
labels:
app: demo-load
spec:
replicas: 1
serviceName: demo-load-deploy
selector:
matchLabels:
app: demo-load
template:
metadata:
labels:
app: demo-load
spec:
containers:
- name: jmeter-load-load
image: ck06060512/jmeter:jmeter5.4
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["-c", " sleep 9000000"]
resources:
limits:
memory: 2048Mi
cpu: 2048m
- 默认是安装在namespace: jmeter-load下
- 启动jmeter pod 命令: kubectl apply -f XXX.yaml
- 查看启动的pod: kubectl -n jmeter-load get pods
- 进入jmeter pod容器: kubectl -n jmeter-load exec -it demo-load-deploy-0 /bin/bash
- 下载jmeter的yaml文件:
- 注意事项:
- jmx文件位置: /jmeter-5.4/0loadTestJMX
- 执行压测时需要在目录 /jmeter-5.4下
部署jmeter,请参考前一章节,本章节主要介绍部署成功后,如何执行jmeter脚本
一、jmeter 的镜像里面包含POST和GET2种请求类型的脚本,脚本查看命令如下:
- ps:jmeter启动的pod的namesapce为:jmeter-load
- 进入jmeter的容器demo-load-deploy-0 命令:kubectl -n jmeter-load exec -it demo-load-deploy-0 /bin/bash
- 容器类执行:cd /jmeter-5.4/0loadTestJMX
- 容器类执行:ls *.jmx
- jmeter文件:1-1GetForEverThread.jmx
- 该文件是用于 循环次数为 forever 的请求,通过不断增加thread的数目来增加获得最大的TPS
-
传参说明:
NO.
参数
对应Jmeter字段
实例
备注
1 -JthreadsNumber Jmeter之 Number of Threads -JthreadsNumber=5 请求的线程数目,必填 2 -JrampupPeriod Jmeter之Ramp-up Period -JrampupPeriodn=1 决定多长时间启动所有线程 3 -JserverIP Jmeter之ServerName -JserverIP=10.0.0.31 请求的host,必填 4 -JserverPort jmeter之Port Number -JserverPort=10902 请求的端口号, 没有则不写 5 -JPath Jmeter之Path -JPath='/api/v1/query' 请求的URL,必填 6 -JParameters Jmeter之Parameters Name -JParameters=query 请求的参数key, 没有则不写 7 -JparametersValue Jmeter之Parameters Value -JParameters=query -JparametersValue='metrics0&dedup=true' 请求的参数value, 没有则不写 -
运行例子:
- 请求的接口为:
curl 'http://10.0.0.31:10902/api/v1/query?query=metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' - 压测的调用方式为:
./bin/jmeter -JthreadsNumber=5 -JrampupPeriodn=1 -JserverIP=10.0.0.31 -JserverPort=10902 -JParameters=query -JPath='/api/v1/query' -JParameters=query -JparametersValue='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/1-1GetForEverThread.jmx
- 请求的接口为:
- jmeter文件:1-3GetLimitQPSStepLoad.jmx
- 改脚本主要是针对已经知道最大TPS后,限制TPS后运行,持续压测一段时间查看cpu,内存的各项指标的情况
-
传参说明:
NO.
参数
对应Jmeter字段
实例
备注
1 -JTotalGroup Jmeter之 group will start -JTotalGroup=10 这次的测试总共会起10个线程 2 -JFirstWait Jmeter之 Then,wait for -JFirstWait=0 等待0s后开始起线程,也就是不等待直接起线程 3 -JThenGroup Jmeter之 Then start -JThirdGroup=0 从0个线程开始持续增加 4 -JThirdGroup Jmeter之 Nex,add -JThirdGroup=2 每增加2个线程后会运行3s,再起余下的2个线程,再运行3s,以此类推 5 -JeverySecond Jmeter之 Threads every XXX seconds -JeverySecond=3 每增加2个线程后会运行3s 6 -JramUp Jmeter之 using ramp-up -JramUp=6 前面每起2个线程的时候花6s,运行3s,然后再再6s内再起2个线程,再运行3s,以此类推 7 -JHoldLoad Jmeter之 then hold for -JHoldLoad=300 全部的线程起来后,运行30s 后开始停止 8 -JserverIP Jmeter之ServerName -JserverIP=10.0.0.31 请求的host,必填 9 -JserverPort jmeter之Port Number -JserverPort=10902 请求的端口号, 没有则不写 10 -JQP jmete之 target throughput timer -JQPS=90000 (此单位为m,即TPS限制为1500) 限定QPS(单位是m) 11 -JPath Jmeter之Path -JPath='/api/v1/query' 请求的URL,必填 12 -JParameters Jmeter之Parameters Name -JParameters=query 请求的参数key, 没有则不写 13 -JparametersValue Jmeter之Parameters Value -JParameters=query -JparametersValue='metrics0&dedup=true' 请求的参数value, 没有则不写 - 图例
转存失败重新上传取消
- 运行例子:
- 最大TPS为:1500/s
- 请求接口为:
curl 'http://10.0.0.31:10902/api/v1/query?query=metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' - 压测的调用方式为:
./bin/jmeter -JTotalGroup=20 -JFirstWait=1 -JThenGroup=0 -JThirdGroup=10 -JramUp=1 -JHoldLoad=300 -JserverIP=10.0.0.31 -JserverPort=10902 -JQPS=90000 -JParameters=query -JPath='/api/v1/query' -JParameters=query -JparametersValue='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/1-3GetLimitQPSStepLoad.jmx
- jmeter文件:1-2GetStepLoad.jmx
- 不限制QPS持续持续运行一段时间看各个性能指标
- 所有参数跟上述一致,没有-JQPS
- jmeter文件:2-1PostForEverThread.jmx
- 该文件是用于 循环次数为 forever 的请求,通过不断增加thread的数目来增加获得最大的TPS
-
传参说明:
NO.
参数
对应Jmeter字段
实例
备注
1 -JthreadsNumber Jmeter之 Number of Threads -JthreadsNumber=5 请求的线程数目,必填 2 -JrampupPeriod Jmeter之Ramp-up Period -JrampupPeriodn=1 决定多长时间启动所有线程 3 -JserverIP Jmeter之ServerName -JserverIP=10.0.0.31 请求的host,必填 4 -JserverPort jmeter之Port Number -JserverPort=10902 请求的端口号, 没有则不写 5 -JPath Jmeter之Path -JPath='/api/v1/query' 请求的URL,必填 6 -JBodyData Jmeter之Body Data -J-JBodyData='XXXXX' 请求的参数BODY -
运行例子:
- 请求的接口为:
curl -X POST -d '{metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112}' 'http://10.0.0.31:10902/api/v1/query' - 压测的调用方式为:
./bin/jmeter -JthreadsNumber=5 -JrampupPeriodn=1 -JserverIP=10.0.0.31 -JserverPort=10902 -JParameters=query -JPath='/api/v1/query' -JBodyData='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/2-1PostForEverThread.jmx
- 请求的接口为:
- jmeter文件:1-3PostLimitQPSStepLoad.jmx
- 改脚本主要是针对已经知道最大TPS后,限制TPS后运行,持续压测一段时间查看cpu,内存的各项指标的情况
-
传参说明:
NO.
参数
对应Jmeter字段
实例
备注
1 -JTotalGroup Jmeter之 group will start -JTotalGroup=10 这次的测试总共会起10个线程 2 -JFirstWait Jmeter之 Then,wait for -JFirstWait=0 等待0s后开始起线程,也就是不等待直接起线程 3 -JThenGroup Jmeter之 Then start -JThirdGroup=0 从0个线程开始持续增加 4 -JThirdGroup Jmeter之 Nex,add -JThirdGroup=2 每增加2个线程后会运行3s,再起余下的2个线程,再运行3s,以此类推 5 -JeverySecond Jmeter之 Threads every XXX seconds -JeverySecond=3 每增加2个线程后会运行3s 6 -JramUp Jmeter之 using ramp-up -JramUp=6 前面每起2个线程的时候花6s,运行3s,然后再再6s内再起2个线程,再运行3s,以此类推 7 -JHoldLoad Jmeter之 then hold for -JHoldLoad=300 全部的线程起来后,运行30s 后开始停止 8 -JserverIP Jmeter之ServerName -JserverIP=10.0.0.31 请求的host,必填 9 -JserverPort jmeter之Port Number -JserverPort=10902 请求的端口号, 没有则不写 10 -JQP jmete之 target throughput timer -JQPS=90000 (此单位为m,即TPS限制为1500) 限定QPS(单位是m) 11 -JPath Jmeter之Path -JPath='/api/v1/query' 请求的URL,必填 12 -JBodyData Jmeter之Body Data -J-JBodyData='XXXXX' 请求的参数BODY - 图例
转存失败重新上传取消
- 运行例子:
- 最大TPS为:1500/s
- 请求接口为:
curl -X POST -d '{metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112}' 'http://10.0.0.31:10902/api/v1/query' - 压测的调用方式为:
./bin/jmeter -JTotalGroup=20 -JFirstWait=1 -JThenGroup=0 -JThirdGroup=10 -JramUp=1 -JHoldLoad=300 -JserverIP=10.0.0.31 -JserverPort=10902 -JQPS=90000 -JParameters=query -JPath='/api/v1/query' -JBodyDatas='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/2-3PostLimitQPSStepLoad.jmx
- jmeter文件:1-2PostStepLoad.jmx
- 不限制QPS持续持续运行一段时间看各个性能指标
- 所有参数跟上述一致,没有-JQPS