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 请求信息,不再需要重复填写

路径:右击线程组,选择 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 参数化

目的:

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

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.断言结果查看

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

三、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 = "断言失败,与结果和实际结果不符";}

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

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

相关文章

模仿高效网络进行目标检测——知识蒸馏

摘要 链接:https://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 当前的基于卷积神经网络(CNN)的目标检测器需要从预训练的ImageNet分类模型中初始化,这通常非常耗时。在本…

Java整合ELK实现日志收集 之 Elasticsearch、Logstash、Kibana

简介 Logstash:用于收集并处理日志,将日志信息存储到Elasticsearch里面 Elasticsearch:用于存储收集到的日志信息 Kibana:通过Web端的可视化界面来查看日志(数据可视化) Logstash 是免费且开放的服务器端数…

AI办公自动化:用kimi批量将word文档部分文件名保存到Excel中

文件夹中有很多个word文档,现在只要英文部分的文件名,保存到一个Excel文件中。 可以在kimi中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 打开文件夹:…

数据集002:眼疾识别数据集 (含数据集下载链接)

说明 病理性近视(Pathologic Myopia,PM)的医疗类数据集,包含1200个受试者的眼底视网膜图片,训练、验证和测试数据集各400张。 说明: 如今近视已经成为困扰人们健康的一项全球性负担,在近视人…

斯坦福2024人工智能指数报告 1

《人工智能指数报告》由斯坦福大学、AI指数指导委员会及业内众多大佬Raymond Perrault、Erik Brynjolfsson 、James Manyika、Jack Clark等人员和组织合著,旨在追踪、整理、提炼并可视化与人工智能(AI)相关各类数据,该报告已被大多…

RedHat9 | DNS剖析-建立子域并进行区域委派

一、实验环境 1、委派DNS服务器 域名空间由多个域构成,DNS提供了将域名空间划分为1个或多个区域的方法,这样使得管理更加方便。在域的规模增大后,可以为域添加附加域,上级域为父域,下级域为子域,下列案例…

韩顺平0基础学Java——第11天

p234-249 又一个月了,时间过得好快啊,希望支棱起来 可变参数 public int sum(int ... nums){ } 这个nums是数组 细节: 1可变参数可以为0个,或任意个 2可变参数的实参可以为数组 3可变参数的本质就是数组 4可变参数可以和普通…

Golang | Leetcode Golang题解之第113题路径总和II

题目: 题解: type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…

冯喜运:5.27黄金暴跌大阴后出现“暂定符”今日黄金原油操作策略

【黄金消息面分析】:金价虽然有大阴线暴跌,但依然属于超买后的调整而非熊市,对中长线投资者来说只是市场洗牌。因此,在出现企稳迹象之后,随时关注反弹时机的启动。未来几日,黄金空头可能在进一步发力之前需…

【数据结构与算法 经典例题】相交链表

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:数据结构与算法刷题系列(C语言) 期待您的关注 目录 一、问题描述 二、解题思路 方法一:双循环对比法 方…

LangChain llamaindex

LangChain 参考: 全流程 | Windows 系统本地部署开源模型阿里通义千问 QWEN 1.5,结合 LangChain-Chatchat 框架和向量数据库 FAISS、Milvus - 知乎

redis数据操作相关命令

1.list操作 1.1 rpush rpush:新的元素添加到list最右边 #从右边依次往List添加1,2,3 RPUSH name 1 RPUSH name 2 RPUSH name 3#查看列表:返回 1,2,3 LRANGE name 0 -1结果如下: 1.2 lpush lpush:新加的元素在list最左边 #从…

ElasticSearch学习篇12_《检索技术核心20讲》基础篇

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243 课程分为基础篇、进阶篇、系统案例篇 主要记录企业课程学习过程课程大纲关键点,以文档形式记录笔记。 内容 检索技术:它是更底层的通用技术&#xff0c…

GVM: Golang多版本管理利器

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

Django框架css文件能正常加载,但是css样式不生效

最近运行一个Django项目,能正常启动运行,css文件也能够正常加载,但是css样式却没有正常渲染。 解决办法: 1、打开注册表:winR 2、找到:计算机\HKEY_CLASSES_ROOT\.css 修改:Content Type 值&…

llamaindex rag agent 检索文档进行分析

两个 pdf 分别是两个电商公司的财报之类的,像分析这两家公司的盈利情况,利用 llamaindex 的 rag 检索盈利的部分,来对比 使用 tongyi,如果指定,默认是 openai 了 # 加载电商财报数据 from llama_index.core import S…

C++ | Leetcode C++题解之第113题路径总和II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> ret;unordered_map<TreeNode*, TreeNode*> parent;void getPath(TreeNode* node) {vector<int> tmp;while (node ! nullptr) {tmp.emplace_back(node->val);node …

mysql中单表查询方法

大家好。我们知道&#xff0c;mysql有一个查询优化器的模块。当我们用sql语句查询表中记录时&#xff0c;会对这条查询语句进行语法解析&#xff0c;然后就会交给查询优化器来进行优化&#xff0c;优化后生成一个执行计划&#xff0c;这个执行计划表明了应该使用哪些索引进行查…

Android 10.0 锁屏页面弹窗功能实现

1.前言 在10.0的系统rom产品定制化开发中,在定制化开发中,需要在锁屏页面弹窗功能,当收到某些信息的时候,需要添加 悬浮窗锁屏页面也同样需要弹窗功能,接下来就分析下相关功能,然后实现功能 2.锁屏页面弹窗功能实现的核心类 frameworks\base\core\java\android\view\Wi…

用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)

为了测试 Adam、RMSProp 和 Adagrad 算法的性能&#xff0c;你可以使用四个凸函数进行实验。以下是一些常用的凸函数示例&#xff1a; Rosenbrock 函数&#xff1a; Booth 函数&#xff1a; Himmelblau 函数&#xff1a; Beale 函数&#xff1a; 你可以选择其中一个或多…