Jmeter使用 - 2

5 参数化

5.1 自定义变量

线程组 --> 配置元件 --> 用户定义的变量 可以自定义变量,通过 ${变量名} 使用

5.2 随机函数

随机数函数

# 生产六位数的随机数字
${__Random(100000,999999,)}
# 生成随机时间: 时间格式yyyy-MM-dd,开始时间,结束时间,设置时区(非必填)
${__RandomDate(yyyy:MM:dd,2030:12:31,2099:12:21,,)}
# 生成随机字符串: 字符串长度,包含字符(支持中文,特殊字符)
${__RandomString(6,asdfghjklqwertyuiopmnbvcxz,)}
# 获取时间戳
${__time(,time)}

加密函数

# MD5加密 明文
${__MD5(123456,)}
# Base64加密 明文
${__base64Encode(123456,)}
5.3 CSV参数化

添加配置元件–CSV数据文件配置
在这里插入图片描述

线程共享模式

  • 所有线程:所有线程共享一份文件
  • 当前线程组:线程组内所有线程共享一份文件,多个线程顺序读取文件
  • 当前线程:每个线程都维护一份自己的文件,多个线程都从文件第一行开始顺序读取

遇到文件结束符再次循环:设置为True,线程会再次循环从第一行读取数据,设置为False,则线程会读取文件结束符

遇到文件结束符停止线程:设置为True,读取文件结束符号时停止线程,设置为False,读取文件结束符时不停止线程

  • 遇到文件结束符再次循环 ,遇到文件结束符停止线程
  • True False:一直循环读取数据,直到线程的所有循环结束
  • True True:一直循环读取数据,直到线程的所有循环结束
  • Flase True:读取到文件结束符就停止线程
  • False False:遇到文件结束符不停止线程,线程一直读取文件结束符作为参数

线程共享模式需要配合多线程(设置线程的数量大于1以及设置循环次数使用)

  • 多线程:设置线程组的线程数为n,将每个线程都会执行一遍线程组内的所有请求
  • 循环:设置循环次数为n,则每个线程都会循环执行所有请求n次
    在这里插入图片描述

6 Cookie 鉴权

参考文档:Apache JMeter - 用户手册:组件参考

HTTP Cookie管理器实现Cookie自动关联的原理

  • 第一步:当Jmeter第一次请求服务器的时候,如果服务器有通过响应头的Set-Cookie返回Cookie,那么Http Cookie管理器会保存这些Cookie的值
  • 第二步:当Jmeter第二次请求服务器的时候,会自动将Cookie信息添加到请求中,从而实现Cookie关联

实现Cookie鉴权

  • 自动关联:使用HTTP Cookie管理器对Cookie进行自动关联

  • 手动关联:使用正则提取器对Cookie进行提取,之后在HTTP请求头管理器中设置Cookie请求头
    在这里插入图片描述
    在这里插入图片描述

7 断言

响应断言

  • 响应码相等断言
  • 响应头,响应体包含,相等断言
    在这里插入图片描述
    JSON断言:通过JSON Path定位响应中的字段,并验证值是否符合预期,进行断言
    在这里插入图片描述
    在这里插入图片描述
    持续时间断言:请求超过最大持续时间断言失败
    在这里插入图片描述

8 跨线程–全局变量

通过正则提取器或JSON提取器提取的变量是局部变量,作用域为所在的线程组。如果需要跨线程组使用变量,需要进行下面操作。

跨线程实现变量引用

  1. 使用提取器将值保存为局部变量
  2. 通过BeanShell后置处理器将获取的值存储为全局属性
# 保存局部变量为全局属性
${__setProperty(USERNAME,${username},)}
# 引用全局属性
${__P(USERNAME,)}
  1. 通过引用全局属性的方法在其它线程组内使用全局属性

跨线程实现Cookie关联

  1. 配置JMeter全局配置文件 jmeter/bin/jmeter.properties CookieManager.save.cookies = true
  • 方便调试,进行该配置后在调试取样器可以查看Cookie的值
  1. 提取Cookie保存为局部变量(正则提取)
  2. 通过BeanShell后置处理器将获取的cookie的值存储为全局属性
// __setProperty 但是设置cookie为全局属性,在部分版本(5.1)不会解析变量
// 会直接将${custom_cookie}作为字符串存储到属性中
// ${__setProperty(my_cookie,${custom_cookie},)};
// 通过嵌套groovy函数实现变量解析
${__groovy(props.put("my_cookie", vars.get("custom_cookie")),)}
  1. 添加全局的HTTP Cookie管理器,在全局Cookie管理器中添加Cookie,cookie的值通过获取全局属性的方法(__P方法)获取,同时,设置Cookie生效的域名和请求路径
  • 域:Cookie生效的域名 / 服务器 , 路径为 / 表示所有请求都生效
    在这里插入图片描述

9. Jmeter实现数据库(MySQL)操作

9.1 操作步骤
  1. 添加数据库驱动(驱动版本和数据库版本要匹配 MySQL5.7 对应的驱动版本是 5.1
  2. 添加配置元件:在线程组下添加配置元件/JDBC Connection Configuration
  3. 添加配置信息
  4. 创建JDBC请求
  5. 获取数据
9.2 配置信息配置
  • Max Number of Connections:连接池最大连接数。
    • 根据需求进行配置,将最大连接数设置为并发用户数的1.2 - 1.5倍
    • 设置为0时,表示连接池的最大连接数没有明确的限制,连接池可能会根据实际需求动态地创建新的数据库连接(不推荐使用)
  • Max Wait:获取连接失败,等待连接释放的最大等待时间
  • Time Between Eviction Runs:检查并清理空闲连接的时间间隔
  • Auto Commit:自动提交
    • 设置为True,会在执行完SQL后自动提交事务
    • 设置为False,需要手动进行事务的提交和回滚
  • Transaction Isolation:事务隔离级别
    • default:和连接数据库的隔离级别保持一致(推荐)
  • 是否开启预编译:
    • 预编译(简单理解):数据库优化技术,实现参数和模板分离。
    • 预编译步骤一:模板编译:数据库提前解析带有占位符的SQL,生成执行计划并缓存
    • 预编译步骤二:参数绑定:执行时只需要传递参数值,无需二次编译,提升性能并且防注入
      在这里插入图片描述
      在这里插入图片描述
9.3 创建JDBC请求

参考文档:Apache JMeter - 用户手册:组件参考
在这里插入图片描述
执行的SQL语句类型

补充:占位符替换和${}替换的区别(重要)

?占位符是将SQL中的占位符替换为参数,底层原理是对SQL进行预编译生成执行计划,之后执行时对参数进行替换,因此能有效的防止SQL注入的问题,同时,对于需要重复执行的SQL,占位符替换无需反复编译,效率比较高

$ 替换是将引用的字符串直接拼接到SQL语句中,底层原理是将字符串直接拼接后编译,因此存在SQL注入的安全问题。对于需要重复执行的SQL,每次都要拼接后编译,因此效率比较低
在这里插入图片描述

  • Select Statement:普通查询SQL,支持使用 ${变量名称} 进行参数化,不支持 ?占位符
  • Update Statement:普通修改SQL(insert / update / delete),支持使用 ${变量名称} 进行参数化,不支持 ?占位符
  • Prepared Select Statement:预编译查询SQL,支持 ?占位符,不支持使用 ${变量名称} 进行参数化
    • 可以使用${}进行参数化,但是引用的变量是字符串需要手动添加引号,较为麻烦,不支持
  • Prepared Update Statement:预编译修改SQL,支持 ?占位符,不支持使用 ${变量名称} 进行参数化
  • Callable Statement:调用存储过程,支持使用 ${变量名称} 进行参数化,支持 ?占位符
  • Commit:提交当前连接的事务,忽略SQL语句,配合AutoCommit(false)使用。
  • Rollback:回滚当前连接的事务,忽略SQL语句,配合AutoCommit(false)使用。
  • Autocommit(false):不提交事务。
  • Autocommit(true):自动提交事务。
    在这里插入图片描述
9.4 JDBC请求参数化

使用占位符方式进行参数化,在parameter value使用${}引用变量给占位符赋值

  • 用户自定义的变量
  • 随机函数
  • CSV参数化
9.5 发送请求

发送请求
在这里插入图片描述
查看结果
在察看结果树 --> 请求 --> 请求体中查看实际执行的SQL语句
在这里插入图片描述
在察看结果树 --> 响应数据 – > 响应体中查看查询结果
在这里插入图片描述
使用结果

添加调试取样器,可以在取样器的响应体中查看查询的查询数据
在这里插入图片描述
${result_username_#} 获取当前列数据有多少行

${result_username_N} 获取当前列数据的第N行,N超过数据返回,直接使用 ${result_username_N} 返回

10 Jmeter的命令行执行

-n 通过命令行执行jmeter脚本 
-t 指定jmx文件的目录 
-l 生成jtl报告(需要使用Jmeter的察看结果树观看)
-e 生成html报告
-o 指定html报告的存储路径(必须为空目录)生成jtl需要进行全局配置 -- 通常不使用,而是使用生成html报告
全局配置:设置输出格式为xml,设置下面两个属性为true
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true# 生成jtl报告指令
jmeter -n -t test.jmx -l report.jtl生成html报告的全局配置,设置输出格式为csv: 
jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.response_data=true
jmeter.save.saveservice.samplerData=true# 生成html报告指令
jmeter -n -t csv.jmx  -l  result.jtl -e  -o reports

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

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

相关文章

部署 Zabbix 企业级分布式监控

目录 一、监控系统的功能概述 1、监控的定义 2、监控的五个层次 (1)基础设施监控 (2)系统层监控 (3)应用层监控 (4)业务监控 (5)端用户体验监控 二、…

Silly Tavern 教程②:首次启动与基础设置

本文介绍 Silly Tavern 首次启动后的基础设置,包括语言切换与 AI 后端连接,重点推荐 无需付费即可使用的免费或低成本方案,涵盖 Groq、AI Horde、Gemini 和 OpenRouter。 一、启动 Silly Tavern 并访问界面 完成安装后,执行以下命…

C#解析JSON数据全攻略

还在为C#处理网络API返回的复杂JSON数据头疼吗?据统计,90%的开发者都曾在JSON解析上栽过跟头! 本文将手把手教你用C#轻松玩转JSON数据:- HttpClient获取网络JSON数据- System.Text.Json动态解析技巧- 强类型模型转换实战- 特殊字…

8-大语言模型—指令理解:基于 LoRA 的大语言模型指令微调框架

目录 1、模型上下文窗口 1.1、增加上下文窗口的微调(Fine-tuning for Longer Context) 1.1.1、 核心目标 1.1.2、关键步骤 (1)数据准备:构建长文本训练集 (2)微调策略:分阶段适…

工业数据中台:PLC、SCADA、MES 的实时协同架构

在智能制造升级过程中,工业数据的互联互通是突破生产效率瓶颈的关键。PLC(可编程逻辑控制器)掌控着设备的实时运行参数,SCADA(监控与数据采集系统)负责车间级的状态监控,MES(制造执行…

【Golang】Go语言基础语法

Go语言基础语法 文章目录Go语言基础语法一、Go标记二、行分隔符三、注释四、标识符五、字符串连接六、关键字七、Go语言的空格八、格式化字符串一、Go标记 Go程序可以由多个标记组成吗,可以是关键字、标识符、常量、字符串、符号。如下Go语句由6个标记组成&#xf…

WebRTC指纹——深度分析(中篇)

1. 引言 在上篇中,我们建立了WebRTC审查规避系统分析的理论基础,探讨了技术背景和威胁模型。中篇将深入分析WebRTC协议栈中的具体识别特征,通过对多个主流WebRTC应用的实际协议分析,揭示不同实现之间存在的显著差异。 这些协议层面的特征差异构成了审查系统进行指纹识别的…

谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】

1 k8s 1.1 简介 Kubernetes 简称 k8s。 是用于自动部署, 扩展和管理容器化应用程序的开源系统。 中文官网: https://kubernetes.io/zh/ 中文社区: https://www.kubernetes.org.cn/ 官方文档: https://kubernetes.io/zh/docs/h…

从零搭建 OpenCV 项目(新手向)-- 第二天 OpenCV图像预处理(一)

目录 一、图像翻转(镜像翻转) 1. 定义 2. OpenCV 函数 3. 数学表达 二、图像仿射变换 1. 定义 2. 仿射变换的基本原理 3. OpenCV 函数 4. 图像旋转 5. 图像平移 6. 图像缩放 7. 图像剪切 8. 为什么会出现黑色背景? 三、图像色彩…

贪心算法Day6学习心得

第一道:738. 单调递增的数字 - 力扣(LeetCode) 这道题目暴力算法肯定是最容易想到的,先附上暴力的代码: class Solution { private:// 判断一个数字的各位上是否是递增bool checkNum(int num) {int max 10;while (n…

数据的评估与清洗篇---上手清理索引和列名

重命名索引和列名 在读取数据时,如果我们发现数据的索引或者列名乱七八糟的,可以使用DataFrame的rename方法对它们进行重新命名。 df1.rename(index={...})df1.rename(columns={...}) 重命名索引 如果想改索引就把可选参数index指定为一个字典,针对索引,把要修改…

【ICML2025】时间序列|TimePro:炸裂!线性复杂度实现高效长程多元时间序列预测!

论文地址:https://arxiv.org/pdf/2505.20774 代码地址:https://github.com/xwmaxwma/TimePro 为了更好地理解时间序列模型的理论与实现,推荐参考UP “ThePPP时间序列” 的教学视频。该系列内容系统介绍了时间序列相关知识,并提供配…

2025真实面试试题分析-iOS客户端开发

以下是对iOS客户端开发工程师面试问题的分类整理、领域占比分析及高频问题精选(基于​​85道问题,总出现次数118次​​)。按技术领域整合为​​7大核心类别​​,按占比排序并精选高频问题标注优先级(1-5🌟&…

计算机网络简答题(大雪圣期末参考资料)

1、网络性能指标/计算机网络有哪些常用的性能指标?答:速率,带宽,吞吐量,时延(发送时延、传播时延、处理时延、排队时延),时延带宽积,往返时间RTT和信道(或网络…

红宝书单词学习笔记 list 76-100

list 76NO.WordMeaning1staleadj. 不新鲜的;陈腐的2stalln. 小隔间;摊位;牲畜棚;v. 停顿;(使) 熄火;故意拖延3staplen. 订书钉;主要产品;主要部分;主食;v. 用…

Vue3 学习教程,从入门到精通,Vue 3 计算属性(Computed Properties)知识点详解与案例代码(15)

Vue 3 计算属性(Computed Properties)知识点详解与案例代码 在 Vue 3 中,计算属性(Computed Properties) 是用于基于响应式数据派生新数据的一种方式。计算属性具有以下特点: 缓存性:只有在依赖…

2.5 PN-PTCP

Profinet Precision Transparent Clock Protocol (PN-PTCP) PN-PTCP(精确透明时钟协议)是一种专用于 Profinet 的 二层协议,其作用是为网络中的设备提供高精度的时间同步。用于实现网络设备的高精度时间同步。

WordPress与Typecho站点CloudFlare缓存优化实战指南

文章目录 WordPress与Typecho站点CloudFlare缓存加速全攻略 引言 一、CloudFlare缓存基础原理 1.1 CloudFlare工作流程 1.2 缓存类型 二、基础配置指南 2.1 CloudFlare账户设置 2.2 缓存配置 2.3 页面规则设置 三、高级缓存策略 3.1 动态内容缓存 WordPress方案: Typecho方案:…

【OpenCV实现多图像拼接】

文章目录1 OpenCV 图像拼接核心原理2 OpenCV 图像拼接实现代码方法一:使用 OpenCV 内置 Stitcher 类(推荐)方法二:手动实现核心步骤关键参数说明3 常见问题处理4 增量式图像拼接(Incremental Image Stitching&#xff…

haproxy 算法

一、静态算法按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度 等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。(不管后端死活)1.1、static-rr:基于权重的轮…