Jmeter-使用手册(_5.5版本)

JMeter是一个Java桌面应用程序,具有使用Swing图形API的图形界面。可以进行接口、性能等测试,也可以对任何数据库进行同样的测试,具有可移植性,可跨平台支持Windows,Linux,Mac上使用。

JMeter运行场景不仅可以再gui方式中完成,还可以运行命令行,而且命令行的运行方式对于负载机的资源消耗会更小

Jmeter环境安装:

Jmeter环境安装(超级简单)-CSDN博客

一、Jmeter目录

1、bin 目录:可执行文件目录

主要理解其下面的以下文件以及命令
  • jmeter.bat:Windows 的启动命令

  • jmeter.log:日志文件

  • jmeter.sh:Linux 系统下的启动文件。

  • jmeter.properties:系统配置文件,如配置编码格式。

  • jmeter-server.bat:Windows 分布测试要用到的服务器配置。

  • jmeter-server:Linux 分布式测试要用到的服务器配置。

2、docs:接口文档目录

对 JMeter 集成的接口进行说明。

3、extras:扩展插件目录

例如:进行持续集成时,会将用到的 Ant、Maven 的插件放在这个目录下面。

4、lib:JMeter 运行所依赖的插件目录

该目录下面全部都是 jar 包,JMeter 会自动在 JMETER_HOME/lib 和 ext 目录下寻找 需要的类。

这里补充一下,如果在 Jmeter 中运行脚本时报如下错误:

即发生 java.lang.NOClassDefFoundError 的错误,都是因为缺少依赖的 jar 造成的。

5、licenses:Jmeter 证书目录

6、printable_docs:用户操作手册目录

这个目录下面都是官网 API。

7、backups:脚本备份目录

这个目录是在 3.3 版本后才加入的新功能,防止我们误删脚本,所有的脚本都会自动 备份在里面。

二、基本使用

2.1.建立测试计划

打开 jmeter 默认打开的已经建立了测试计划,测试计划内编写线程组,所有的组件都在测试计划内添加用户可以在测试计划内定义全局变量

2.2.创建一个线程组

步骤:选择测试计划->添加-Threads(users)→线程组;建立的线程组需要设置,并发用户

线程数设置发送请求的用户数目 即虚拟用户数,此处的线程数不等于每秒并发请求数; Ramp-up period:每个请求发生的总时间间隔,单位是秒。

循环次数:保持默认;除非按照明确指定的次数压测,即可指定明确次数;一般压测正式开始我们会勾选永远,然后通过调度器来控制脚本压测时间。

延迟创建线程直到需要:不用勾选

调度器:勾选---通过其控制压测时间,比如压测5分钟,则填入300s;

启动延迟:主要用于延迟多少时间后启动压测脚本,默认不使用;

注意:

      多个线程的默认执行顺序是随机

2.3.创建Http请求

路径:选择线程组—>添加->Sampter->Http 请求

1.发送get请求

接口地址:https://wanandrd.com/article/query 
请求方式:get 
请求参数:k

2.发送post请求

请求 post 接口-表单入参 
接口地址:https://wanandro.com/user/login
请求方式:post 
参数类型:application/x-www-form-urlencoded 
接口参数: username:limijng password:123456

常见的post请求入参还有json和form-data

  1. json入参的接口需要在请求头中指定入参类型:Content-Type:appliction/json
  2. form-data需要勾选form-data类型(如图)

注:http请求执行顺序

1.同一线程组,同一轮http请求执行顺序,按从上到下顺序执行;

2.同一线程组,不同轮http请求执行顺序,与线程组的启动时间有关;

  2-1)若启动时间远大于执行完一轮所需的时间,那么每一轮都会按步就班执行;

  2-2)若启动时间小于执行每一轮所需的时间,那么其他线程就会直接抢占cpu资源,先执行

2.4.查看结果树

作用域:

同级组件可以收集到同级组件和子组件的结果

子组件只能收集到父级组件的结果

2.5.添加 http 信息头管理器

Jmeter中;Post提交的默认格式:application/x-www-form-urlencoded不用特意在请求头中指定

路径:添加-配置元件-HTTP信息头管理器

2.6添加 cookie 管理器

作用:

处理接口之间cookies依赖

自动提取cookie信息,下一个接口自动携带

路径:右键点击线程组→添加→配置元件(Config Element)→Cookie管理器(Cookie Manager)

2.7.变量的定义和引用

1.定义变量

测试计划内定义—>为全局变量,在该测试计划下的线程组内均可引用

在线程组内定义变量—>全局变量,也可以跨线程组使用

2.引用变量

引用自定义的变量 ${变量名}

通过调试取样器-Debug-sample 来查看变量值

2.8.添加 http 请求默认值:

需求:

  • 当多个接口,都需要重复配置http协议、ip、端口等相同参数,维护起来麻烦

  • 这时可以,通过配置 “http请求默认值” 进行默认配置

后续相同域名和协议的接口就可以采用默认的 http 请求信息,不再需要重复填写
一般配置在共用请求接口的父级,这样就可以共享默认值

路径:右击线程组,选择 http 请求默认值

2.9.接口关联

作用:获取服务器返回的参数或结果,在后续的请求中使用提取到的值

在使用 Jmeter 过程中,会经常使用:cookie管理器、正则表达式提取器json 提取器,

1.正则提取器

第一步:添加正则表达式提取器

路径:请求-添加-后置处理器-正则表达式提取器

第二步:填写正则内容

变量名,可以随意定义

正则表达式,要包括有左边界和右边界以及(.*?),而且必须唯一

【正则表达式(“key”: “(.*?)”)】

模板:$1$表示取第1个正则,$2$表示取第二个正则

匹配数字,表示取第一个匹配到的值

默认值,没有匹配到就使用默认值

当需要取多个变量的值时

正则:式用,隔开

模板:用‘空格’相连

2.Json提取器

json数据(样例)

{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzgyMDAxNDcsInN1YiI6IjEyOTQifQ.kCSAYnPzQLLYAvK1g5Wby1OLhY6saiILB2v8fKYQM8Y","token_type":"bearer"}

Jsonpath语法规则:只能适用于json数据

(1)$代表根目录

(2). 代表子节点

       $.access_token

       $.token_type

       $.*:根目录下的所有子节点

(3)取数组的值通过[下标],下标从0开始

       $.data.goods_list[0].goods_list[0].id

总结:看到{}用.key,看到[]用[下标]

第一步:添加JSON提取器

路径:请求-添加-后置处理器-JSON提取器

第二步:填写JSON内容

3.0 CSV参数化

目的:

响应模拟不同用户,更接近线上真实情况

1.操作步骤:

  • 1.调研需要参数化的目标参数

  • 2.添加 csv 组件,并且输入 csv 相关信息

  • 3.找到目标接口进行替换(需要参数化的地方用变量代替)

2.添加组件:

路径:选择线程组—>添加->配置元件->CSV数据文件设置(CSV Data Set Config)

3.准备csv测试数据

相关说明:

首先需要建立一个 csv 文件:(实际这里支持三种后缀格式的文件:csv、dat、txt)

如果为列名,注意在参数化 取值设置页面要启用“忽略首行”功能

注意:csv文件一定通过 excel 另存为(保存类型选择 csv 格式)的方式建立,不能直接新 建 xx.csv 文件,否则提示错误)

CSV Data Set Config(参数说明):

1)文件名:csv 文件的名称(包括绝对路径,当 csv 文件在 bin 目录下时,只需给出文 件名即可,尤其在 Linux 中使用非 GUI 模式,一定要将文件放入 bin 目录下,这样脚本才 可以自动读取到参数化文件) 
2)文件编码:csv 文件编码,可以不填,如果存在中文,建议填写 UTF-8 
3)变量名称(西文逗号分隔):csv 文件中各列的名字(有多列时,用英文逗号隔开列 名),这个变量名称是在其他处被引用的,所以为必填项。 
4)忽略首行:如果测试数据中第一行为列名,则为 True 
5)分隔符(用\t 代表制表符):csv 文件中的分隔符(用”\t”代替 tab 键)(一般情 况下,分隔符为英文逗号)
6)是否允许带引号:默认 false 即可 
7)遇到文件结束符是否结束循环:到了文件尾是否循环,True—继续从文件第一行开 始读取,False—不再循环 
8)遇到文件结束符是否停止线程:到了文件尾是否停止线程,True—停止,False—不 停止,注:当 Recycle on EOF 设置为 True 时,此项设置无效。 
9)线程共享模式:All threads---所有线程,Current thread group—当前线程组,Current thread—当前线程

4.修改 http 中参数化

需要参数化的项的 Value 处,用${参数名}代替;

由于 csv data set config 设置中,参数变量名为 user 和 pwd;

该案例中参数化的值为${user}、${pwd}

3.1.断言

作用:判断请求结果是成功还是失败

常用的断言类型:响应断言、json断言

1.响应断言

添加路径: 请求-添加-断言-响应断言

字段讲解:

1) apply to:通常发出一个请求只触发一个请求,所以勾选“main sampie only”就 可以;若发一个请求可以触发多个服务器请求,就有 main sample 和 sub-sample 之分了

2) 要测试的响应字段:

  (1)一般的 http 响应,都勾选“响应文本”;

  (2)url 样本是对 sample 的 url 进行断言,如果请求没有重定向,就请求 url,如果有重定向,就请求 url 和重定向 url;

  (3)响应代码:http 响应代码,如 101,200,302,404,501 等。当我们要验证 404,501等 http 响应代码时,需要勾选“ ignore status”。因为当 http 响应代码为 400,500时,jmeter 默认这个请求时失败的;

  (4)响应信息:响应代码对应得响应信息,例如“OK"

3) 模式匹配:

包含 Contains:上面选中的部分包含下面的字符串或正则表达式就算 Pass

匹配 Matches:上面选中的整个部分匹配下面的字符串或正则表达式就算 Pass。

Equals:上面选中的整个部分和下面的字符串相等就算 Pass。不支持正则表达式,同时对大小写敏感。

Substring:上面选中的部分包含下面的字符串就算 Pass。不支持正则表达式,同时对大小写敏感。

Not:勾选上之后,会对前面选择的进行反转。比如 Matches + Not 就是不匹配就算 Pass。

2.Json断言

右击目标请求,添加 json 断言

输入 json 断言信息

4.断言结果查看

在“查看结果树”中点击请求的接口,可以看到断言结果(如图)

3.2.接口前置后置处理

有些时候,在测试业务性接口时,需要将某些接口前置执行或后置执行,jmeter中提供前置后置线程组,可以实现。

使用步骤:添加setUp 线程组/tearDown 线程组 --添加Http请求

执行效果:

三、Jmeter高级用法

3.1. 建立聚合报告

当我们脚本创建完成后,还需要记录压测的关键指标,比如响应时间,吞吐量等,接下来我们就通过添加聚合报告来记录这些相关指标。

路径:选择线程组—>添加->监听器->聚合报告

字段说明:

Label:sampler的名称
#Samples:表示你这次测试中一共发出了多少个请求,(如果模拟 10个用户,每个用户迭代10次,那么这里显示 100)
Average:平均响应时间——默认情况下是单个Request 的平均响应时间,当使用了Transaction Controller 时,也可以以 Transaction 为单位显示平均响应时间,单位是 ms
Median:中位数,也就是 50% 用户的响应时间

90%Line:90% 用户的响应时间
95% Line : 95% 用户的响应不会超过该时间
99% Line : 99% 用户的响应不会超过该时间
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数,万分之4 是合理的
Throughput(Qps/Tps):吞吐量——默认情况下表示每秒完成的请求数(Request perSecond),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction perSecond (tps)数
KB/Sec:每秒从服务器端接收到的数据量,相当于 LoadRunner 中的 Throughput/Sec

3.2.建立表格查看结果

选择线程组—>添加->监听器->表格查看结果

3.3.逻辑控制器

jmeter中提供一下逻辑控制元件,可以配合实际业务需求使用,需要用到那种在网上所搜

  • If 控制器

  • 循环控制器

  • 事务控制器

  • While 控制器

  • 仅一次控制器

  • 随机控制器

  • 随机顺序控制器

  • 吞吐量控制器

  • 交替控制器

3.3.beanshell(二次开发)

1. beanshell 断言

使用beanshell,需要遵循java语法

前提:导入json包,并引用

如果要断言的结果为 json 格式,则需要先将 json 的 jar包放入jmeter 安装目录下的lib 文件夹下,并且在 jmeter 测试计划页面中引入 json 的 jar包

第一步:添加beanshell断言

第二步:填写beanshell内容

获取:实际返回结果数据体

注意:整型数据比较可以用==,但是对于 String 数据必须用 equals,否则出错。 

// 导包
import org.json.*;

// 获取接口返回数据
res = prev.getResponseDataAsString();

// 转换为可以识别的类型
jsonre = new JSONObject(res);

// 获取目标字段
code = jsonre.getInt("errorCode");

// 判断
if(code != 0){
	Failure = true;
	FailureMessage = "断言失败,与结果和实际结果不符";
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【openlayers系统学习】4.2Mapbox 样式渲染图层

二、Mapbox 样式渲染图层 显然我们目前的地图需要一些样式。 VectorTile​ 图层的样式与 Vector​ 图层的样式工作方式完全相同。那里描述的样式在这里也适用。 对于这样的地图,创建数据驱动的样式(对矢量图层操作)非常简单。但矢量切片也用…

AIGC 003-Controlnet升级你的SD让图像生成更加可控!

AIGC 003-Controlnet升级你的SD让图像生成更加可控! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 ControlNet 论文 (Adding Conditional Control to Text-to-Image Diffusion Models) 提出了一种名为 ControlNet 的神经网络结构,旨在为大型文本到图…

趣店集团golang一面要个20K,Channel什么情况下会出现死锁,有遇到过吗?

结束后面试官加了VX,并询问方便二面的时间,一直还没回复,拖着拖着给忘啦... 面试题 1、自我介绍 2、你在团队里头负责哪一块,这个物流开放平台流量多大 3、为什么今年3月份被从物流开放团队转到了finance财务部门,感…

[SWPUCTF 2021 新生赛]pop

常见的魔术方法 魔术方法__construct() 类的构造函数,在对象实例化时调用 __destruct() 类的析构函数,在对象被销毁时被调用 __call() 在对象中调用一个不可访问的对象时被调用,比如一个对象被调用时,里面没有程序想调用的属性 …

​​​【收录 Hello 算法】10.4 哈希优化策略

目录 10.4 哈希优化策略 10.4.1 线性查找:以时间换空间 10.4.2 哈希查找:以空间换时间 10.4 哈希优化策略 在算法题中,我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。 Question 给…

云上聚智共创未来 | 移动云的项目实战,10分钟让你获得高度可玩的个人博客网站

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 随着互联网的发展各种以前看起来离我们比较遥远的词越来越近了,比如 云服务、大数据、区块链、容器这些听起来…

04_前端三大件JS

文章目录 JavaScript1.JS的组成部分2.JS引入2.1 直接在head中通过一对script标签定义脚本代码2.2创建JS函数池文件,所有html文件共享调用 3.JS的数据类型和运算符4.分支结构5.循环结构6.JS函数的声明7.JS中自定义对象8.JS_JSON在客户端使用8.1JSON串格式8.2JSON在前…

#12松桑前端后花园周刊-SolidStart、Vercel融资、Angular18、Nextjs15RC、p5.js、ChromeDevTools引入AI

⚡️行业动态 SolidStart 1.0 元框架发布 Solidjs 核心团队发布其元框架 SolidStart 1.0 正式版,其特点如下:基于文件系统的路由;支持SSR、流式SSR、CSR、SSG渲染模式;通过代码分割、树摇和无用代码删除构建优化;基于…

LabVIEW超快激光微纳制造系统设计

LabVIEW超快激光微纳制造系统设计 在当前的制造行业中,精密加工技术的需求日益增长,尤其是在微纳尺度上。超快激光制造技术,以其独特的加工精度和加工效率,成为了精密加工领域的重要手段。然而,大多数超快激光制造系统…

05.爬虫---urllib与requests请求实战(GET)

05.urllib与Requests请求实战GET 1.Urllib模块2.Requests模块3.对比4.实战 1.Urllib模块 Urllib官方文档 https://docs.python.org/3/library/urllib.request.html urllib是Python的标准库,用于发送HTTP请求和处理响应。它提供了urlopen、Request等函数和类来与网络…

C++初阶学习第九弹——探索STL奥秘(四)——vector的深层挖掘和模拟实现

string(上):C初阶学习第六弹——探索STL奥秘(一)——标准库中的string类-CSDN博客 string(下):C初阶学习第七弹——探索STL奥秘(二)——string的模拟实现-CS…

GVM: Golang多版本管理利器

本文介绍了 Go Version Manager 的功能和使用方法,介绍了如何通过 GVM 在系统上安装和管理多个 Go 语言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions Go 版本管理器(GVM,Go Version Manager)是一款…

X-CSV-Reader:一个使用Rust实现CSV命令行读取器

&#x1f388;效果演示 ⚡️快速上手 依赖导入&#xff1a; cargo add csv读取实现&#xff1a; use std::error::Error; use std::fs::File; use std::path::Path;fn read_csv<P: AsRef<Path>>(filename: P) -> Result<(), Box<dyn Error>> {le…

让大模型变得更聪明:人工智能的未来发展之路

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

slam14讲(第9,10讲 后端)

slam14讲&#xff08;第9&#xff0c;10讲 后端&#xff09; 后端分类基于滤波器的后端线性系统和卡尔曼滤波非线性系统和扩展卡尔曼滤波 BA优化H矩阵的稀疏性和边缘化H矩阵求解的总结 位姿图优化公式推导 基于滑动窗口的后端个人见解旧关键帧的边缘化 后端分类 基于滤波器的后…

融汇11款AI工具构建完美应用

本文将为您介绍25个开源项目&#xff0c;分为上下两篇以便您融汇它们来制作自己的AI应用。人工智能&#xff08;AI&#xff09;应用在近年来得到了长足的发展。从语音助手到软件开发&#xff0c;人工智能已在我们的生活中无处不在&#xff0c;并得到了广泛应用。 如您所见&…

免费且非常火的日程管理软件:飞项

一、简介 1、在日常繁忙的工签中&#xff0c;是否事情一大堆却记不住&#xff1f;系统自带的日历用着却是不方便&#xff0c;不顺手&#xff0c;提醒不及时&#xff1f;待办、打卡、记事乱七八糟的混在一起&#xff0c;关键时候找不到&#xff1f;市面上的日程管理软件那么多&a…

Spring框架温习

Spring 特征 Spring是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点&#xff1a; 轻量级、控制反转、面向切面、容器、框架集合 Spring 核心组件&#xff1a; Spring 常用模块…

简单的基于信号处理的心电信号ECG特征波分割方法(MATLAB)

正常的心电图中&#xff0c;每个心跳周期内包含三个主要的特征波&#xff1a;&#xff30;波、QRS波和&#xff34;波&#xff0c;如下图所示。心电特征波能够反映心脏的生理状态信息&#xff0c;通过对其形状、幅值和持续时间的分析&#xff0c;可以用来辅助诊断心血管疾病。对…

异相(相位不平衡)状态下的合成器效率分析-理论与ADS仿真

异相&#xff08;相位不平衡&#xff09;状态下的合成器效率分析-理论与ADS仿真 12、ADS使用记录之功分器设计中简单介绍了威尔金森功分器的设计方法。一般来讲&#xff0c;功分器反过来就能作为合路器使用&#xff0c;在输入信号相位一致的情况下&#xff0c;各种合路器的效率…