JMeter从入门到精通

news2024/12/22 19:10:51

1、 jmeter的介绍

jmeter也是一款接口测试工具,由java语言开发的,主要进行性能测试。

2、jmeter安装

jmeter官网下载链接: https://jmeter.apache.org/download_jmeter.cgi ,查看是否安装成功【jmeter -v】

下载 java jdk1.8,进行安装,测试命令:java -version, https://repo.huaweicloud.com/java/jdk/

把jmeter下的bin目录添加到环境变量,然后即可使用

3、界面功能介绍

4、jmeter的十大元件

1、测试计划 , jmeter的起点和容器

2、线程组,代表一定的虚拟用户

3、取样器 , 一般会使用http请求 发送请求的最小单元  

4、 逻辑控制器, if逻辑控制器,用于条件判断

5、 前置处理器, 发送请求前要做的事情 请求之前的操作

6、 后置处理器, 得到响应数据后要做的事情,比如: json提取器,xpath提取器。 请求之后的操作

7、 断言, 判断预期结果和实际结果是否一致

8、 定时器,一般会同步定时器 主要用于做接口性能测试 是否延迟或者定时发送

9、配置元件,一般会使用csv数据参数,用户定义的变量,请求和配置参数

10、监听器,一般会使用察看结果树,聚合报告

测试计划>>>线程组>>>配置元件>>>前置处理器>>>定时器>>>取样器>>>后置处理器>>>断言>>>监听器

5、作用域

组件会作用域他的父及组件,同及组件,以及子组件

只作用于简单控制器1

之作用与简单控制器2

作用于简单控制器1,2

6、进程、线程、线程组

  • 进程:一个正在执行的程序或者软件称为进程,进程是用于提供运行资源的,一个进程默认会有一个线程(主线程)
  • 线程:进程中执行任务的一个单元。线程是属于进程的,是进程中真正干活的。
  • 线程组:把线程进行分组,可以形成不同的团队或者部门。比如:开发组,测试组。

线程组的执行:默认情况下多个线程组是并行执行的,想要设置成顺序执行,需要在测试计划里面勾选独立运行每个线程组

 提示:在线程组内,多个任务是顺序执行的。

7、jmeter的基本使用

1. 启动jmeter

2. 创建了测试计划

3. 选中测试计划右击选择线程组

4. 右击线程组添加http请求

5. 配置http请求的相关信息

6. 添加察看结果树(察看请求结果的)

7. 点击绿色箭头执行

一下是一个简单get请求的设计

案例一:jmete实现数据驱动

步骤一: 创建测试计划

步骤二:创建线程组

步骤三:添加 HTTP Cookie管理器

步骤四:天剑 HTTP请求默认值

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

步骤六: 添加循环控制器-数据驱动

步骤七: 获取统一鉴权码-数据驱动

步骤八: CSV 数据文件设置

案例二:从相应结果中提取变量

步骤一: 1、获取统一鉴权码token

步骤二:添加 正则表达式提取器

步骤三:添加 响应断言

案例三:2、编辑接口(从上述结果中提取变量token实现接口关联)

案例四:从查询接口中获取id,从而实现以上的从添加数据,修改数据,删除数据的闭环操作

步骤一:查询接口

步骤二:” 正则表达式提取器

步骤三 ForEach控制器

步骤四: 固定定时器

步骤五 4、批量删除的设计

结果返回乱码:,解决乱码的一下两种方式

方式一1,直接在请求接口中修改为utf-8,如果还没解决,试着方法二

方式二,在bin文件找那个修改jmeter.properties文件

8、接口关联的方式

1、方式一:正则表达器

2、方式二:jsonpath方式提取

1、代表根节点的目录:$
2、取子节点的目录:.
结合起来复杂一点:$.tag[17].name

9、setup线程组和teardown线程组

setup线程组:在所有线程组中最先执行的,一般可以用于初始化工作,比如: 准备测试数据,登录。

线程组:在setup之后和teardown线程组之前执行的。

teardown线程组:在所有线程组中最后执行的,一般用于扫尾工作,比如: 退出登录,测试数据。

10、http请求默认值

当发送http请求的时候,请求信息会有一些重复,比如:http协议、ip地址、端口号,编码格式等一般都是相同的,则可以把http请求相同的信息添加到http请求默认值里面。位置是在配置元件里面

提示:当配置完http请求默认值以后,在发送http请求的时候,重复的信息就不需要再次填写了,只添加动态变化的数据,比如:请求的路径,请求的方法

11、参数化

11.1、用户参数实现参数化

1. 创建线程组

  2. 右击线程组选择前置处理器添加用户参数

  3. 分别添加用户(数据共几条)和添加变量(参数有几个)

  4. 添加http请求,配置相关的信息,在消息头里面获取用户参数,语法:${变量名}

  5. 添加http信息管理器,配置请求头信息,Content-Type:application/json

  6. 点击线程组,把线程数改成用户数(数据的条数)

11.2、csv文件实现参数化

1、准备csv文件,数据如下:

T803,三国学院,罗贯中,男人的一部戏

T804,红楼梦学院,曹雪芹,女人的一部戏

内容格式

2、创建线程组

3、右击线程组选择配置元件添加csv数据文件设置(CSV Data Set Config)

4、配置CSV Data Set Config相关信息:

1、csv文件的路径

   2、 文件的编码格式

   3.、设置变量名,每一列对应一个变量名,变量名之间使用逗号,比1如:dep_id,dep_name,master_name,slogan

5、添加http请求,添加学院信息,在消息体里面获取变量名对应的数据,比如:

{
"data": [
{
"dep_id":"${dep_id}",
"dep_name":"${dep_name}",
"master_name":"${master_name}",
"slogan":"${slogan}"
}
]
}

6、右击线程组,添加http信息头管理器,设置Content-Type:application/json

7、点击线程组,设置循环次数,这个次数等于文件中的条数(参数数据的条数)

8、执行察看结果树。

11.3、csv文件实现参数化和用户参数实现参数化对比

两者实现思路基本一致

实现流程 用户参数 相对简单

批量设置数据时 csv 相对简单

用户参数 设置的是线程数

csv 设置的是循环次数

用户参数设置的是线程数,使用线程意味着更加消耗资源,效率从微观角度讲不如csv

提示: csv 相对更常用

12、jmeter实现操作数据库的原理

jmeter本身不具备操作数据库的能力,因为jmeter是java语言编写的,所以可以借助第三方模块(JDBC jar 包) 来实现操作数据库。

1、直连数据库

jmeter操作数据库的原因:

1. 对比查询数据库的结果和接口返回的结果是否一致,

2. 可以对数据库进行压力测试。

2、jmeter 实现操作sqlite数据库的步骤

1、点击测试计划,添加sqlite数据库的jar

2、创建线程组

3、右击线程组选择配置元件选择JDBC Connection Configuration

1. 配置连接数据库的名字(Variable Name for created pool)

2. 设置操作数据库的路径(Database URL):

路径格式为:jdbc:sqlite:sqlite数据库路径

3. JDBC Driver class 选择:org.sqlite.JDBC

4、右击线程组添加JDBC request

   1. 配置连接数据库的名字

   2. 如果是查询操作,Query Type设置为:Select Statement

5、执行查看结果树

3、jmeter 实现操作mysql数据库的步骤

1、点击测试计划,添加mysql数据库的jar

2、创建线程组

3、右击线程组选择配置元件选择JDBC Connection Configuration

1. 配置连接数据库的名字(Variable Name for created pool)

2. 设置操作数据库的路径: Database URL

如果操作mysql数据库,路径格式为:

jdbc:mysql://数据库对应的ip地址:数据库的端口号/操作的数据库

例:jdbc:mysql://127.0.0.1:3306/zhujiang

如果window电脑报错:

在database url后面加上【?serverTimezone=UTC】其中UTC是统一标准世界时间即可解决。

    解决中文乱码输入问题,可以在database url后面加上【?characterEncoding=UTF-8?useUnicode=true】。

3. JDBC Driver class选择:com.mysql.jdbc.Driver

4、右击线程组添加JDBC request

   1. 配置连接数据库的名字

   2. 如果是查询操作,Query Type设置为:Select Statement

5、执行查看结果树

4、jmeter 实现增删改的操作

1、点击测试计划,添加sqlite数据库的jar

2、创建线程组

3、右击线程组选择配置元件选择JDBC Connection Configuration

1. Variable Name for created pool(配置连接数据库的名字)

2. 设置操作数据库的路径(Database URL):

操作sqlite数据库,路径格式为:

jdbc:sqlite:sqlite数据库路径

3. JDBC Driver class选择:org.sqlite.JDBC

4、右击线程组添加JDBC request

    Variable Name of Pool declared in JDBC Connection Configuratior(配置连接数据库的名字)

    如果是修改操作,Query Type设置为:update Statement

    update、insert、delete sql语句

5、执行查看结果树

5、数据库查询结果再处理

1、在JDBC request里面设置保存结果的变量

  Variable names设置保存结果的变量名,比如: name

2、在http request 获取name变量保存的数据,比如:获取第一个数据,${name_1}

3、执行查看结果树

6、调试取样器

用来获取用户设置的变量名和变量值

调试取样器的使用步骤

创建线程组,添加jdbc request,设置对应设置变量,比如: name来保存用户查询的数据

  2. 右击线程组选择取样器添加debug sampler (调试取样器)

  3. 执行查看结果树

13、提取器

1、XPath提取器的使用

1、创建http请求,比如:请求京东

2、右击http请求选择后置处理器添加xpath提取器

  1. 勾选use tidy 表示在html文档中提取数据,不勾选表示xml文档中提取数据,

  2. 设置引用的名字,比如: jd_title

  3. 设置xpath路径表达式

  4. 如果想要查看提取的数据,可以添加一个调试取样器

3、创建http请求,在设置参数的时候获取之前xpath提取的内容,比如:${jd_title}

4、执行查看结果树

2、JSON提取器的使用

1、创建http请求,请求学生管理系统中所有学院信息

2、右击http请求选择后置处理器添加JSON提取器

1. names of created variables(设置一个变量名),用于保存提取的json数据

2. JSON Path expressions(json 路径表达式),比如: $.results[0].dep_name

$:表示整个json数据对象

3. 还可以设置默认值[可选]

4. 如果想要查看提取的数据,可以添加一个调试取样器

3、创建http请求,在设置参数的时候获取之前json提取的内容,比如:${dep_name}

4、执行查看结果树

14、断言

使用程序或者工具来判断预期结果和实际结果是否一致。

jmeter断言的分类

响应断言

大小断言

持续时间断言

响应断言

1、判断响应的内容是否和预期结果一致,比如: 状态码,响应内容(响应体)

2、响应断言的操作步骤

3、创建http请求

4、右击http请求,选择断言,添加响应断言

设置响应代码

设置响应文本

等于

包含

… …

5、执行查看结果树

说明:

响应文本:响应体

响应代码:状态码

响应信息:英文的状态描述,比如: 404 Not Found,200 OK

大小断言

判断响应内容的大小和预期结果是否一致

大小断言的步骤

1、创建http请求

2、右击http请求,选择断言,添加大小断言

选择完整响应

选择响应头

选择响应消息体

选择响应代码

选择响应信息

选择符号

设置大小

3、执行查看结果树

持续时间断言

判断接口响应时间是否在指定的时间内进行响应,否则断言失败

1、创建http请求

2、右击http请求,选择断言,添加持续时间断言

限定响应的时间,单位毫秒

3、执行查看结果树

14、聚合报告

用于查看接口的性能指标的。

添加聚合报告的步骤:在监听器里面添加聚合报告

1、聚合报告参数说明:

1. 样本: 每个请求发送次数

  2. 平均值: 请求的平均响应时间

  3. 中位数: 50%的请求响应时间小于该值

  4. 90%百分位: 90%的请求响应时间小于该值

  5. 95%百分位: 95%的请求响应时间小于该值

  6. 99%百分位: 99%的请求响应时间小于该值

  7. 最小值: 请求的最小响应时间

  8. 最大值: 请求的最大响应时间

  9. 异常: 请求的错误率

  10. 吞吐量: 每秒处理完成的请求数,一般认为它为TPS:每秒处理的请求数 ***

  11. 接收KB/sec: 每秒从服务器端接收到的数据量

  12. 发送KB/sec: 每秒向服务器发送数据量

2、ramp-up

启动所有线程数需要的时间

提示: 通过设置ramp-up的值进行对比,可以得知ramp-up值越大,异常率越小。

3、ramp-up总结:

ramp-up时间越短,错误率越高。

线程数:表示就是用户数。

如果ramp-up时间为10,本质上是将10秒平均分成1000份,即 10/1000 = 0.01秒执行一次请求。

同理,如果设置为0,则相当于1000个人同时请求 。

通过聚合报告来查看接口的性能。

4、同步定时器(集合点)

模拟多用户的并发请求,保证同一时刻有指定的并发量。

在定时器里面选择同步定时器(Synchronizing Timer)

参数说明:

1、模拟用户组的数量:表示同一时刻有多少并发用户

2、超时时间: 不够指定用户数量,超过时间后也会做并发请求

5、__setProperty 和 __property函数的使用

主要是实现跨线程组传参的。

这两个函数关联需要通过后置处理器的BeanShell PostProcessor来完成

##6、 逻辑控制器

  1. if控制器: 根据条件真假判断是否执行取样器(http请求)

  2. ForEach控制器: 根据用户定义的变量来循环执行取样器(http请求)

  3. 循环控制器: 根据用户设置循环次数,循环执行控制器里面取样器(http请求)

7、常数吞吐量定时器

常数吞吐量定时器有的地方也称常量吞吐量定时器,主要用于保证访问次数,一般用于压力测试。

主要针对于模拟单个用户发送多次请求

    同步定时器:是针对于模拟多用户发送多次请求

8、生成html报告

无日志文件生成

基本命令格式:

jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>

jmeter -n -t /Users/apple/Desktop/计划/test.jmx -l testlog.jtl -e -o ./output/report

参数详解:

-n:以非GUI形式运行Jmeter

-t:source.jmx 脚本路径

-l:运行结果保存路径(.jtl),此文件必须不存在

-e:在脚本运行结束后生成html报告

-o:保存html报告的地址, 此文件必须不存在

9、使用已有的jtl日志文件生成

基本命令格式:

jmeter -g <log file> -o <Path to output folder>

示例:

jmeter -g /Users/apple/Desktop/计划/testlog.jtl -o ./output_report

参数详解:

-g: 表示指定测试结果文件

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

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

相关文章

StartRocks 连接 Paimon外部表

版本 StartRocksPaimon3.2.00.5 sr 环境准备 CREATE external CATALOG paimon_hdfs PROPERTIES ("type" "paimon",paimon.catalog.type filesystem,"paimon.catalog.warehouse" "hdfs://hadoop03:9000/paimon/test" );mysql> …

虚幻学习笔记4—文本内容处理

一、前言 本文使用的虚幻引擎5.3.2&#xff0c;在虚幻中已经集成了很多可以直接处理多样化文本的蓝图&#xff0c;比如格式化动态显示、浮点数多样化等。 二、实现 2.1、格式化文本显示动态内容&#xff1a;在设置某个文本时可以使用“Format Text”蓝图设置自定义可以的显示…

使用C#和HtmlAgilityPack打造强大的Snapchat视频爬虫

概述 Snapchat作为一款备受欢迎的社交媒体应用&#xff0c;允许用户分享照片和视频。然而&#xff0c;由于其特有的内容自动消失特性&#xff0c;爬虫开发面临一些挑战。本文将详细介绍如何巧妙运用C#和HtmlAgilityPack库&#xff0c;构建一个高效的Snapchat视频爬虫。该爬虫能…

JOSEF约瑟 大功率抗干扰继电器\NR0521\220VDC 导轨安装

NR系列大功率继电器 系列型号&#xff1a; NR0521B大功率继电器 NR0521A大功率继电器 NR0521型大功率继电器 用途 大功率继电器NR0521220VDC 导轨安装在电力工程实际应用中&#xff0c;为防止母线电压经过PT二次侧反馈至高压侧&#xff0c;需要在PT二次侧串接PT刀闸重动接…

SAP SD 创建交货单 报错 VL461 VL248

因为生产环境已经被改好了&#xff0c;无法跟踪 所以换到测试环境重现一把&#xff0c;如何追根究底 对比正常订单发现 计划行 VBEP-LMENG,VBEP-BMENG这两个字段上的值跟 订单数量不一致。 尝试修改2者的数据跟订单数据一致&#xff0c;则可以正常创建交货单 实际原因是&a…

app广告变现如何提高变现收益?提高广告点击率

在广告变现实践过程中&#xff0c;我们往往会遇到一些问题&#xff0c;比如广告的填充不够、eCPM太低&#xff0c;该展示的广告没有展示出来&#xff0c;又或者广告位选择不合理导致用户负面反馈变多&#xff0c;这些种种问题都会影响我们的广告变现效率。 广告三大要素&#…

16.9%份额,启明星辰集团连续21年IDS/IPS排名第一

近日&#xff0c;赛迪顾问发布《2022-2023年中国网络信息安全市场研究年度报告》。报告显示&#xff1a;2022年&#xff0c;启明星辰集团IDS/IPS以16.9%的份额占据市场第一。至今&#xff0c;启明星辰集团IDS/IPS已连续21年保持市场占有率第一。 多年来&#xff0c;启明星辰集团…

postman打开白屏

现状&#xff1a;postman打开白屏如下图 window环境变量&#xff1a; Win R 快捷键打开 sysdm.cpl 增加环境变量&#xff1a; 变量名&#xff1a;POSTMAN_DISABLE_GPU 值&#xff1a;true 重新打开postman

Aurora8B10B(一) 从IP配置界面学习Aurora

一. 简介 哈喽&#xff0c;大家好&#xff0c;好久没有给大家写FPGA技术的文章&#xff0c;是不是已经忘记我是做FPGA的啦&#xff0c;O(∩_∩)O哈哈~。 这里将会给大家分享我学习到的第一个高速接口Aurora8B10B&#xff0c;有点复杂&#xff0c;但不是特别复杂&#xff0c;对…

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…

软件开发:基础源代码分享与入门指南

一、引言 软件开发是当今信息时代的一个热门领域&#xff0c;广泛应用于各个行业和领域&#xff0c;本文将向大家介绍软件开发的基础知识&#xff0c;并通过分享一些基础源代码&#xff0c;帮助大家更好地入门软件开发。 二、软件开发概述 软件开发是指通过编程语言和开发工…

容器有挂载目录的时候,容器反向生成为镜像,挂载的内容不会保留。只有实打实拷贝进容器的反向生成镜像才会保留。

无容器目录挂载 1、也就是说宿主机未与容器进行路径映射&#xff0c;故我们可以直接使用指令: docker commit 容器名称/容器ID 像名:标签号&#xff0c;把容器保存为镜像; (其中镜像名和标签号是我们随机取的&#xff0c;新镜像名以及我们的标签号!) 2、我们在不能判断容器与宿…

spring RedisTemplate RedisLockRegistry opsForXxx 基本使用总结以及介绍

一、基本介绍 RedisTemplate 为 spring 对 redis 操作的高度封装&#xff0c;基本已经满足所有使用场景。 若存在其他拓展使用我们可以自行封装工具类对基本操作进行组装。 RedisLockRegistry 对 redis 锁的一些封装 二、不同环境下依赖以及基本配置 2.1 spring-boot 下依赖…

【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Java多线程-第20章

Java多线程-第20章 1.创建线程 Java是一种支持多线程编程的编程语言。多线程是指在同一程序中同时执行多个独立任务的能力。在Java中&#xff0c;线程是一种轻量级的子进程&#xff0c;它是程序中的最小执行单元。Java的多线程编程可以通过两种方式实现&#xff1a;继承Threa…

【李肯C语言小册.目录】小册价值、内容目录汇总、加群方法 | 必看收藏.

小册订阅戳这里&#xff1a;【C语言小册 必读】为什么有这份专栏&#xff1f;解决什么问题&#xff1f;有哪些价值&#xff1f;是否值得订阅&#xff1f;-CSDN社区 订阅后&#xff0c;记得加微VX找我&#xff0c;发zhi付截图&#xff0c;备注【C语言小册】&#xff0c;拉你进本…

关于 SLO,我们需要了解什么?

什么是 SLO&#xff1f; SLO&#xff08;Service Level Objective&#xff09;是服务质量目标的短语缩写。它通常指的是维护系统的最高级别的目标&#xff0c;或服务等级协议&#xff08;SLA&#xff09;中的服务质量目标。它能够定义客户和用户在使用软件系统时所期望的服务质…

在直播间抢到好多实惠东东,全靠抖音支付

前不久我特别喜欢的一位主播的直播间做活动,很多我放在购物车里好久的心仪好物都有秒杀惊喜价。更让我开心的是,在拼手速抢这些秒杀好物的时候,我都成功了!这主要是因为我用了抖音支付,付款环节特别丝滑顺畅,让我在抖音的购物体验直接原地提升了几个level! 可能有朋友现在还是…

使用Docker安装Jenkins,解决插件安装失败,版本太低等问题

如果已经遇到插件安装部分失败&#xff0c;Jenkins版本太低&#xff0c;又要换什么清华镜像地址&#xff0c;不要犹豫&#xff0c;直接以下步骤卸载重装就好了 开始安装 yum 更新到最新 yum update到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具…

9款高效绘图神器,提升你的工作效率

在日常工作或生活中&#xff0c;我们必须绘制各种图表、流程图、思维导图等图形&#xff0c;或者想用画笔描述自己的想法。然而&#xff0c;我们在许多绘图软件面前感到困惑。我们不知道哪个绘图软件好&#xff0c;也没有足够的时间一一尝试 在接下来的空间里&#xff0c;我们…