基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

上一篇文章中,我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤,并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能,将构建好的镜像利用在自动化测试作业中。在今天的文章中,我们将重点讨论如何构建 JMeter 的 Docker 镜像,并演示如何在 GitLab 的 CI/CD 作业中利用该镜像进行自动化压力测试。

测试接口

测试接口依旧采用上篇文章使用的接口,详见https://blog.csdn.net/jiajw0426/article/details/137612529

使用如下命令生成测试数据,为了演示我们会把脚本卸载执行自动化测试之前

curl -X POST -H "Content-Type: application/json" \-d '{"name": "John", "age": 30}' \http://192.168.3.52:9999/users

使用如下命令检查数据是否生成成功

curl http://192.168.3.52:9999/users

构建JmeterDocker镜像

如果可以上网可以通过命令从网上下载Jmeter

wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz

我们基于 OpenJDK 17 镜像构建,设定工作目录为 /jmeter,然后从本地复制 JMeter 的压缩包至工作目录,并解压。接着,将 JMeter 的 bin 目录添加至 PATH 环境变量中。你也可以选择复制自定义的 JMeter 配置文件到相应目录。最后,可选地指定了默认的启动命令为 jmeter。

# 使用 JDK 镜像作为基础镜像
FROM openjdk:17# 设置工作目录
WORKDIR /jmeter#  本地复制JMeter
COPY apache-jmeter-5.6.3.tgz /jmeter/
RUN  tar -xzf apache-jmeter-5.6.3.tgz && \rm apache-jmeter-5.6.3.tgz# 将 JMeter 的 bin 目录添加到 PATH
ENV PATH="/jmeter/apache-jmeter-5.6.3/bin:${PATH}"# 复制自定义的 JMeter 配置文件(如果有的话)
# COPY jmeter.properties /jmeter/apache-jmeter-5.6.3/bin/jmeter.properties# 指定默认的启动命令(可选)
# CMD ["jmeter"]

使用如下命令构建Docker镜像

docker build -t docker.mvcode.cn:8083/jmeter:5.6.3

然后使用命令上传到镜像库

docker push docker.mvcode.cn:8083/jmeter:5.6.3

请添加图片描述

然后使用如下命令测试Jmeter命令是否可以正常使用

docker run --rm docker.mvcode.cn:8083/jmeter:5.6.3 jmeter -v

请添加图片描述

编写测试用例

测试用例非常简单,就是多线程并发请求用户查询接口,验证查询结果返回结果是否正确。我们使用Jmeter工具编写测试用例。

设置环境变量

这里定义了一些用户变量,包括主机名(Host)、端口号(Port)、线程数(ThreadCount)和循环次数(LoopCount)。为了在后续的测试中灵活地修改,通过${__P(name,default)}方式从系统变量中获取,在Jemter中执行就使用默认值。既满足编写测试用例,有方便自动执行。
请添加图片描述

定义线程组

在这个测试用例中,线程数由之前定义的 ThreadCount 变量控制,每个线程将循环执行指定LoopCount 次数的请求。

请添加图片描述

用户查询请求

请添加图片描述

JSON断言

使用$.[?(@.name == 'John' && @.age == 30)]对结果进行断言。

请添加图片描述

本地执行测试

执行测试成功可以导出到文件。
请添加图片描述

请添加图片描述

定义Gitlab Job

将导出文件jmeter.jmx上传到testcases目录、
请添加图片描述

修改测试脚本

请添加图片描述

修改test.js脚本,如上图所示。首先添加如下内容,通过我们构建的devtools镜像,添加用于测试的数据。devtools镜像的构建步骤参照基于Docker构建CI/CD工具链(一)构建基础工具镜像

docker run --rm \docker.mvcode.cn:8083/devtools:1.0.0 \curl -X POST -H "Content-Type: application/json" \-d '{"name": "John", "age": 30}' \http://192.168.3.52:9999/users

添加执行Jmeter测试用的脚本如下

docker run --rm -v ${APP_ROOT}:/app -w /app \docker.mvcode.cn:8083/jmeter:5.6.3 jmeter \-n -j /app/test_jmeter.log \-l /app/replort_jmeter.log \-o /app/report \-JServerHost=192.168.3.52 \-JServerPort=9999 \ -JThreadCount=5 \-t ./testcases/jmeter.jmx -e -f

这是一个 Docker 命令,用于在容器中运行 JMeter 测试。以下是命令的各部分解释:

  • docker run: 运行 Docker 容器的命令。
  • --rm: 在容器停止后自动删除容器,确保容器退出后不会留下残留文件。
  • -v ${APP_ROOT}:/app: 将本地 ${APP_ROOT} 目录(宿主机上的目录)挂载到容器内的 /app 目录,实现文件的共享和数据持久化。
  • -w /app: 指定容器的工作目录为 /app,即在容器内运行命令时的默认工作目录为 /app
  • docker.mvcode.cn:8083/jmeter:5.6.3: 指定要运行的 Docker 镜像的名称和版本,这里是 JMeter 版本为 5.6.3 的镜像,来自 docker.mvcode.cn:8083 仓库。
  • jmeter: 要在容器中执行的命令,这里是运行 JMeter。
  • -n: 非 GUI 模式运行 JMeter。
  • -j /app/test_jmeter.log: 指定 JMeter 的日志文件路径。
  • -l /app/replort_jmeter.log: 指定测试结果的日志文件路径。
  • -o /app/report: 指定生成 HTML 报告的目录。
  • -JServerHost=192.168.3.52: 设置 JMeter 测试时使用的服务器主机地址。
  • -JServerPort=9999: 设置 JMeter 测试时使用的服务器端口。
  • -JThreadCount=5: 设置 JMeter 测试时的线程数。你可以设置LoopCount设置循环次数。
  • -t ./testcases/jmeter.jmx: 指定要运行的 JMeter 测试计划文件的路径。
  • -e: 生成 JMeter 测试报告时包括所有样本数据。
  • -f: 在生成 JMeter 测试报告时强制覆盖已存在的报告文件。

综上所述,该命令的作用是在 Docker 容器中运行 JMeter 测试,并生成相应的日志文件和测试报告。其他参数可以参照JMeter官方文档。

执行CI/CD JOB

请添加图片描述

执行测试完成后,你在宿主机上可以看到生成测试报告。如何收集测试报告我们会通过一篇专门的文章讲述。
请添加图片描述

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624227.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium 解决带高度的polygon 材质不能透明的问题

问题描述:创建一个带高度的polygon,用一个带透明度的图片做材质,画出来的多边形没有透明效果,图片的透明通道没有用上。 一、创建不带高度polygon 不带高度的polygon,使用带透明度的图片是有效果的,但是不…

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接 1. VMware USB Arbitration Service2. 可移动设备 USB 口连接主机3. 虚拟机 -> 可移动设备 -> 连接 (断开与主机的连接)4. 状态栏 -> 断开连接 (连接主机)References 1. VMware USB Arbitration Service 计算机 -> …

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从) 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包(所有节点执行)2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则(可选&am…

android不同版本(支持>10)获取当前连接的wifi名称

1、AndroidManifest.xml 配置权限 <uses-permission android:name"android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name&q…

代码随想录-算法训练营day14【二叉树01:理论基础、递归遍历、迭代遍历、统一迭代】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第六章 二叉树part01今日内容&#xff1a; ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代详细布置 理论基础 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 文章讲解&#x…

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

uniapp h5项目上传图片到oss(纯前端)

需求&#xff1a;后端给前端一个oss上传地址&#xff0c;前端需要根据getCkOSSToken获取stsToken,使用client.put方法将图片上传成功&#xff0c;并且使用canvas压缩图片 效果图 废话不多说&#xff0c;直接上代码&#xff0c;代码可直接复制&#xff0c;运行 准备工作 cnpm…

【C++11】智能指针

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解在C11中智能指针&#xff0c;自己能模拟实现 4 种智能指针 > 毒鸡汤&#xff1a;白日莫闲过&#xff0c;青春不再来。 > 专栏选自&#xff1…

箭头函数有哪些不适用场景

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

leaflet知识点:地图窗格panes的应用

一&#xff0c;需求背景 地图中存在无人机&#xff0c;停机坪&#xff0c;航线三个图层&#xff0c;需要实现无人机图层显示在最上面&#xff0c;停机坪图层显示在最下面&#xff0c;航线图层显示在中间。 二&#xff0c;遇到问题 由下图可知航线图层所在overlayPane窗格的z-…

【教程】ubuntu20.04 下配置 Charm-crypto 0.5 实验环境

目录 前言先决条件基本依赖安装准备好 gcc&#xff0c;make 和 perl准备好 m4&#xff0c;flex&#xff0c;bison 和 libssl-dev安装 Python3.x&#xff0c;pip3 和 pyparsing 安装 OpenSSL安装 GMP5.x安装 PBC安装 Charm-crypto5.0安装开发环境检验 Charm-crypto5.0 安装成功参…

AIGC教育行业全景报告:AI助教和家教成真,学习机迎来新机遇

原文&#xff1a;AIGC教育行业全景报告&#xff1a;AI助教和家教成真&#xff0c;学习机迎来新机遇 - AI新智界 图片来源&#xff1a;由无界AI生成 经过一年的快速迭代&#xff0c;业内对于生成式AI将会率先落地于哪些行业已经有了答案。 教育领域&#xff0c;不仅被OpenAI列…