基于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.mzph.cn/news/820962.shtml

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

相关文章

Vitis HLS 学习笔记--readVec2Stream 函数-探究

目录 1. 高效内存存取的背景 2. readVec2Stream() 参数 3. 函数实现 4. 总结 1. 高效内存存取的背景 在深入研究《Vitis HLS 学习笔记--scal 函数探究》一篇文章之后,我们对于scal()函数如何将Y alpha * X这种简单的乘法运算复杂化有了深刻的理解。本文将转向…

ctf.show_web13

上传一句话木马 1.php文件&#xff0c;显示 再改后缀为.jpg&#xff0c;显示错误文件大小 用dirsearch扫一下 备份文件.bak 下载文件源码 <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tm…

Intel 大批高端 CPU 停产,下代主板确认换接口

最近 Intel 出席了 Embedded World 2024 嵌入式世界大会&#xff0c;虽然针对的不是消费领域&#xff0c;可也有不少有意思的产品和信息。 比如&#xff0c;在会上 Intel 公布了新的 Edge 产品组合&#xff1a;Core Ultra Meteor Lake PS、Core Raptor Lake PS 等处理器。 从名…

CDC类下的画线函数

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验原理(后续再补写) 2.实验步骤 3.运行代码 4.运行结果 1.实验原理(后续再补写) MoveTo(); LineTo(); 2.实验步骤 2.1在对话框中添加如下布局控件 2.2绑定…

Git版本管理软件的安装及使用方法(Sourcetree)

1 安装软件 官网下载Sourcetree软件并安装 Sourcetree官网&#xff1a;https://www.sourcetreeapp.com/ 打开软件登陆账号,登录成功后后全部默认下一步即可 不加载SSH密钥 2 创建仓库 添加仓库-->选择地址-->确认创建 提示弹出选择是 3 保存与读取 创建成功后&#x…

类的加载,反射和注解详解

文章目录 类的加载概述类加载器作用分类获取类加载器的方式 双亲委派机制3种加载器的关系工作机制 类加载器的应用 反射概述关键获取类对象获取构造器对象获取方法对象获取成员变量对象作用 注解概述作用自定义注解格式属性类型 元注解常见的元注解 注解解析概述方法技巧 类的加…

腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

腾讯EdgeOne产品测评体验——实战验证安全壁垒&#xff1a;DDoS攻击|CC压测|Web漏洞扫描|SQL注入 写在最前面一、产品概述1.1 什么是边缘安全加速平台 EO&#xff1f;1.2 EdgeOne产品功能 二、准备工作2.1 选择&#xff1a;NS&#xff08;Name Server&#xff09;接入模式或 CN…

【教学类-52-05】20240417动物数独(4宫格)黏贴卡片需要至少几张?难度1-9 打印版

作品展示&#xff1a; 背景需求&#xff1a; 实际打印的是以下代码生成的动物数独&#xff08;2*2&#xff09;学具 【教学类-52-03】20240412动物数独&#xff08;4宫格&#xff09;难度1-9 打印版-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞30次&#xff0c;收藏17次。【教…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

秘塔和Kimi AI在资料查询和学习中的使用对比

一、引言 最近老猿在网上查资料时&#xff0c;基本上都使用Kimi AI进行查询&#xff0c;发现其查询资料后总结到位&#xff0c;知识点的准确度较高。今天早上收到一个消息&#xff0c;说新推出的秘塔AI比Kimi更新进&#xff0c;老猿利用在学习的《统计知识学习》简单对比试用了…

电商技术揭秘九:搜索引擎中的SEO数据分析与效果评估

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台的个性…

数字世界的王国:揭秘Facebook的全球影响力

Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;已经成为一个数字世界的重要组成部分&#xff0c;拥有数十亿的用户和庞大的影响力。在这篇文章中&#xff0c;我们将深入探讨Facebook的起源、发展、影响力及其在全球数字生态中的地位&#xff0c;以及它如何影响我…

25. 【Android教程】列表控件 ListView

在学习了 ScrollView 及 Adapter 两节内容之后&#xff0c;大家应该对 ListView 有了一些基本的了解&#xff0c;它是一个列表样式的 ViewGroup&#xff0c;将若干 item 按行排列。ListView 是一个很基本的控件也是 Android 中最重要的控件之一。它可以帮助我们完成多个 View 的…

字典树(Trie树)详解

字典树&#xff08;Trie树&#xff09;详解 理论模块&#xff1a; trie 树 字典树是一种用于实现字符串快速检索的多叉树结构 trie 的每个节点都拥有若干个字符指针&#xff0c;若在插入或检索字符串时扫描到一个字符 c c c 就沿着当前节点的 c c c 字符指针&#xff0c…

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

leetcode hot100_day20

4/14/2024 128.最长连续序列 自己的 这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题&#xff01;&#xff01;&#xff01;&#xff01; 这题让我想到了最长递增子序列&#xff0c;只是名字有点像。子序列和子数组还不一样一个连续…

算法练习第18天|111.二叉树的最小深度

111.二叉树的最小深度 111. 二叉树的最小深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最…

Unity 左右折叠显示与隐藏UI的简单实现

要实现一个简单的UI左右折叠显示与隐藏&#xff0c;可以结合遮罩&#xff0c;通过代码控制UI区块的宽度和位移来实现。 具体可以按以下步骤实现&#xff1a; 1、新建一个Image组件&#xff0c;并添加精灵&#xff0c;调整大小后&#xff0c;复制一份作为该UI的父物体&#xf…

CANoe中LIN工程主节点的配置(如何切换调度表)

1&#xff1a;前置条件 1&#xff09;工程已经建立&#xff0c;simulation窗口已经配置好&#xff08;包括且不限于通道mappin好&#xff0c;数据库文件已经添加&#xff09; 2&#xff09;我已系统自带sampleCfg工程&#xff0c;作为例子。如下图 2 &#xff1a;主节点的配置…