定制网站开发的意思,焦作专业网站建设费用,做搜狗pc网站排名,爱站网备案查询上一篇文章中#xff0c;我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤#xff0c;并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能#xff0c;将构建好的镜像利用在自动化测试作业中。在今天的文章中#xff0c;我们将重点讨论如何构建 JMeter 的 Docker 镜像…上一篇文章中我们详细介绍了构建 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 \-JServerHost192.168.3.52 \-JServerPort9999 \ -JThreadCount5 \-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 报告的目录。-JServerHost192.168.3.52: 设置 JMeter 测试时使用的服务器主机地址。-JServerPort9999: 设置 JMeter 测试时使用的服务器端口。-JThreadCount5: 设置 JMeter 测试时的线程数。你可以设置LoopCount设置循环次数。-t ./testcases/jmeter.jmx: 指定要运行的 JMeter 测试计划文件的路径。-e: 生成 JMeter 测试报告时包括所有样本数据。-f: 在生成 JMeter 测试报告时强制覆盖已存在的报告文件。
综上所述该命令的作用是在 Docker 容器中运行 JMeter 测试并生成相应的日志文件和测试报告。其他参数可以参照JMeter官方文档。
执行CI/CD JOB 执行测试完成后你在宿主机上可以看到生成测试报告。如何收集测试报告我们会通过一篇专门的文章讲述。