jmeter的基本使用

news2024/11/8 23:39:53

Jmeter基本使用

一、变量

1.用户定义变量

2.用户参数

二、函数

1.计数器${__counter(,)}

2.时间函数

3.加密函数${__digest(,,,,)}

4. 整数相加${__intSum(,,)}

5.属性函数,${__P(,)}、${__property(,,)}、${__setProperty(,,)}

6.V函数

三、获取响应数据

1.json提取器

2.正则提取器

四、DDT数据驱动测试

1.文件名称

2.设置介绍

3.须知内容:

五、逻辑控制器

1.循环控制器、foreach控制器

2.if 条件控制器

六、事务控制器

七、聚合报告\汇总报告

八、临界控制器Critical Section Controller

九、仅一次控制器Once Only Controller

十、DDT驱动数据驱动(二)

1.使用方法: jmeter + sqlite

2.使用步骤

3.操作截图

一、变量

1.用户定义变量

位置:测试计划-->配置元件-->用户定义的变量

适用范围:全局变量

作用域:作用于整个‘测试计划

使用情况: 在启动运行时,获取一次值,在运行过程中,不会动态获取值,在运行过程中,值一直都不变在启动运行时,获取一次值,在运行过程中,不会动态获取值,在运行过程中,值一直都不变

使用结果:

2.用户参数

位置:线程组-->前置处理器-->用户参数

适用范围:局部变量

作用域: 作用于当前线程组或当前的取样器

使用情况: 在启动运行时,获取一次值,在运行过程中,还会动态获取值。在启动运行时,获取一次值,在运行过程中,还会动态获取值。

用户参数,在取样器调用之前被使用。

使用结果:

2.1 每次迭代更新一次

勾选后,当前线程组下所有的接口,全部执行,才会更新;

二、函数

  • 双下划线开头
  • 函数名称,严格区分大小写
  • 重要的函数
${__counter(,)} 计数器
${__dateTimeConvert(,,,)}   时间格式转换
${__digest(,,,,)}  加密  简单加密  *****
${__intSum(,,)}  整数相加函数
${__P(,)}   获取属性函数  *****
${__property(,,)}  获取属性函数  *****
${__setProperty(,,)}   设置属性函数  *****
${__Random(,,)}   随机数
${__RandomString(,,)}   随机字符串
${__threadNum}  获取线程号函数   
${__time(,)}  获取当前时间戳函数  *****
${__timeShift(,,,,)}  数据格式化  
${__V(,)}   拼接函数    *****

1.计数器${__counter(,)}

创建计数器函数:

使用计数器函数:

在调式取样器的名称使用计数器函数,循环5次,名称的数字每次加1,起到一个计数器的作用。

注意:计数器函数每次递增只能加1,若想用递增加2或递增更多的时候,需要使用配置原件中的 “计数器”;

注意截图中的最大数值: 如果运行结果超过最大值时,又会从起始值开始循环;

每个用户独立计数器: 多线程时,每个用户都是从起始值开始计数

2.时间函数

2.1 ${__time(,)}函数

第一种情况:不写参数,就是单独获取当前时间的时间戳

第二种情况,带函数参数时,可以获取到对应格式的时间:

2.2 ${__dateTimeConvert(,,,)} 时间转换

使用与可以将时间戳转换成时间:

2.3 ${__timeShift(,,,,)} 时间偏移

3.加密函数${__digest(,,,,)}

注意:这个加密函数 只能做简单的加密;

4. 整数相加${__intSum(,,)}

这个函数只能做整数相加

5.属性函数,${__P(,)}、${__property(,,)}、${__setProperty(,,)}

动态属性,是在运行过程中产生的,关闭jmeter,就是自动释放了

属性是jmeter工具具有,jmeter中的线程组要使用属性,都可以使用。可以跨线程组了。

设置jmeter的动态属性,主要是为了跨线程组定义参数;

实际设置属性操作:

1.线程组1,先使用调试取样器,挂一个前置处理的的用户参数,定义一个局部变量:

2.将par设置成属性:

3.在线程组2读取属性proper_par:

读取属性有函数${__P(,)} 、${__property(,,)} 这2个函数意义相同没有区别。

线程组2可以使用调试取样器测试,就可以取到这个属性了:

6.V函数

举例说明:

1.取样器下定义了3个用户变量要当做入参的手机号:

2.此时就可以使用,V函数将var_和计数器函数拼接起来,当做手机号入参的value:

${__V(前缀_可变后缀)} = 得到是这个 “前缀_可变后缀” 变量名值

三、获取响应数据

1.json提取器

1.1添加json提取器的位置:在取样器上右键 > 后置处理器 > json提取器

注意:Match.No是获取第几个该字段的值,如果是0就是随机一个,如果要获取的所有该字段的值写-1,如果获取具体某一个只需写具体数值。

1.2举例说明:

{
    "msg": "成功调用",
    "code": 0,
    "data": {
        "pmoney": 100.0,
        "createtime": 1708827844213,
        "sex": 1,
        "mobile": "18888889992",
        "token": "tRUcARYUf+yYdsXjtAhuBTSMHlUaqTkMv0CA7HxezU\/hqZpq7g9fDZ\/n96CFBLtNxRU\/jxaEwo\/fQbjJJq9BrA==",
        "lasttime": 1708827844213,
        "money": 0.0,
        "gqid": "4000001",
        "identity": "1d65cb3e94ac22ae",
        "id": 180714,
        "age": 20,
        "email": "158000000011@test.com",
        "username": "test11"
    }
}

提取上方数据中的gqid字段:(两种写法)

  • $.根路径.二级路径 json提取式 ----绝对路径写法
  • $..末梢节点名称 -----相对路径写法, 推荐

1.3 json获取多个值

变量名、提取式 要用英文的;号分隔。

注意:Default Values要写上默认值。

2.正则提取器

2.添加正则提取器的位置:在取样器上右键 > 后置处理器 > 正则提取器

正则提取式: 左边界(正则式)右边界, 万能正则式: .*?

.*?的正则式除换行符之外,都可以匹配

举例说明:

{
    "msg": "成功调用",
    "code": 0,
    "data": {
        "pmoney": 100.0,
        "createtime": 1708827844213,
        "sex": 1,
        "mobile": "18888889992",
        "token": "tRUcARYUf+yYdsXjtAhuBTSMHlUaqTkMv0CA7HxezU\/hqZpq7g9fDZ\/n96CFBLtNxRU\/jxaEwo\/fQbjJJq9BrA==",
        "lasttime": 1708827844213,
        "money": 0.0,
        "gqid": "4000001",
        "identity": "1d65cb3e94ac22ae",
        "id": 180714,
        "age": 20,
        "email": "158000000011@test.com",
        "username": "test11"
    }
}

获取以上响应的token:

四、DDT数据驱动测试

位置:线程组-->配置元件-->CSV数据文件设置

1.文件名称

可以是txt、csv等文本文件,都可以,但是,我们推荐使用txt,能不用csv,就不用csv。

  • 获取速度 txt相对要快
  • 编码:txt文件,默认编码,utf8; csv文件,默认编码,不是utf8
  • 遇到jmeter读取csv文件内容,乱码问题:
    • 原因:csv的编码不是utf8,而csv数据文件设置中,选择了utf8,导致编码不一致。
    • 解决:把csv文件,用记事本打开,选择编码为utf8保存

2.设置介绍

变量名称: 可以写多个,多个之间用“,” 固定使用逗号;

是否允许带引号: 一对英文双引号;

遇到文件结束符再次循环:

  • rue: 运行次数超过总数量行数时,会从头开始取值
  • False:运行次数超过总数量行数时,还会继续运行,但是取不到值
  • 管理取值的情况

遇到文件结束符停止线程:管理运行状态;

分隔符:文档内的分隔符号,建议使用英文的逗号;

3.须知内容:

使用csv数据文件设置,默认配置的情况下,当多用并发时:

    • 第1thead,第一次取值,取第1行;
    • 第2thead,第一次取值,取第2行;
    • 第3thead,第一次取值,取第3行;

五、逻辑控制器

性能测试脚本中,会使用逻辑控制器,但是,使用了逻辑控制器,并不是混合场景。

1.循环控制器、foreach控制器

循环控制器:常用在 重复运行多次

foreach控制器:常用于,使用 带有 _ 下滑线变量引用


2.if 条件控制器

默认的情况下, 勾选了条件框中,要使用 __jexl3 or __groovy 函数的计算结果为true,false;

如果不勾选 Interpret condition as variable express 是把 条件框中的 表达式 当做js脚本,进行计算,计算的结果为真,则执行下面请求

六、事务控制器

  • 在jmeter中,默认一个取样器,就是一个事务;
  • 事务控制器,控制其子集取样器(n),合并为一个事务
    • 事务: TPS 服务器每秒处理的事务数
    • 在事务控制器下,挂载多个取样器,想要把多个取样器合并为1个事务,必须勾选“Generate parent sample”

七、聚合报告\汇总报告

在性能测试中,看聚合报告,有前提条件:

  • 1、没有网络瓶颈
    • 在很多时候,我们在看聚合报告时,会把 吞吐量的值 等价为 TPS的值,其实是不对的。
    • 怎么判断有没有网络瓶颈?
      • 1.聚合报告最后两列,是 吞吐率,每秒传输多少KB的数据。
      • 2.吞吐率 与我们的带宽是有关系, 吞吐率,是可以看出是否存在网络带宽问题?
      • 带宽:100Mb = 100 * 1024kb = 102400kb /8 = 12800KB (b 和 B 是8倍的关系)
      • 理论上百兆带宽,每秒不超12800KB传输的数据 就没有网络瓶颈。
  • 2、并发用户数不变
    • 负载测试时,并发用户数会随着时间变化,而变化,就不能看聚合报告。
    • 因为吞吐量是个平均值,用户变化时,在用平均值就不行了,得到的结果无法看到当时并发量的TPS。

聚合报告含义:

每一行数据:都是一种事务;

样本:在请求的过程中,所有的并发用户数,在一段时间中的总请求量

  • 单独看样本,是无法知道并发用户数、执行时长 ;
  • 例如样本 = 472 , 10个并发数, 10人 * 60秒 * 频率 = 472 频率= 0.78 ,也就是每个用户每秒钟发送0.78个吞吐量
  • 平均值、中位数、90%百分位...........最小值、最大值: 这些都是响应时间, 它们单位是 毫秒ms
  • 90%百分位:所有的样本中,有90%的样本时间是小于等于这个时间的。 这个具有参考价值。

八、临界控制器Critical Section Controller

  • 严格控制请求顺序
  • 锁名称: 默认是一个固定锁名称
    • 相当于把性能测试中的并行执行,强制转换为 串行

九、仅一次控制器Once Only Controller

仅一次控制器: 意思是,一个线程用户只执行一次

  • 并发用户是10,不管你设置循环多少次,其下挂载的取样器,每个都只会执行10次
  • 并发用户是10,不管你运行多长时间,其下挂载的取样器,每个都只会执行10次

十、DDT驱动数据驱动(二)

1.使用方法: jmeter + sqlite

jmeter的lib目录安装sqlite-jdbc-3.31.1.jar 包

2.使用步骤

  • 2.1 首先使用jmeter的jdbc request 查询mysql数据库的数据;
  • 2.2 查询数据结果定义成变量;
  • 2.3 使用jmeter的jdbc request 创建sqlite的文件;
  • 2.4 使用jmeter的jdbc request 对sqlite数据库文件创建一个表;
  • 2.5 使用jmeter的jdbc request 将myslq的查询结果变量,通过循环控制器逐条插入到sqlite的表中;
  • 2.6 再次查询sqlite的表中 ,将数据写入到用户属性内,后续取参数直接取属性了

3.操作截图

1.链接mysql配置

2.链接sqlite配置

3.sqlite数据库创建表0302user

4.查询mysql数据的结果定义成变量

5.通过循环控制器+计数器 对sqlite表插入数据

6.再次查询sqlit内的数据,将数据写入到用户属性内

7.小功能:可以将插入到sqlite中的数据保存到txt文件

加一个 保存详情到问文件的监听器

  • 填写文件名称前缀
  • 勾选: Don't add number to prefix
  • 勾选: Don't add content type suffix

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

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

相关文章

算法的学习笔记—和为 S 的连续正数序列(牛客JZ74)

😀前言 在牛客网的《剑指 Offer》系列题中,有一道关于输出和为给定值 S 的连续正数序列的问题。这是一道典型的双指针问题,考察我们对连续数列求和的理解和双指针的应用。本文将详细解析这道题的思路,并展示如何实现代码。 &#…

D53【python 接口自动化学习】- python基础之模块与标准库

day53 自定义模块 学习日期:20241030 学习目标:模块与标准库 -- 67 自定义模块:如何编写一个完整功能? 学习笔记: 创建自定义模块 自定义模块注意事项 自定义模块 def func1():return this is a functionclass Cl…

上市公司企业数字金融认知数据集(2001-2023年)

一、测算方式:参考C刊《经济学家》王诗卉(2021)老师的做法,数字金融认知使用每万字年报描述中包含的对数字金融相关关键词的提及次数,关键词为:互联网、数字化、智能、大数据、电子银行、金融科技、科技金融…

4.2-7 运行MR应用:词频统计

文章目录 1. 准备数据文件2. 文件上传到HDFS指定目录2.1 创建HDFS目录2.2 上传文件到HDFS2.3 查看上传的文件 3. 运行词频统计程序的jar包3.1 查看Hadoop自带示例jar包3.2 运行示例jar包里的词频统计 4. 查看词频统计结果5. 在HDFS集群UI界面查看结果文件6. 在YARN集群UI界面查…

How to Train Neural Networks for Flare Removal

Abstract 当相机指向强光源时,生成的照片可能包含镜头眩光伪影。 耀斑以多种形式出现(光晕、条纹、渗色、雾霾等),这种外观的多样性使得去除耀斑变得具有挑战性。 现有的分析解决方案对伪影的几何形状或亮度做出了强有力的假设&a…

Kafka如何控制消费的位置?

大家好,我是锋哥。今天分享关于【Kafka如何控制消费的位置?】面试题?希望对大家有帮助; Kafka如何控制消费的位置? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中,控制消费位置主要通过以下几个机制来实…

shell脚本实例(4)while实现1+...+100,linux新增用户

while实现1到100求和 #!/bin/bash/ s0 i1 #-le小于等于 while [ $i -le 100 ] dos$[ $s$i ]i$[ $i1 ] done echo $s echo $i 执行结果如下 修改用户名密码脚本 #!/bin/bash/ #提示用户输入用户名 read -p "请输入用户名:"username useradd $username #提…

Qt 实战(10)模型视图 | 10.5、代理

文章目录 一、代理1、简介2、自定义代理 前言: 在Qt的模型/视图(Model/View)框架中,代理(Delegate)是一个非常重要的概念。它充当了模型和视图之间的桥梁,负责数据的显示和编辑。代理可以自定义…

lenovo联想小新 潮7000-14AST(81GE)笔记本原厂Win10系统镜像安装包下载

适用机型:【81GE】 链接:https://pan.baidu.com/s/1ciGya7OjTN73rHFJs52WpQ?pwdkgk4 提取码:kgk4 联想原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家、联想浏览器…

C语言部分输入输出(printf函数与scanf函数,getchar与putchar详解,使用Linux ubuntu)

1.输入输出 1.1.按格式输入输出 printf 可以在man手册中查看 int printf(const char *format, ...); printf:函数名(参数)int:函数的返回值 功能:按格式在终端输出 参数:多参 返回值:输出字符个数 格式: %d int %c char…

Jmeter自动化实战

一、前言 由于系统业务流程很复杂,在不同的阶段需要不同的数据,且数据无法重复使用,每次造新的数据特别繁琐,故想着能不能使用jmeter一键造数据 二、创建录制模板 可参考:jmeter录制接口 首先创建一个录制模板 因为会有各种请求头,cookies,签名,认证信息等原因,导致手动复制…

【mysql】4-2. MySQL存储结构

MySQL存储结构 1 什么是表空间⽂件? 解答问题 表空间⽂件是⽤来存储表中数据的⽂件,表空间⽂件的⼤⼩由存储的数据多少决定,不同的表空间⽂件存储数据的种类也有所不同,在MySQL中表空间分为五类,包括:系统…

Ansible基本使用

目录 介绍 安装 inventory-主机清单 分组 子组 modules-模块 command shell script file copy systemd yum get_url yum_repository user mount cron 介绍 ansible是基于python开发的自动化运维工具。架构相对比较简单,仅需通过ssh连接客户机执行…

HivisionIDPhoto Docker部署以及Springboot接口对接(AI证件照制作)

项目简介 项目以及官方文档地址 HivisionIDPhoto 旨在开发一种实用、系统性的证件照智能制作算法。 它利用一套完善的AI模型工作流程,实现对多种用户拍照场景的识别、抠图与证件照生成。 HivisionIDPhoto 可以做到: 轻量级抠图(纯离线&a…

DB-GPT系列(一):DB-GPT能帮你做什么?

DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL and Agents),围绕大模型提供灵活、可拓展的AI原生数据应用管理与开发能力,可以帮助企业快速构建、部署智能AI数据应用,通过智能数据分析、洞察…

整理了一些大模型的课程,非常详细,大模型零基础入门到精通,收藏我这一篇就够了

目前有多个科普类的大模型课程,这些课程涵盖了从基础理论到实际应用的各个方面。以下是一些主要的科普类大模型课程:复旦大学“大模型开发与赋能”专题讲习班:由复旦大学计算机学院邱锡鹏教授带来的《大模型科普讲解》课程,通过深…

Chromium 中profile browser 和WebContents三者之间的关系c++

一、prfile介绍: 1、浏览器默认启动会创建一个默认的profile在Default目录下。 C:\Users\Administrator\AppData\Local\Chromium\User Data\Default目录下 【与窗口绑定】 proflie与N个browser对象绑定。 2、用户新建一个账户会在User Data目录下新建一个prfol…

el-datepicker此刻按钮点击失效

文章目录 此刻按钮失效原因:使用了禁用未来日期解决办法:重写此刻按钮点击事件代码(包含禁用未来日期和时分秒的处理)框出主要代码(因为包含禁用日期功能)(取你所需) 此刻按钮失效原…

shodan3,vnc空密码批量连接,ip历史记录查找

shodan语法,count,honeyscore count 今天带大家继续学习shodan,今天会带大家学一学这个count命令,再学学其他小命令好其实关键命令也没那么多,就是很方便记忆一下就学会了这样子。 shodan count "/x03/x00/x00…

node和npm

背景(js) 1、为什么js能操作DOM和BOM? 原因:每个浏览器都内置了DOM、BOM这样的API函数 2、浏览器中的js运行环境? v8引擎:负责解析和执行js代码 内置API:由运行环境提供的特殊接口,只能在所…