Mac电脑Jmeter集成到Jenkins,压测多个接口并生成测试报告


Jenkins支持的JDK版本17、21,通过java -version查看当前JDK版本,确认是否匹配

  1. 打开网址https://www.jenkins.io/download
    点击下载,选择mac版本
    在这里插入图片描述
  2. commend+空格打开终端,输入安装命令brew install jenkins
    安装完成后输入brew services start jenkins启动jenkins
    在这里插入图片描述

我在启动时报IO error,可尝试用管理者启动,命令:sudo brew services start jenkins

如果还不行,尝试使用另一个启动命令: brew services restart jenkins-lts

  1. 提示成功后,浏览器打开localhost:8080会进到登录页面
    在这里插入图片描述

  2. 进入日志文件中,获取密码

cd /Users/xxxx/.jenkins/secrets 
open initialAdminPassword

在这里插入图片描述

  1. 选择自定义,等待安装完成即可,如果有失败的直接跳过,后面可以再安装
    [图片]

  2. 创建管理员账号
    [图片]

  3. 设置URL地址
    [图片]

  4. 全部配置完成,进入jenkins主页面
    在这里插入图片描述
    以上就是Jenkins的下载和安装啦~~


下面是集成jmeter并生成测试报告的操作步骤

一、使用自由模式集成jmeter串行执行多个压测脚本并生成测试报告
  1. 点击【新建任务】,输入任务名称,选择“自由风格”,点击确认按钮
    在这里插入图片描述

  2. 进入配置页面,选择【添加构建步骤-执行shell】

脚本如下,先进入到本地jmeter安装路径的bin目录下,把上次执行的结果csv文件和report全部删除,再执行第一个压测脚本,执行后将进程置于后台,并获取进程id,等待进程ID释放,执行完成后再启动第二个压测脚本,这样保证了每个脚本是独立执行互不干扰的

cd /Users/xxx/downloads/apache-jmeter-5.6.2/bin
find /Users/xxx/downloads/autotest/script/ -type f -name "*.csv" -exec rm {} \;
rm -rf /Users/xxx/downloads/autotest/script/report/*
./jmeter.sh -n -t /Users/xxx/downloads/autotest/script/script1.jmx  -Jnum_threads=1 -Jramp_up_time=1 -Jduration=5 -l  /Users/xxx/downloads/autotest/script/script1_result.csv -e -o /Users/xxx/downloads/autotest/script/report/script1
pid1=$!
wait $pid1
./jmeter.sh -n -t /Users/xxx/downloads/autotest/script/script2.jmx  -Jnum_threads=20  -Jramp_up_time=1 -Jduration=2 -l  /Users/xxx/downloads/autotest/script/script2_result.csv -e -o /Users/xxx/downloads/autotest/script/report/script2
  1. Jnum_threads字段在jmx中通过表达式${__P(num_threads)}引用,其他字段同理,如图
    在这里插入图片描述

  2. 添加构建后操作生成report,选择【增加构建后操作步骤-Publich HTML reports】
    HTML directory to archive:填写本地存放测试报告的空文件夹路径
    在这里插入图片描述
    如果没有对应插件可以去下载,【系统管理-插件管理】
    在这里插入图片描述
    点击【可用插件】,搜索需要的插件,然后勾选安装即可
    在这里插入图片描述

  3. 全部配置完成,点击保存,在项目目录下,点击【立即构建】即可执行脚本并生成测试报告,点击构建历史可进入对应详情页
    在这里插入图片描述

  4. 点击【控制台输出】可查看日志
    在这里插入图片描述

  5. html格式的测试报告也会生成到指定文件夹下
    在这里插入图片描述


经过多次测试发现:

Jmeter中聚合报告里的吞吐量计算存在误差,如果是单接口误差较小,多接口的话误差较大,不具备参考价值,因此需要手动计算,公式=线程数/平均响应时间,线程数是用户手动设置的Num
of Threads(users),并非测试报告中的样本数量

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

二、 使用自由模式-参数化构建过程执行单个压测脚本并将结果写入本地CSV

在此方法中,将执行的详细结果写入csv中,通过添加构建后操作使用python脚本获取并计算正确的吞吐量

  1. 进入项目的配置页面,勾选【参数化构建过程-文本参数】,输入线程数名称如:Jnum_threads,可设置多个参数
    在这里插入图片描述

  2. 选择【添加构建步骤-执行shell】 脚本中通过-Jnum_threads=${Jnum_threads}来获取上面设置的参数

cd /Users/xxx/downloads/apache-jmeter-5.6.2/bin
find /Users/xxx/downloads/autotest/script/ -type f -name "*.csv" -exec rm {} \;
rm -rf /Users/xxx/downloads/autotest/script/report/*
./jmeter.sh -n -t /Users/xxx/downloads/autotest/script/script1.jmx  -Jnum_threads=${Jnum_threads}  -Jramp_up_time=${Jramp_up_time} -Jduration=${Jduration} -l  /Users/xxx/downloads/autotest/script/script1_result.csv -e -o /Users/xxx/downloads/autotest/script/report/script1
  1. 选择【增加构建后操作步骤-Execute scripts-执行shell】

构建步骤中已经通过命令-l /Users/xxx/downloads/autotest/script/script1_result.csv将压测详细结果写入csv中,供这一步计算QPS使用

以下脚本将压测的接口地址、全部样本的状态码及个数、压测接口的平均响应时间、QPS打印到csv中

#!/usr/local/bin/python  #使用which python命令获取python路径
# -*- coding: utf-8 -*-
import sys
import csv
import osdef read_csv(file_path):response_code_count = {}  elapsed_sum = 0elapsed_count = 0url_count = 0# 根据Python版本选择不同的open函数参数if sys.version_info.major == 2:with open(file_path, 'rb') as file:reader = csv.DictReader(file)for row in reader:response_code = row['responseCode']elapsed = float(row['elapsed'])response_code_count[response_code] = response_code_count.get(response_code, 0) + 1#多接口情况下,获取指定接口url的个数,用于计算平均响应时间if row['URL'] == 'http://baidu.com:808/x/x/x':elapsed_sum += elapsedelapsed_count += 1url_count += 1elif sys.version_info.major == 3:with open(file_path, 'r', newline='', encoding='utf-8') as file:reader = csv.DictReader(file)for row in reader:response_code = row['responseCode']elapsed = float(row['elapsed'])response_code_count[response_code] = response_code_count.get(response_code, 0) + 1if row['URL'] == 'http://baidu.com:808/x/x/x':elapsed_sum += elapsedelapsed_count += 1url_count += 1return response_code_count, elapsed_sum, elapsed_count, url_countdef write_to_csv(file_path, data):with open(file_path, 'w') as file:  writer = csv.writer(file)writer.writerow(["URL", "全部线程的状态码及个数","平均响应时间(S)","实际QPS"])writer.writerow(data)def main():#将压测的详细结果写入指定目录下的csv中file_path = '/Users/xxx/downloads/autotest/script/script1_result.csv'#将手动计算的结果写入指定目录的csv中output_file_path = '/Users/xxx/downloads/autotest/script/result.csv'  # 输出环境变量的值num_threads_str = os.environ.get('Jnum_threads')target_throughtput = os.environ.get('Jtarget_throughtput')print("Value of NUM_THREADS:", num_threads_str)# 将 NUM_THREADS 转换为整数try:total_requests = int(num_threads_str)except (ValueError, TypeError):print("Error: NUM_THREADS environment variable is not a valid integer.")returnresponse_code_count, elapsed_sum, elapsed_count, url_count = read_csv(file_path)# 计算 QPSqps = 0avg_elapsed_seconds = Noneif elapsed_count > 0:avg_elapsed_seconds = elapsed_sum / elapsed_count / 1000  # 将毫秒转换为秒if avg_elapsed_seconds != 0:qps = total_requests / avg_elapsed_seconds# 将结果写入 CSV 文件avg_elapsed_seconds_formatted = '{:.2f}'.format(avg_elapsed_seconds)qps_formatted = '{:.2f}'.format(qps)#结果csv的要写入的具体值write_to_csv(output_file_path, ["http://baidu.com:808/x/x/x", response_code_count,avg_elapsed_seconds_formatted,qps_formatted])if __name__ == "__main__":main()

保存构建后选择【Build with Parameters】输入对应参数点击【Build】就开始构建了,最终的执行结果也会写会写入指定的csv中

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

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

相关文章

2021-08-06

yarn的简介: Yarn是facebook发布的一款取代npm的包管理工具。 yarn的特点: 速度超快。 Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。 在执行代码…

AI绘图cuda与stable diffusion安装部署始末与避坑

stable diffusion的安装说起来很讽刺,最难的不是stable diffusion,而是下载安装cuda。下来我就来分享一下我的安装过程,失败了好几次,几近放弃。 一、安装cuda 我们都知道cuda是显卡CPU工作的驱动(或者安装官网的解释…

Stable Diffusion WebUI 附加功能/图片放大(Extras):单张图片/批量处理/从目录进行批量处理

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 篇文章主要讲解 Stable Diffusion WebUI 的附加功能/图片放大(Extras)的使用,主要…

计算机网络——33多点访问协议

多点访问协议 多路访问链路和协议 两种类型的链路(一个子网内部链路连接形式) 点对点 拨号访问的PPP以太网交换机和主机之间的点对点链路 广播 传统以太网HFC上行链路802.11无线局域网 多路访问协议 单个共享的广播型链路 2个过更多结点同时传送&am…

数据结构——二叉树——二叉搜索树(Binary Search Tree, BST)

目录 一、98. 验证二叉搜索树 二、96. 不同的二叉搜索树 三、538. 把二叉搜索树转换为累加树 二叉搜索树:对于二叉搜索树中的每个结点,其左子结点的值小于该结点的值,而右子结点的值大于该结点的值 一、98. 验证二叉搜索树 给你一个二叉树的…

uni app 扫雷

闲来无聊。做个扫雷玩玩吧&#xff0c;点击打开&#xff0c;长按标记&#xff0c;标记的点击两次或长按取消标记。所有打开结束 <template><view class"page_main"><view class"add_button" style"width: 100vw; margin-bottom: 20r…

深入了解 Vue 3 中的 Transition 过渡动画

在本文中&#xff0c;我们将深入探讨 Vue 3 中实现 Transition 过渡动画的技术细节。过渡动画可以为用户界面增添平滑和生动的效果&#xff0c;提升用户体验。 首先新建一个基于uni-app框架为transition.vue的测试文件&#xff0c;在其中编写如下JavaScript、HTML和CSS代码&…

CSS3 Transform变形理解与应用

Transform&#xff1a;对元素进行变形&#xff1b; Transition&#xff1a;对元素某个属性或多个属性的变化&#xff0c;进行控制&#xff08;时间等&#xff09;&#xff0c;类似flash的补间动画。但只有两个关键贞。开始&#xff0c;结束。 Animation&#xff1a;对元素某个属…

vulhub中Apache solr XML 实体注入漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞&#xff1a;XML…

智慧安防监控EasyCVR视频调阅和设备录像回看无法自动播放的原因排查与解决

智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

云计算迎变局:阿里云、腾讯云“各有千秋”

毋庸置疑&#xff0c;无论在什么时候什么行业&#xff0c;低价策略都是一柄利器。比如&#xff0c;在电商行业&#xff0c;除了拼多多将低价策略贯彻到底之外&#xff0c;淘宝、京东也将性价比作为发力重点&#xff0c;并通过补贴、秒杀等方式&#xff0c;再度强调自身的“价格…

目标检测——工业安全生产环境违规使用手机的识别

一、重要性及意义 首先&#xff0c;工业安全生产环境涉及到许多复杂的工艺和设备&#xff0c;这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机&#xff0c;不仅可能分散其注意力&#xff0c;降低工作效率&#xff0c;更可能因操作失误导致…

TCP/IP 网络模型有哪几层?(计算机网络)

应用层 为用户提供应用功能 传输层 负责为应用层提供网络支持 使用TCP和UDP 当传输层的数据包大小超过 MSS&#xff08;TCP 最大报文段长度&#xff09; &#xff0c;就要将数据包分块&#xff0c;这样即使中途有一个分块丢失或损坏了&#xff0c;只需要重新发送这一个分块…

JavaEE SSM框架学习——MacOS Eclipse环境搭建

MacOS环境搭建 安装Homebrew Homebrew是一个包管理器&#xff0c;我们可以通过它来安装许多软件 首先打开Homebrew中文官网(brew.sh/zh-cn) 如图所示&#xff0c;复制下面那行命令到你的Macbook终端 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ho…

商场促销--策略模式

1.1 商场收银软件 package com.lhx.design.pattern.test;import java.util.Scanner;public class Test {public static void main(String[] args){System.out.println("**********************************************"); System.out.println("《大话设计模式…

npm ERR! code CERT_HAS_EXPIRED 淘宝镜像失效

近期vue安装失败&#xff0c;具体如下&#xff1a; 1.先npm cache clean --force 再下载 插件后缀加上 --legacy-peer-deps 2.certificate has expired npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.o…

预处理指令——一些比较少见的概念

前言&#xff1a;预处理是我们的c语言源代码成为可执行程序的第一个步骤。而宏和预处理指令都是在这个阶段完成。本节内容就是关于宏和预处理指令相关知识点的解析。 目录 宏 预定义符号 #define定义常量 #define定义符号 #define定义宏 带副作用的宏参数 宏的替换规则…

SMTP服务器搭建关键步骤?如何配置服务器?

SMTP服务器搭建的注意事项&#xff1f;怎么快速搭建SMTP服务器&#xff1f; 电子邮件已经成为我们日常工作和生活中不可或缺的一部分。SMTP服务器作为电子邮件发送的核心组件&#xff0c;其搭建过程至关重要。下面&#xff0c;AokSend就来详细探讨一下SMTP服务器搭建的关键步骤…

web学习笔记(五十)

目录 1. nodemon 1.1 什么是nodemon 1.2 安装并使用Nodemon 2. Express 路由 2.1 路由的匹配过程 2.2 简单路由 2.3 模块化路由 2.4 注册路由模块 2.5 路由模块添加前缀 3. Express 中间件 3.1 中间件的格式 3.2 中间件的作用 3.3 局部生效的中间件 3.4 中间件…

云计算面临的威胁

目录 一、概述 二、威胁建模分析 2.1 威胁建模的概念 2.2 威胁建模起到的作用 2.3 威胁建模的流程 2.3.1 威胁建模流程图 2.3.2 威胁建模流程内容 2.3.2.1 绘制数据流图 2.3.2.2 威胁识别与分析 2.3.2.2.1 STRIDE威胁分析方法论 2.3.2.3 制定消减措施 2.3.2.3.1 消减…