JMeter的使用——傻瓜式学习【中】
目录
前言
1、JMeter参数化
1.1、什么是参数化
1.2、用户定义的变量
1.2.1、什么时候使用用户定义的变量
1.2.2、使用“用户定义的变量”进行参数化的步骤:
1.2.3、案例
1.3、用户参数
1.3.1、什么时候使用用户参数?
1.3.2、使用“用户参数”进行参数化的步骤:
1.3.3、案例
1.4、CSV数据文件设置
1.4.1、什么时候使用CSV数据文件设置
1.4.2、使用“CSV数据文件设置”进行参数化的步骤?
1.4.3、案例
1.5、函数——随机数据
1.5.1、使用场景
1.5.2、使用“counter函数”进程参数化的步骤:
1.5.3、案例
1.6、4种参数化方式对比
2、JMeter断言
2.1、响应断言
2.2.1、参数认识:
2.1.2、案例:
2.2、JSON断言
2.2.1、参数认识:
2.2.2、案例:
2.3、持续时间断言
2.3.1、参数说明
2.3.2、案例:
3、JMeter关联
3.1、正则表达式提取器
3.1.1、介绍正则表达式
案例使用一:
案例二:
3.1.2、正则表达式提取器
案例:
3.2、Xpath提取器
案例:
3.3、JSON提取器
案例:
前言
小白同学,可以先看这篇哦:http://t.csdnimg.cn/geQnl
1、JMeter参数化
1.1、什么是参数化
定义:使用不同的测试数据,调用相同的测试方法进行测试
本质:实现测试数据与测试方法的分离
实现方式举例:
- 用户定义的变量——全局变量【JMeter有】
- 用户参数——为每个用户分配不同的参数值【Jmeter有】
- CSV数据文件设置——文件方式参数化【Jmeter有】
- 函数——随机数据【JMeter有】
- 数据库
下面我们来看看JMeter中的几种参数化:
1.2、用户定义的变量
1.2.1、什么时候使用用户定义的变量
定义全局变量
1.2.2、使用“用户定义的变量”进行参数化的步骤:
- 添加线程组
- 添加用户定义的变量。格式为变量名 - 变量值
- 添加http请求,引用定义的变量名。格式:${变量名}
- 添加察看结果树
1.2.3、案例
步骤一:添加线程组

步骤二:添加用户定义的变量

步骤三:添加http请求
http中可以这样填:

也可以这样填:

步骤四:添加察看结果树

查看运行结果:

1.3、用户参数
1.3.1、什么时候使用用户参数?
针对同一组参数,当不同的用户来访问时,可以获取到不同的值
1.3.2、使用“用户参数”进行参数化的步骤:
- 添加线程组,设置线程数为n(模拟的用户数)
- 添加用户参数:第一列添加多个变量名;后续每一列为一组用户数据【看案例】
- 添加http请求,引用定义的变量名。格式:${变量名}
- 添加查看结果树
1.3.3、案例
步骤一:添加线程组
和上面一样,记得设置线程数,例:2
步骤二:添加用户参数


步骤三:添加http请求
同第一个案例
步骤四:添加察看结果树
同第一个案例
查看运行结果:


1.4、CSV数据文件设置
1.4.1、什么时候使用CSV数据文件设置
当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值
1.4.2、使用“CSV数据文件设置”进行参数化的步骤?
- 定义CSV数据文件
- 添加线程组
- 添加CSV数据文件设置
- 添加http请求,引用定义的变量名。格式${变量名}
- 添加查看结果树
1.4.3、案例
步骤一:定义CSV数据文件

步骤二:添加线程组
同案例1,设置循环次数,例:2
步骤三:添加CSV数据文件设置


步骤四:添加http请求

步骤五:添加察看结果树
同案例1
查看运行结果:


1.5、函数——随机数据
1.5.1、使用场景
自动生成不重复的数据,让每个用户循环都能取到不同的数据,且不需要提前定义
1.5.2、使用“counter函数”进程参数化的步骤:
- 添加线程组,设置虚拟用户数和循环次数
- 生成_counter函数
- 添加http请求,使用_counter函数。格式:${_counter(FALSE,)}
- 添加察看结果树
1.5.3、案例
步骤一:添加线程组
同上,设置线程数2,循环次数2
步骤二:生成_counter函数

参数:
-
第一个参数
- True,每个用户(线程)的计数器保持独立,每个用户(线程)计数从1开始计数。
- False,全局计数器,所以用户(线程)统一从1开始计数。
-
第二个参数
- 将计数器函数生成的值赋值给新变量。比如,新变量名称为number,后续可以通过参数化方式${number}引用计数器的值。

步骤三:添加http请求

步骤四:添加察看结果树
同上
查看运行结果:



1.6、4种参数化方式对比
- 用户定义的变量:作用:定义全局变量;局限性:每次取值(无论是否相同的用户)都是固定值
- 用户参数:作用:保证不同的用户针对同一组参数,可以取到不同的值;局限性:同一个用户在多次循环中,取到相同的值
- CSV数据文件设置:作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值;局限性:需要手动进行设置测试数据
- 函数:作用:保证不同的用户多次循环时,都可以取到不同的值,不需要提前设置;局限性:输入数据有特定的业务要求时无法使用
2、JMeter断言
断言就是让程序判断预期结果与实际结果是否一致
JMeter中常用的断言:
- 响应断言
- JSON断言
- 持续时间断言
2.1、响应断言
2.2.1、参数认识:


各个参数说明:
1:
- 响应文本:来自服务器的响应文本,即主体
- 响应代码:响应的状态码,例如200
- 响应信息: 响应的信息,例如OK
- response headers:相应头部
- request Headers:请求头部
- request Data:请求数据
- URL样本:请求的URL
- Document(text):响应的整个文档
- Ignore Status:忽略返回的响应状态码
2:
- 包括:文本包含指定的正则表达式(正则表达式后面会简单介绍一下,现在就理解为包含一个字符串就可以了)
- 匹配:整个文本匹配指定的正则表达式
- Equals:整个返回结果的文本等于指定的字符串(区分大小写)
- Substring:返回结果的文本包含指定字符串(区分大小写)
- 否:取反。就是指符合刚才的断言即为错,不符合为对
- 或者:多个测试模式,有一个满足即为通过。默认是且,所有通过才为通过
2.1.2、案例:
断言:

添加一个断言结果:

http请求:

运行后,查看结果:


2.2、JSON断言
2.2.1、参数认识:


参数说明:
- Assert JSON Path exists:用于断言的JSON元素的路径(实际结果)
- Additionally assert value:如果您想要用某个值生成断言,请选择复选框
- Match as regular expression:使用正则表达式断言
- Expected Value:期望值
- Expect null:希望为空,则勾选复选框
- Invert assertion(will fail if above conditions met):反转断言(如果满足上述条件则失败)
2.2.2、案例:
http请求:

JSON断言:

上述的JSON的路径,就是这个值在json格式下对应的位置,$.data.gender对应如下:

运行后,看断言:
2.3、持续时间断言
就是用来检查http请求的响应时间是否超出要求范围
2.3.1、参数说明


参数:
- 持续时间(毫秒):请求允许的最大响应时间,超过则认为失败~
2.3.2、案例:
断言:

http请求同上一个案例相同~
运行,查看断言结果:

3、JMeter关联
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求的返回数据。这时就需要用到关联处理
JMeter中常用的关联方法:
- 正则表达式提取器
- Xpath提取器
- JSON提取器
3.1、正则表达式提取器
3.1.1、介绍正则表达式
- 公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
- .:是通配符,可以代表任意字符(除换行回车)
- *: 代表前面的字符出现0次或者多次
- .*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
- ?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找
- 左边界和右边界
最终使用:
公式格式:左边界(.*?)右边界
案例使用一:
我们结合现在网站,来验证一下: 正则表达式在线测试 | 菜鸟工具
内容:<title>百度一下,你就知道</title><title>百度一下,你就知道</title>
提取目标:<title>百度一下,你就知道</title>
正则表达式:套公式:左边界<title>,右边界:</title>
结果:

和我们预想的不太一样,预想的是:<title>百度一下,你就知道</title>
所以我们要加一个问号,表示非贪婪匹配:

这里是找到了两处,我们可以自己决定要哪一个~
案例二:
内容:
预计匹配:所有的号码
表达式错误示范:

正确匹配:

注:
- 通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
- 每一组数据都可以有一个或者多个值
3.1.2、正则表达式提取器
- 作用:任意格式的响应数据,都可以使用正则表达式提取器进行提取
- 添加:

- 参数说明:

- 引用名称:存放提取出的值的参数名称,如填写title
- 正则表达式:左边界(*?)右边界
- 模板:用SS引用起来,表示解析出第几个()的值
- 匹配数字: 1表示第1个值,-1表示所有取值,0表示随机
- 缺省值:默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
案例:
请求1:

正则表达式提取器:

请求2:

运行,查看结果树:

这里的值为空,怎么办?
我们可以添加一个
调试取样器,不用对里面的值更改,添加了就行:

添加一个查看结果树,运行,看结果:

我们可以看到gender变量确实为空,但下面的变量有值呀,所以我们修改请求2:

重新运行,查看:

3.2、Xpath提取器
- 作用:针对html格式的响应结果数据进行提取
- 添加位置:

- 参数说明:

- Use Tidy(tolerant parser):当需要处理的页面是html格式时,需要勾选该选项;当需要处理的页面是XML或XHTML格式时,取消选中该选项
- Quiet表示只显示需要的HTML页面
- Report errors表示显示响应报错
- Show warnings表示显示警告
- Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;
Validate XML:根据页面元素模式进行检查解析 - Ignore Whitespace:忽略空白内容
- Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容(一些XML元素具有属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操作时,提供元素的额外信息,这时候需要在DTDs中声明)
- Return entire XPath fragment of text content:返回文本内容的整个XPath片段;
- 引用名称:存放提取出的值的参数名称
- Xpath Query:用户提取值的xpath表达式【和UI自动化定位元素一样】
- 匹配数字:如果xpath路径可以查询出许多的结果,则可以选择提取哪个。0表示随机;-1表示所有;1表示第一个值
- 缺省值:参数的默认值。可以不填写。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
案例:
请求1:

Xpath提取器:

http请求2:

添加一个调试取样器,不用对里面的值更改,添加了就行:

添加一个查看结果树,运行,看结果:

3.3、JSON提取器
作用:针对JSON格式的响应结果数据进行提取
添加位置:
参数介绍:
- Names of create variables:存放提取出的值的参数名称
- JSON Path Expression:JSON路径表达式
- Match No:如果JSON路径匹配出许多结果,则可以选择提取哪个:0表示随机;-1表示所有;1表示第一个值
- Default Value:参数的默认值
案例:
请求1:

JSON提取器:

请求2:

运行结果:


好啦,先到这里咯~~~
相关文章:
JMeter的使用——傻瓜式学习【中】
目录 前言 1、JMeter参数化 1.1、什么是参数化 1.2、用户定义的变量 1.2.1、什么时候使用用户定义的变量 1.2.2、使用“用户定义的变量”进行参数化的步骤: 1.2.3、案例 1.3、用户参数 1.3.1、什么时候使用用户参数? 1.3.2、使用“用户参数”进…...
MyBaties存储和查询json格式的数据(实体存储查询版本)
最近在做的功能,由于别的数据库有值,需要这边的不同入口的进来查询,所以需要同步过来,如果再继续一个一个生成列对应处理感觉不方便,如果没有别的操作,只是存储和查询,那就可以用MySql支持的jso…...
动态规划14:一和零
动态规划14:一和零 题目 474. 一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 …...
C#WPF嵌入字体实例
本文介绍C#WPF嵌入字体实例。 首先创建项目 添加Resources文件夹,添加字体文件,字体文件属性:生成操作为Resources,复制到输出目录:不复制 字体的使用可以采用以下两种方法: 方式一 直接引用 FontFamily="./Resources/#幼圆" 方式二 定义资源 <Applica…...
Linux——Linux权限
Linux权限 前言一、shell命令以及运行原理二、Linux权限的概念Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的相关设置方法 file指令目录的权限粘滞位 总结 前言 linux的学习…...
android中gradle的kotlin编译配置选项
一、编译配置 1、Android中的配置 使用如下方式开启在Android中的gradle的kotlin编译配置: 该配置在其余平台不可用 android {...compileOptions {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17}kotlinOptions {jvmTar…...
【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】(最大似然估计量和最大似然估计值的区别)
就我的概率论学习经验来看,这两个概念极易混淆,并且极为重点,然而,在概率论的前几章学习中,如果只是计算,对这方面的辨析不清并没有问题。然而,到了后面的参数估计部分,却可能出现问…...
NOIP2023模拟6联测27 点餐
题目大意 有 n n n样菜品,每样菜品都有两个权值 a i a_i ai和 b i b_i bi,如果你选择了 k k k个菜品,分别为 p 1 , … , p k p_1,\dots,p_k p1,…,pk,则你的花费为 ∑ i 1 k a p i max i 1 k b p i \sum\limits_{i…...
AMEYA360:类比半导体重磅发布车规级智能高边驱动HD7xxxQ系列
致力于提供高品质芯片的国内优秀模拟及数模混合芯片设计商上海类比半导体技术有限公司(下称“类比半导体”或“类比”)宣布推出重磅新品车规级智能高边驱动HD7xxxQ系列。该系列产品包括车规级单通道高边驱动HD70xxQ和车规级双通道智能高边驱动HD70xx2Q,提供不同通道…...
【HarmonyOS】鸿蒙操作系统架构
HarmonyOS架构 一. 鸿蒙系统定位二. 架构整体遵从分层设计三. HarmonyOS具有的技术特性四. HarmonyOS有三大特征 其它相关推荐: 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 所属专栏:系统架构设计师 一. 鸿…...
JSON数据
一、JSON介绍 Android应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的,获取到的数据类型常见的就是JSON。JSON是一种新的数据格式,这种格式的数据不可以直接显示到程序的界面上,需要将该数据解析为一个集合或对象的形式才…...
金融领域:怎么保持电力系统连续供应?
银行作为金融领域的关键机构,依赖于高度可靠的电力供应,以保持银行操作的连续性。在电力中断或电力质量问题的情况下,银行可能面临严重的风险,包括数据丢失、交易中断和客户满意度下降。 UPS监控系统在这一背景下变得至关重要&…...
批量重命名文件夹:用数字随机重命名法管理您的文件夹
在文件管理中,文件夹的命名是一项至关重要的任务。一个好的文件夹命名方案可以帮助我们更高效地组织和查找文件。然而,随着时间的推移,我们可能会遇到文件夹数量过多,难以管理和查找的问题。为了解决这个问题,我们可以…...
RPC与HTTP的关系
首选理清楚关系 RPC与HTTP是两个不同维度的东西 HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议,是一种传输协议,平时通过浏览器浏览网页网页,用到的就是 HTTP 协议。 而 RPC࿰…...
OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验
1. 介绍 感知哈希算法(Perceptual Hash Algorithm,简称pHash) 是哈希算法的一种,主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后…...
Android多张图片rotation旋转角度叠加/重叠堆放
Android多张图片rotation旋转角度叠加/重叠堆放 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…...
HBuilderX 自定义语法提示
在开发实践中,会使用到各种第三方组件,比如Element UI,通常的做法是到官网中复制模板再在本地根据设计要求进行修改,或是从其它已经实现的组件中复制相似的内容。但每次复制粘贴确实比较麻烦。 在HBuilderx中可以设置代码块来创建…...
Leetcode—2562.找出数组的串联值【简单】
2023每日刷题(十四) Leetcode—2562.找出数组的串联值 实现代码 long long findTheArrayConcVal(int* nums, int numsSize){int left 0;int right numsSize - 1;long long sum 0;while(left < right) {if(left right) {sum nums[left];break;}…...
T0外部计数输入
/*----------------------------------------------- 内容:通过外部按键计数进入中断执行LED取反 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的…...
分治法求解棋盘覆盖问题
分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
