当前位置: 首页 > news >正文

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.dtcms.com/a/293425.html

相关文章:

  • 【小学】小学学习资料合集(不定时更新,有需要及时保存,避免失效)
  • ubuntu 20.04 安装 cmake 3.26
  • error C++17 or later compatible compiler is required to use ATen.
  • Spring相关概念
  • 在腾讯云上安装gitlab
  • 《C++》面向对象编程--类(中)
  • Linux的进程管理源码相关内容梳理
  • 京东视觉算法面试30问全景精解
  • 洛谷 B3939:[GESP样题 四级] 绝对素数 ← 素数判定+逆序整数
  • 滑动窗口经典问题整理
  • 三维DP深度解析
  • 数学与应用数学专业核心课程解析
  • 【编程练习】
  • day 32 打卡
  • Linux中信号认识及处理和硬件中断与软中断的讲解
  • 生成式人工智能对网络安全的影响
  • 软件工程:软件设计
  • Python机器学习:从零基础到项目实战
  • 一个基于现代C++智能指针的优雅内存管理解决方案
  • Pycharm下载、安装及配置
  • Linux 内核不能直接访问物理地址,必须通过虚拟地址访问。
  • 17.VRRP技术
  • 【C++】简单学——vector类(模拟实现)
  • 基于SpringBoot+Vue的班级管理系统(Echarts图形化分析)
  • 一、Vue概述以及快速入门
  • DeepSeek下载量断崖式下跌72%,AI助手市场大洗牌 | AI早报
  • 广播分发中心-广播注册流程
  • 秋招Day17 - Spring - AOP
  • 构建RAG智能体(2):运行状态链
  • C#文件操作(创建、读取、修改)