什么是 JMeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
中文界面设置
- 修改
bin/jmeter.properties
文件,将language
设置为zh_CN
。1
2#Preferred GUI language. Comment out to use the JVM default locale's language.
language=zh_CN
利用jmeter代理服务器进行脚本录制
在
测试计划
中添加线程组
- 线程数:就是模仿用户并发的数量,Ramp-up:运行线程的总时间,单位是秒,循环次数:就是每个线程循环多少次。
- 我现在的线程数是200,就是相当于有200个用户,运行线程的总时间是10秒。也就是说在这10秒中之内200个用户同时访问,一秒钟有20个用户同时访问,每个用户循环一次,也就是访问一次。
在
测试计划
中添加非测试元件
→http代理服务器
端口(代理服务器监听端口):可另外设置端口,默认8888
- 目标控制器:
测试计划 > 线程组
- 分组:
每个组放入一个新的控制器
- 勾选:
记录HTTP信息头
- 目标控制器:
http代理服务器:
- 添加过滤条件:
(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff|woff2|svg|ttf)
- 添加过滤条件:
打开浏览器,网络设置,将局域网设置中的代理服务器设为localhost,端口设置为8888
代理服务器配置后之后,点击
HTTP代理服务器
启动按钮,代理服务器就会开始记录所接受的http请求在浏览器地址栏输入需要测试的地址并进行相关操作,完成第一组录制
得到第一组录制的结果后,将任意一个请求的
HTTP信息头管理器
移至测试计划
→线程组
使其成为全局HTTP信息头管理器
HTTP代理服务器
中取消勾选:记录HTTP信息头
,重启HTTP代理服务器
删除录制的第一组信息,重新进行录制
脚本录制完毕,处理一下
HTTP信息头管理器
,添加或修改需要的信息头后即可开始进行压测
远程测试
部署从节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57apiVersion: v1
kind: Service
metadata:
name: jmeter
spec:
clusterIP: None
ports:
- port: 1099
name: server
selector:
app: jmeter
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: jmeter
labels:
app: jmeter
spec:
serviceName: jmeter
replicas: 5
selector:
matchLabels:
app: jmeter
template:
metadata:
labels:
app: jmeter
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- jmeter
topologyKey: "kubernetes.io/hostname"
containers:
- name: jmeter
image: justb4/jmeter:5.1.1
ports:
- name: server
containerPort: 1099
- name: rmi
containerPort: 20000
env:
- name: RMI_HOST
valueFrom:
fieldRef:
fieldPath: status.podIP
command:
- jmeter-server
args:
- -Dserver.rmi.ssl.disable=true
- -Djava.rmi.server.hostname=$(RMI_HOST)运行控制端
1
kubectl run jmeter-master --image=justb4/jmeter:5.1.1 -it --restart=Never --command -- bash
另开窗口,将保存的脚本复制到jmeter-master pod中
1
kubectl cp self.jmx jmeter-master:/
在控制端,执行压测
1
2
3
4
5jmeter -Dserver.rmi.ssl.disable=true \
-n \
-t /self.jmx \
-l /result.jtl \
-R jmeter-0.jmeter.jmeter.svc,jmeter-1.jmeter.jmeter.svc,jmeter-2.jmeter.jmeter.svc,jmeter-3.jmeter.jmeter.svc,jmeter-4.jmeter.jmeter.svc另开窗口,保存压测结果
1
kubectl cp jmeter-master:/result.jtl .
将压测报告导成html
1
jmeter -g result.jtl -o result