阶梯压力测试的场景是为了验证在系统运行期间,用户不断的登录系统并使用一段时间,通过阶梯的场景,模拟实际应用期间系统的稳定性、承载性。
二、常用的阶梯压力测试线程组
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 每次减少线程组后的持续运行时间
实例:
字段详解
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)
运行后如果能看到进程和执行详情,此时分布式压力测试成功运行
运行结果查看:文章来源:https://www.toymoban.com/news/detail-853775.html
- summary
:这是一个标记,表示这是一个摘要行。 -
或 =:+ 表示这是一个间隔的摘要,= 表示这是从测试开始到现在的总摘要。文章来源地址https://www.toymoban.com/news/detail-853775.html
- 数字(例如
7543 或 2587):这是在该间隔内完成的请求数。 - in
后面的时间(例如 00:00:47 或 00:00:29):这是该间隔的长度。 - /s
后面的数字(例如 161.3 或 90.0):这是在该间隔内的平均请求数(每秒请求数)。 - Avg
:这是在该间隔内的平均响应时间(毫秒)。 - Min
:这是在该间隔内的最小响应时间(毫秒)。 - Max
:这是在该间隔内的最大响应时间(毫秒)。 - Err
:这是在该间隔内的错误数和错误率。 - Active
:当前活动的线程数。 - Started
:已经启动的线程数。 - Finished
:已经完成的线程数。
到了这里,关于docker+jmeter实现简单的分布式压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!