JMeter详解

一、线程组

作用:线程组就是控制Imeter用于执行测试的一组用户

位置:右键点击'测试计划’-->添加 -->线程(用户)--> 线程组

特点: 模拟多人操作线程组可以添加多个,多个线程组可以并行或串行取样器(请求)和逻辑控制器必须依赖线程组才能使用线程组下可以添加其他元件下组件

1,线程组分类

(1)线程组

普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户

(2)setup线程组

一种特殊类型的线程组,可用于执行预测试操作

(3)teardown线程组

一种特殊类型的线程组,可用于执行测试后工作

注:在并行情况下setup最先执行,teardown最后执行

2,线程组参数详解

(1)http请求参数详解

作用:向服务器发送http及https请求 位置:选中线程组->右键->添加->取样器->HTTP请求

案例一:GET请求,URL为test_百度搜索要求:使用HTTP请求-路径来传递get请求参数

案例二:GET请求,URL为百度安全验证要求:使用HTTP请求-参数列表来传递get请求的参数

案例三:POST请求,URI为百度安全验证,请求体为:wd=test(form表单要求:使用HTTP请求-参数列表来传递POST请求的form格式参数

不在演示和get一样将http请求方式更改为post即可

案例四:POST请求,URI为百度安全验证,请求体为:wd=test(form表单要求:使用HTTP请求-消息体数据来传递POST请求的form格式参数

(2)查询结果树

作用:查看HTTP请求的请求和响应结果

位置:选中测试计划/线程组->右键->添加->监听器->查看结果树

组成: 取样结果:查看响应信息头信息、响应状态码

请求:查看请求相关信息(ur1、方法、参数)

响应:查看响应信息

查询结果乱码解决方案

打开bin目录下的jmeter.properties文件

ctrol+f 查找sampleresult.default.encoding

更改为UTF-8,将#取消掉

重启jmeter

二、JMeter进行http接口测试的技术要点

1,参数化

(1)定义

参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法。

(2)JMeter中常见的参数化方式
1,用户定义的变量 ----------------全局变量

作用:定义全局变量 位置:测试计划 -->线程组-->配置元件 -->用户定义的变量

案例

请求:百度一下,你就知道

要求:使用用户定义的变量配置被测系统的协议、域名和端口

引用

2,用户参数--------------------------为每个用户分配不同的参数值

作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值

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

案例

请求:百度一下,你就知道 要求:第一个用户请求附带参数:name=“张三"&age=28;第二个用户请求附带参数:name="李四"&age=30

3,CSV Data Set Config----------文件方式参数化

作用:让不同用户在多次循环时,可以取到不同的值

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

csv参数含义

案例

请求:百度一下,你就知道 要求:循环请求3次,每次请求时附带参数username,password,code的值不相同

步骤

1:定义Csv数据文件

2:添加线程组,设置循环次数为3

3.添加Csv数据文件设置

4.添加HTTP请求

不在演示

5.添加查看结果树

不在演示

4,函数---------------------------------随机数据

作用:计数函数,一般做执行次数统计使用

位置:在菜单中选择-->工具-->函数助手对话框

2,JMeter断言

断言:让程序自动判断预期结果和实际结果是否一致 提示: JMeter在请求的返回层面有个自动判断机制(响应状态码)但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。 JMeter中常用断言: 响应断言 JSON断言 持续时间断言(Duration Assertion)

(1)响应断言

作用:对HTTP请求的任意格式的响应结果进行断言 位置:测试计划-->线程组-->HTTP请求 -->(右键添加)断言 --> 响应断言

参数配置详细介绍: 测试字段:要检查的项(实际结果) 响应文本:来自服务器的响应文本,即主体响应代码:响应的状态码,例如:200 响应信息:响应的信息,例如:OK Response Headers:顺应头部 Request Headers:请求头部 Request Data:请求数据 URL样本:请求URL Document(text):响应的整个文档忽略状态:忽略返回的响应状态码

模式匹配规则:比较方式 包括:文本包含指定的正则表达式 匹配:整个文本匹配指定的正则表达式 Equa1s:整个返回结果的文本等于指定的字符串(区分大小写Substring:返回结果的文本包含指定字符串(区分大小写 否:取反 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK) 注意:Equa1s和substring模式是普通字符串,而包括和匹配式是正则表达式

(2)Json断言

作用:对HTTP请求的JSON格式的响应结果进行断言 位置:测试计划-->线程组--> HTTP请求 -->(右键添加)断言 --> JSON断言

参数介绍: Assert JsoN Path exists:用于断言的JSON元素的路径(实际结果)

Additionally assert value:如果您想要用某个值生成断言请选择复选框

Match as regular expression:使用正则表达式断

Expected value:期望值((期望结果)

Expect nu11:如果希望为空,请选择复选框

Invert assertion(will fail if above conditionsmet):反转断言(如果满足以上条件则失败)

(3)断言持续时间

作用:检查HTTP请求的响应时间是否超出要求范围 位置:测试计划-->线程组-->HTTP请求-->(右键添加)断言 -->断言持续时间

参数介绍 持续时间(亳秒):HTTP请求允许的最大响应时间(单位:毫秒)超过则认为失败

3,JMeter关联

关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。 Jeter中常用的关联方法: 正则表达式提取器 XPath提取器 JSON提取器

(1)正则表达式提取器

作用:针对任意格式的响应数据进行提取 位置:测试计划 -->线程组--> HTTP请求 -->(右键添加)后置处理器-->正则表达式提取器

参数介绍: 引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写title,则可用${title}引用它正则表达式 ():括起来的部分就是要提取的。 匹配任何字符串。 -:一次或多次。 ?:不要太贪婪,在找到第一个匹配项后停止。 ,如果在正则表达式中有多个提取值,则可以模板:用$$引用起来是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值缺省值:如果参数没有取得到值,那默认给一个值让它取。

(2)XPath提取器

作用:针对HTML格式的响应结果数据进行提取 位置:添加方式:测试计划-->线程组--> HTTP请求(右键添加)--后置处理器--> xPath提取器

参数介绍: Use Tidy (tolerant parser): 当需要处理的页面是HTML格式时,必须选中该选项

当需要处理的页面是XML或XHTML格式时,取消选中该选项。

引用名称:存放提取出的值的参数名称 xPath &uery:用于提取值的xPath表达式

匹配数字:如果xPath路径查询出许多结果,则可以选择提取哪个0:表示随机,-1:表示提取所有结果,1表示第一个值

缺省值:参数的默认值

(3)Json提取器

作用:针对JSON格式的响应结果数据进行提取 位置:添加方式:测试计划-->线程组--> HTTP请求 -->(右键添加)后置处理器--> JSON提取器

参数介绍: Names of created variables:存放提取出的值的参数名称

JSON Path Expressions:JSON路径表达式

Match wo:如果JSON路径匹配出许多结果,则可以选择提取哪个。0:表示随机,-1:表示提取所有结果,1表示第一个值

Default values:参数的默认值

(4)JMeter属性

作用:是一个线程定义的变量在另外的线程中也能使用

使用"meter属性"的操作步骤? 1.添加线程组 2.添加HTTP请求 3.添加JSON提取器,添加Beanshe11取样器(将JSON提取器提取的值保存为JMeter属性)

4.保存meter属性:${setProperty(pro city,${city},)}添加HTTP请求-百度(读取JMeter属性)

5.读取JMeter属性:${ property(pro_city,,)}

6.添加查看结果树

略微复杂不在演示

4,脚本录制

JMeter录制脚本的操作步骤: 1.添加HTTP代理服务器,并进行配置加HTTP代理服务器:测试计划(右键>非测试元件->HTTP代理服务器配置代理服务器的参数

2.开启windows操作系统的浏览器代理

3.启动服务器开始录制

4,在浏览器页面中进行操作,成功后,,就能在JMeter当中看到抓取到的接口请求了

三、JMeter直连数据库

1,直连数据库的使用场景

用作请求的参数化 例如:登录时需要的用户名,可以从数据库中查询获取

清理垃圾数据 例如:添加商品(商品名/编号等不能重复),再执行该脚本不能成功,需要在下次执行前删除该商品数据

用作结果的断言 例如:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致

准备测试数据 例如:通过数据库来准备大量(几十万条)的性能测试数据。

2,直连数据库配置

添加MySQL驱动jar包 方式一:在测试计划面板点击“浏览.“按钮,将你的JDBC驱动添加进来

方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter

配置数据库连接信息 添加方式:测试计划 -->线程组-->(右键添加)配置元件-->JDBC Connection Configuration

参数介绍

variable Name:mysql数据库连接池名称(JDBC请求时要引用)

Database URL: jdbc:mysql://localhost:3306/tpshop2.0组成:协议 +数据库IP +数据库端口 +连接的数据库名称

IDBC DRIVER class:com.mysql.jdbc.Driver(MySQL驱动包位置固定格式 - 下拉框选择) Username:root(连接数据库用户名,如实填写)

3,jmeter逻辑控制器

(1)if控制器

作用:II控制器用来控制它下面的测试元素是否运行 位置:测试计划-->线程组-->(右键添加)逻辑控制器--> 如果(I£)控制器

(2)循环控制器

作用:通过设置循环次数,来实现循环发送请求 位置:测试计划-->线程组-->(右键添加)逻辑控制器循环控制器

(3)foeach控制器

作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值

位置:测试计划-->线程组-->(右键添加)逻辑控制器-->ForEach控制器

参数介绍: 输入变量前缀:要读取的输入变量的固定前缀

开始循环字段:要读取的输入变量后缀数字的最小值-1

结束循环字段:要读取的输入变量后缀数字的最大值

输出变量名称:读取输入变量的值后保存的新变量名,用于后续HTTP请求来引用

4,jmeter定时器

(1)同步定时器

同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会 在同一个时间点一起释放,瞬间产生很大的压力。

位置:测试计划 -->线程组--> HTTP请求-->定时器(右键添加)-->Synchronizing Timer

参数介绍: 模拟用户的数量,即指定同时释放的线程数数量。Number of simulated Users to Group by:若设置为0,等于设置为线程组中的线程数量 Timeout in mi1liseconds:超时时间,即超时多少毫秒后同时释放指定的线程数: 如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等如果大于0,那么如果超过mimeout in milliseconds中设置的最大等待时间后还没达到设置的线程数Timer将不再等待,释放已到达的线程。默认为0

(2)常数吞吐量定时器

作用:让JMeter按指定的吞吐量执行,以每分钟为单位 位置:测试计划 -->线程组--> HTTP请求 -->(右键添加)定时器 -->Constant rhroughput Timer

参数介绍: Target throughput(in samples per minute):目标吞吐量。注意这里是每个用户每分钟发送的请求数

(3)固定定时器

定时器总结

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

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

相关文章

[广搜BFS] Pots

描述 You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;DROP(i) empty the pot i to the drain;POUR(i,j) pour from pot i to po…

java -jar

java [JVM参数] -jar [jar文件路径] [应用参数,包括springboot特定参数]* JVM 参数必须在-jar之前 * 应用参数一般在jar文件路径之后java -jar excel.jar java -jar -Dloader.pathlibx /path/to/yourApp.jar java -jar -Dloader.pathlibx /path/to/yourApp.jar --…

Behind the Code:Polkadot 如何实现全球协作与去中心化治理?

2024 年 6 月 16 日,《Behind the Code: Web3 Thinkers》第二季第二集上线。本集中,ChaosDAO 联合创始人兼 Novasama Technologies 首席财务官 Leemo 深入探讨了 Polkadot 生态系统中的全球协作力量,以及这种协作如何推动去中心化治理的创新与…

聊聊语法糖

语法糖(Syntactic sugar)是指编程语言中添加的某种语法,这种语法对语言的功能没有影响,但更方便程序员使用,并能增加程序的可读性,减少代码出错的机会。 历史: 语法糖这一术语是由英国计算机科…

C++:你用过MultiIndex容器吗?

作为C开发者,我们对键值容器非常熟悉,例如std::set、std::map、std::unordered_map等。这些容器以其强大的功能和高效的性能,成为我们处理数据存储和检索任务时的得力助手。但是你用过多键容器(MultiIndex)吗&#xff…

关于团队生存的小讨论

大家好,我是阿赵。   今天出门上班的时候,在电梯里面看到了信乐团的海报,信乐团要来我家附近开演唱会了。可惜,是没有了信的信乐团。   我以前读大学的时候,组建过自己的乐队,所以对当时很多乐队都非常…

在 macOS 上使用 Homebrew 安装和配置 Python 及 Tk 库

在 macOS 上,系统自带的 /usr/bin/python3 版本较旧,且直接升级系统自带的 Python 版本可能会影响系统稳定性。因此,推荐使用 Homebrew 来安装和管理 Python 及其相关库。本文将详细介绍如何通过 Homebrew 安装和配置 Python 3 及 Tk 库&…

CentOS中的rename命令

目录 CentOS中的rename命令基本语法使用示例注意事项安装prename CentOS中的rename命令 在CentOS系统中,rename命令通常是指util-linux包中提供的版本,它用于批量重命名文件,但与Perl版本的rename命令相比,功能较为简单&#xff…

QT 中setVisible()和setEnabled()的区别

setVisible(bool)和setEnabled(true)在PyQt(以及其他类似的图形用户界面框架)中分别用于控制控件的可见性和可用性,它们之间的主要区别如下: setVisible(bool) 功能:这个函数用于设置QWidget控件的可见状态。参数&am…

AI创作在论文写作中扮演什么角色?

近年来,随着科技的快速发展,AI已经逐渐渗透到了生活中的方方面面,其中也包含着学术领域。 作为学生党,你是否还在为期末论文,大学生实践报告而发愁? 有了这些AI写作神器,大学生们再也不用在期…

深度学习500问——Chapter11:迁移学习(3)

文章目录 11.3 迁移学习的常用方法 11.3.1 数据分布自适应 11.3.2 边缘分布自适应 11.3.3 条件分布自适应 11.3.4 联合分布自适应 11.3.5 概率分布自适应方法优劣性比较 11.3.6 特征选择 11.3.7 统计特征对齐方法 11.3 迁移学习的常用方法 11.3.1 数据分布自适应 数据分布自适…

Unity做一个剪辑声音的工具 在编辑器模式实时剪辑声音

Unity音频剪辑工具的实现 在游戏开发中,音频是一个至关重要的元素。音频剪辑工具能够帮助开发者高效地编辑和管理音频文件。本文将解析一个基于Unity编辑器的音频剪辑工具的实现方法 效果 工具功能 该音频剪辑工具允许用户在Unity编辑器中加载音频片段&#xff0…

Linux 一键部署 Nginx1.26.1 + ModSecurity3

前言 ModSecurity 是 Apache 基金会的一个开源、高性能的 Web 应用程序防火墙(WAF),它提供了强大的安全规则引擎,用于检测和阻止各种攻击行为,如 SQL 注入、XSS 跨站点脚本攻击等。而 nginx 是一个高性能的 Web 服务器,常用于处理大量的并发请求,具有很高的负载均衡能力…

k8s及etcd的每日自动备份及故障时的还原脚本

#!/bin/bash# 定义备份目录 BACKUP_DIR"/data/backupdata/k8s" K8S_CONFIG_BACKUP"${BACKUP_DIR}/k8s_config_backup_$(date %Y%m%d%H%M%S).tar.gz" ETCD_BACKUP"${BACKUP_DIR}/etcd_backup_$(date %Y%m%d%H%M%S).db" TEMP_DIR"${BACKUP_DI…

<component>标签的介绍和使用

目录 基本使用: 使用组件对象: 使用动态组件与 keep-alive keep-alive简单介绍及使用: 属性: 生命周期钩子: 举例: 缓存单个组件: 缓存多个组件(通过路由动态)&…

如何修炼个人影响力,怎样有效地影响他人

一、教程描述 影响力是用一种别人所乐于接受的方式,改变他人的思想和行动的能力。影响力又被解释为战略影响、印象管理、善于表现的能力、目标的说服力以及合作促成的影响力等。影响力表明了一种试图支配与统帅他人的倾向,从而才使一个人采取各种劝说、…

iOS封装FrameWork

我们是整个项目封装给客户app用,项目里面有资源文件:xib和图片文件。有第三方,也有.a文件和第三方给我们的frameWork。下面记录下大体遇到的问题及遇到的冲突解决办法。 第一部分:封装frameWork 1.首先准备好,要封装的…

在阿里云服务器Linux系统上从头到尾实现Webapp的部署(安装卸载JDK、安装Tomcat、安装配置MySQL)

输入yum list | grep jdk 选择 devel是软件包中的典型命名格式 devel表示这个包是开发工具相关的 里面包含内容是最完整的 x86表示cpu架构是x86_64 还有openjdk表示开源版本 输入yum install java-1.8.0-openjdk-devel.x86_64 开始下载 遇到问你 is this ok? 输入y表示ok 输…

C#中的枚举类-自定义属性

在实际开发过程中,我们常常会用到枚举类,使用枚举的时候往往有着各种使用条件,如何给枚举加入使用条件呢? 答案就是我们的——自定义属性 废话不多说,上代码 枚举类 首先我们要有一个枚举类 public enum XXXX枚举…

0621# C++八股 1.成员初始化列表的概念?以及为什么使用它会快一点?2.重写Override和重载Overload区别

成员初始化列表的概念?以及为什么使用它会快一点? 成员初始化列表的概念 在C中,成员初始化列表是构造函数的一部分,它用于在构造函数体执行之前初始化类的成员变量。成员初始化列表在构造函数参数列表之后,以冒号 : …