这一、阶梯压力测试 阶梯压力测试的场景是为了验证在系统运行期间,用户不断的登录系统并使用一段时间,通过阶梯的场景,模拟实际应用期间系统的稳定性、承载性。
阶梯压力测试的场景是为了验证在系统运行期间,用户不断的登录系统并使用一段时间,通过阶梯的场景,模拟实际应用期间系统的稳定性、承载性。
二、常用的阶梯压力测试线程组
stepping Thread Group 步长插件
Concurrency Thread Group 步长并发插件
两者区别 stg不提供设置启动延迟时间,阶梯增压过渡时间、阶梯释放过渡时间,但是ctg提供,ctg可以瞬间释放stg只能阶梯释放线程
通俗的来说,stg是手动的场景,测试的过程需要按照设定好的步骤去执行,
ctg是目标场景,也可以说是自动场景,只需要设置目标,程序会自动执行到目标的运行场景,但是测试过程是不可控制的
字段详解:
1、This group will start 线程的最大数量
2、First wait for 开始启动的等待时间
3、Then start 启动时的线程数
4、Next add 每次增加的线程组数
5、threads every 每次增加线程组后的持续运行时间
6、using ramp-up 每次线程组增加需要的时间
7、The hold load for 达到最大线程组后的持续运行时间
8、Finally stop 每次减少的线程组数
9、threads every 每次减少线程组后的持续运行时间
实例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ba5343f21fef49fc8d3208ac618de124.png
字段详解
1、Target Concurrency 目标并发线程数
2、Ramp up Time 在多长时间内加载完线程数
3、Ramp up StepsCount 分多少次加载完线程
4、Hold Target Rate Time 达到目标值后持续运行多长时间
5、Time Unit 时间单位
6、Thread Iterations Limit 循环次数
7、Log Threads Status into File记录日志文件
实例:
测试方式1【linux安装jmeter执行】:
分布式压测时,linux有时会提示内存不够,当服务器内存不够时,可以创建一个临时的内存交换空间
创建一个 1GB 的交换文件
sudo fallocate -l 1G /swapfile
设置正确的权限
sudo chmod 600 /swapfile
把这个文件设置为交换空间
sudo mkswap /swapfile
启用交换空间
sudo swapon /swapfile
jmeter运行命令
./jmeter -n -t /yourjmxpath -l /yourjtlpath -e -o /yourreportpath
测试方式2、通过docker构建jmeter容器,实现docker运行jmeter脚本:
使用官方的 Java 运行时作为父镜像
FROM openjdk:8-jre-slim
设置 JMeter 版本
ARG JMETER_VERSION=“5.4.1”
下载并安装 JMeter
RUN apt-get clean &&
apt-get update &&
apt-get -qy install
wget
unzip &&
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-KaTeX parse error: Expected 'EOF', got '&' at position 22: …R_VERSION}.tgz &̲& tar -xzf apa…{JMETER_VERSION}.tgz &&
rm apache-jmeter-KaTeX parse error: Expected 'EOF', got '#' at position 43: …JMeter-Plugins #̲RUN wget https:…{JMETER_VERSION}/lib/ext &&
rm jpgc-casutg-2.10.zip
设置 JMeter home
ENV JMETER_HOME /apache-jmeter-${JMETER_VERSION}
添加 JMeter 到 PATH
ENV PATH
J
M
E
T
E
R
H
O
M
E
/
b
i
n
:
JMETER_HOME/bin:
JMETERHOME/bin:PATH
COPY ./jmeter-plugins-manager-1.10.jar /apache-jmeter-
J
M
E
T
E
R
V
E
R
S
I
O
N
/
l
i
b
/
e
x
t
C
O
P
Y
.
/
j
m
e
t
e
r
−
p
l
u
g
i
n
s
−
c
a
s
u
t
g
−
2.10.
j
a
r
/
a
p
a
c
h
e
−
j
m
e
t
e
r
−
JMETER_VERSION/lib/ext COPY ./jmeter-plugins-casutg-2.10.jar /apache-jmeter-
JMETERVERSION/lib/extCOPY./jmeter−plugins−casutg−2.10.jar/apache−jmeter−JMETER_VERSION/lib/ext
dockerfile完成后,在linux根目录新建一个文件夹,这个文件夹中需要有性能测试的插件和刚刚写完的Dockerfile
之所以要将性能测试插件的jar包放在文件夹中是为了在构建docker镜像的时候可以将宿主机的插件直接copy到构建好的镜像中,避免Dockerfile
中的weget失效
所以步骤执行完毕后,构建镜像,构建命令:docker build -t yourjmetername .
镜像构建完成后,可以通过docker命令运行jmeter镜像
docker run -v /test:/tmp/ -it jmeter-docker /bin/bash -c “jmeter -n -t /tmp/xntest.jmx”
测试终章:分布式压力测试
为什么要进行分布式压力测试:在实际的测试过程中单个jmeter服务运行压力测试是有瓶颈的,一个jmeter的运行瓶颈大约能达到500个线程,测试过程中大型项目的性能需求并不是500个线程就能支撑业务场景的,所以就需要分布式的方式增加jmeter服务,提高线程数量,实现对服务的压力测试,且预测项目的性能瓶颈。
实现分布式测试的方式:
1、虚拟机,可以通过虚拟机的形式多开jmeter服务进行分布式压力测试
虚拟机进行压力测试的缺点:无法运行在真正的服务器上,对服务器的性能压力不准确,不利于性能调优以及分析对应的性能指标
2、docker,可以通过docker服务建立多个容器,实现分布式压力测试
运行在服务器上,可以较为准确的检测系统对服务器的压力
如何通过docker进行分布式压力测试:
1、上面说到了通过docker构建jmeter镜像后,创建容器,运行jmeter脚本,在进行分布式测试时同样的我们也需要创建一个jmeter镜像已供主机和助攻机版本、配置统一
使用官方的 Java 运行时作为父镜像
FROM openjdk:8-jre-slim
设置 JMeter 版本
ARG JMETER_VERSION=“5.4.1”
下载并安装 JMeter
RUN apt-get clean &&
apt-get update &&
apt-get -qy install
wget
unzip &&
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-KaTeX parse error: Expected 'EOF', got '&' at position 22: …R_VERSION}.tgz &̲& \ tar -xz…{JMETER_VERSION}.tgz &&
rm apache-jmeter-${JMETER_VERSION}.tgz
下载并安装 JMeter-Plugins
#RUN wget https://jmeter-plugins.org/files/packages/jpgc-casutg-2.10.zip && \
unzip jpgc-casutg-2.10.zip -d apache-jmeter-${JMETER_VERSION}/lib/ext && \
rm jpgc-casutg-2.10.zip
设置 JMeter home
ENV JMETER_HOME /apache-jmeter-${JMETER_VERSION}
添加 JMeter 到 PATH
ENV PATH
J
M
E
T
E
R
H
O
M
E
/
b
i
n
:
JMETER_HOME/bin:
JMETERHOME/bin:PATH
COPY ./jmeter-plugins-manager-1.10.jar /apache-jmeter-
J
M
E
T
E
R
V
E
R
S
I
O
N
/
l
i
b
/
e
x
t
C
O
P
Y
.
/
j
m
e
t
e
r
−
p
l
u
g
i
n
s
−
c
a
s
u
t
g
−
2.10.
j
a
r
/
a
p
a
c
h
e
−
j
m
e
t
e
r
−
JMETER_VERSION/lib/ext COPY ./jmeter-plugins-casutg-2.10.jar /apache-jmeter-
JMETERVERSION/lib/extCOPY./jmeter−plugins−casutg−2.10.jar/apache−jmeter−JMETER_VERSION/lib/ext
在创建完成镜像后,通过 build -t name . 构建docker镜像
2、在jmeter主镜像创建完成后,我们需要创建两个dockerfile文件,一个文件是主机的dockerfile文件,一个是助攻机的dockerfile文件
助攻机dockerfile文件
从基础镜像中导入配置,基础镜像指的就是刚才构建的统一版本配置的jmeter镜像
FROM jmeter-base-image
开放助攻机端口
EXPOSE 1099 50000
设置环境变量
ENV JMETER_HOME /path/to/jmeter
直接启动容器 运行程序
ENTRYPOINT ${JMETER_HOME}/bin/jmeter-server
-Dserver.rmi.localport=50000
-Dserver_port=1099
主机dockerfie文件
从基础镜像中导入配置
FROM jmeter-base-image
#开放主机端口
EXPOSE 60000
直接启动容器,运行程序
ENTRYPOINT [“jmeter-server”, “-Dserver.rmi.ssl.disable=true”]
两个文件创建完毕后,就可以启动容器了
首先启动主机容器
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
其次启动助攻机容器(这里需要注意,助攻机可以启动多个,一直启动到满足场景需求的情况下,举个例子,项目最大的压力负责是5000用户,也就是5000线程,一个jmeter的瓶颈大约是500 所以我们需要 5000/500=10个容器)
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
docker run -v yourjmx:/tmp -dit --name yourjmetername imagename
命令输入完成,容器启动成功
容器运行完成后,需要找到助攻机的ip地址:
sudo docker inspect --format ‘{{ .Name }} => {{ .NetworkSettings.IPAddress }}’ $(sudo docker ps -a -q)
容器创建完成后,就需要执行jmeter命令了,但是由于docker的容器在linux系统中是隔离的,所以jmeter命令需要进入主机容器中执行
docker exec -it name bash 进入对应容器命令
进入后需要找到jmeter/bin目录
进入bin目录,运行命令:
jmeter -n -t /yourjmx -l /yourreport -R yourslaveip(助攻机的ip)
运行后如果能看到进程和执行详情,此时分布式压力测试成功运行
运行结果查看:
- summary :这是一个标记,表示这是一个摘要行。
或 =:+ 表示这是一个间隔的摘要,= 表示这是从测试开始到现在的总摘要。
- 数字(例如 7543 或 2587):这是在该间隔内完成的请求数。
- in 后面的时间(例如 00:00:47 或 00:00:29):这是该间隔的长度。
- /s 后面的数字(例如 161.3 或 90.0):这是在该间隔内的平均请求数(每秒请求数)。
- Avg :这是在该间隔内的平均响应时间(毫秒)。
- Min :这是在该间隔内的最小响应时间(毫秒)。
- Max :这是在该间隔内的最大响应时间(毫秒)。
- Err :这是在该间隔内的错误数和错误率。
- Active :当前活动的线程数。
- Started :已经启动的线程数。
- Finished :已经完成的线程数。
版权归原作者 摸不到的颜色叫做彩虹 所有, 如有侵权,请联系我们删除。