【性能测试】---测试工具篇(jmeter)

目录

1、安装并启动jemeter

2、重点组件

2.1、线程组:

2.2、HTTP取样器​编辑

2.3、查看结果树

2.4、HTTP请求默认值

2.5、HTTP信息头管理器

2.6、JSON提取器

2.7、JSON断言

2.8、同步定时器

2.9、CSV数据文件设置

2.10、HTTP Cookie管理器

3、测试报告

4、性能分析

通过三大指标来分析性能问题:4.1、响应时间

4.2、错误率(可靠率)

4.3、吞吐量


1、安装并启动jemeter

法一:

法二:将文件路径复制一下,配置环境变量,打开cmd,输入jmeter就可以打开

2、重点组件

2.1、线程组:

添加一个线程组去管理所有的线程。

开发者工具:network表示监视网络

点击XHR筛选出一些后端的接口

线程数:虚拟用户数/并发数

Ramp-Up:性能测试运行的时间,上面的线程数运行完的时间。

循环次数:如果线程数为10,循环次数为2,那么总共就发送了20次请求

如果选择了永远,就必须要配置调度器,否则性能测试就是一个死循环。

如果配置了调度器,配置了持续时间,就会在2s内不断发送请求

2.2、HTTP取样器

我们就可以在聚合报告中查看在两秒内一个发送了多少次请求

2.3、查看结果树

出现错误时:

我们应该重点关注Load time响应时间和Response code状态码

2.4、HTTP请求默认值

如果是在同一个web系统那么他的每个界面的协议、ip、端口号、内容编码(utf-8)都是一样的,因此我们就可以设置HTTP请求默认值,这样就不用每次都填写了。

2.5、HTTP信息头管理器

列表页要添加请求信息,否则就会报错

添加HTTP管理头,只作用在列表页

这样运行结果正确

下图是开发者工具中列表页的User_token_header  需要添加这个名称和值 到HTTP信息头管理器才可以请求成功

因为我们是给了一个固定的值,它会过期,所以我们就必须要使用JSON提取器来解决问题

2.6、JSON提取器

接口响应成功,通过提取返回值对应字段,可用于其他接口的参数配置

我们可以用登录页的data值来配置别表页

可以对表达式进行测试,看写的对不对:在查看结果树中,将响应数据的格式改为JSON Path Tester,在JSON Path Expression中输入表达式,可以测试提取表达式是否正确

补充知识:如何对JSON进行提取

[
{
"postTime": "2024-04-18 05:20:16",
"title": "ddddd",
"blogId": 13,
"userId": 3,
"content": "# 在这⾥写下⼀篇博客\r\ndddd"
},
 {
"postTime": "2022-10-22 02:38:21",
"title": "同学,请问你今天学习了吗",
"blogId": 12,
"userId": 3,
"content": "今天是2022102217:42分,为了能够早⽇将最新版本的测试课件呈现
给同学们,我已经开始奋..."
}
]
获取相应中的所有blogId元素:$..blogId
获取第⼀个blogId元素:$.[0]blogId

测试提取正确之后,就将值写到JSON提取器中。

书写格式:${变量名}

那为什么要添加这个呢???

HTTP协议本身是无状态的,服务器需要通过会话标识来识别用户身份。

用户登录之后,服务器返回一个认证凭证,后续请求必须携带该凭证(如访问列表页),否则服务器会返回401/403未授权

  • 浏览器在登录后会自动管理Cookie/Token,并在后续请求中自动附加这些信息。

  • JMeter需要手动实现这一过程,否则列表页请求会被视为“未登录用户”的请求。

  1. JMeter如何实现?

  • 通过 提取器(正则/JSON) + HTTP信息头管理器 或 Cookie管理器 动态传递凭证。

若多个接口中都有符合条件JSON字段,则会发生覆盖

要将提取用户凭证(JSON提取器)放在登录的下面,然后只要一个HTTP信息头管理器

token只取登录接口返回值里的data字段。然后直接保存在HTTP信息头管理器

不能只看通过了、和响应时间、还有状态码没问题就代表没有问题,还要查看响应体,要返回博客的标题和博客的内容

当有两百个详情页接口,每个接口都要用到写死的id值,而这个id值后续可能需要修改----最好的方式就是用批量修改的方式

补充:

为什么postman可以请求成功,但是放到jmeter之后就请求失败了?

我们可以将把开发者工具上的数据和jmeter的数据进行对比进行对比。在postman上验证一下是不是这个问题,但是修改的时候要注意作用域问题。

2.7、JSON断言

举例:

1、检查字段是否存在

1)JOSN Path exists:这个值是点击查看结果树,将格式选为JSON Path Tester 然后在输入框中输入JSON提取的书写格式,对JSON进行提取

2)不选中同时验证字段值

3)不选中选使用正则匹配

4)不输入预期值

如果 userId 存在,断言通过;否则失败

2、验证字段值

1)JOSN Path exists:这个值是点击查看结果树,将格式选为JSON Path Tester 然后在输入框中输入JSON提取的书写格式,对JSON进行提取:$.code

2)选中同时验证字段值

3)不选中使用正则匹配

4)输入预期值:200

如果 code 等于 200,断言通过;否则失败。

3、使用正则表达式匹配

1)JOSN Path exists:这个值是点击查看结果树,将格式选为JSON Path Tester 然后在输入框中输入JSON提取的书写格式,对JSON进行提取:$.email

2)选中同时验证字段值

3)选中使用正则匹配

4)输入预期值:.+@.+\\..+ (匹配邮箱格式)

如果 email 符合正则表达式,断言通过。

前后JSON的关系

         通过变量提取+断言机制

2.8、同步定时器

我们要实现线程并发执行就必须添加同步定时器

如果没有打开循环,那么最好配置和开始设定的线程数相同的数字,大于就会一直等,小于就小于就会导致后面的线程数量达不到就不运行。打开循环之后是可以的。

添加了同步定时器之后,线程是在都准备好之后才开始的,就可以做到并发

2.9、CSV数据文件设置

为了模拟更真实的登录环境,我们需要提供更多的用户和密码来实现登录操作

在当前文件的相同文件夹里面添加一个execl表格,里面写用户名和密码。遇到文件结束符再次循环选True,就会循环的去模拟登录。

2.10、HTTP Cookie管理器

HTTP Cookie管理器像Web浏览器⼀样存储和发送Cookie。如果HTTP请求并且响应包含cookie,则 Cookie管理器会⾃动存储该cookie,并将其⽤于将来对该特定⽹站的所有请求。每个JMeter线程都有 ⾃⼰的"cookie存储区"。因此,正在测试使⽤cookie存储会话信息的⽹站,则每个JMeter线程都将拥 有⾃⼰的会话。此类Cookie不会显⽰在Cookie管理器显⽰屏上,可以使⽤"查看结果树监听器"查看。
缓存配置可选择standard(标准)或compatibility(兼容的),当然也可以⼿⼯添加⼀些cookie.

每次启动5个线程,隔3s就启动五个线程,这5个线程在1s内启动完成

让线程持续运行60s,最后每隔1s结束5个线程。

补充:查看结果树一般在调试阶段会用到,在运行的时候的一般不用

3、测试报告

当性能测试完毕之后,我们要出具测试报告

打开cmd

可以先进入存放当前测试文件的同级目录

输入命令 jmeter -n -t 测试的文件(第一个测试案例.jmx) -l first.jtl -e -o ./first/.(先创建一个文件夹)

4、性能分析

通过三大指标来分析性能问题:
4.1、响应时间

如果响应时间超过了要求,代表系统到了瓶颈
注意事项:分析在多少线程的情况下发⽣了超标
响应时间的影响因素:
1、系统不稳定,有时快又是慢
2、随着并发压力变大而慢慢变慢,响应时间变高

4.2、错误率(可靠率)

错误率高的原因:

1、接⼝请求错误
2、服务器⽆法继续处理,达到了瓶颈(代码写的不好,内存泄漏、硬件资源等
3、后端系统限流(系统⾥配置了不能超过多少并发)

4.3、吞吐量

吞吐量越大,性能越好;吞吐量相对稳定或者变低,可能系统达到了性能瓶颈

吞吐量变化规律:

波动很大:代表系统不稳定

慢慢变高再趋于稳定:和并发量强相关。如果并发量小于吞吐量,慢慢增大并发量,吞吐量也会随之增加

慢慢变低,并发量也减少了:说明性能测试要结束了,并发减少;也可能是系统变得卡顿,从而导致响应时间变慢,导致单个线程发起的并发量变少。

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

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

相关文章

机器学习(12):拉索回归Lasso

- 拉索回归可以将一些权重压缩到零,从而实现特征选择。这意味着模型最终可能只包含一部分特征。 - 适用于特征数量远大于样本数量的情况,或者当特征间存在相关性时,可以从中选择最相关的特征。 - 拉索回归产生的模型可能更简单,因…

Redis持久化存储

Redis持久化存储详解 一、核心持久化机制 Redis提供两种主要持久化方式:RDB(快照) 和 AOF(追加文件),以及两者的混合模式。 RDB(Redis Database)快照持久化 工作原理 RDB通过创建数据…

python学智能算法(三十四)|SVM-KKT条件回顾

【1】引言 前序学习进程中,对软边界拉格朗日方程进行了初步构建。 其中约定了两个拉格朗日乘子要非负,其本质是要满足KKT条件。 今天就乘此次机会,在回顾一下KKT条件。 【2】定义 当问题无约束的时候,只要让函数梯度为零&#…

【网络基础】计算机网络发展背景及传输数据过程介绍

本文旨在帮助初学者建立起计算机网络的基础认知,从网络的发展背景到网络协议的分层模型,再到IP与MAC地址的基本概念,全面覆盖第一阶段学习重点。 📌 本节重点 了解计算机网络的发展背景,掌握局域网(LAN&am…

阿里云-通义灵码:解锁云原生智能开发新能力,让云开发更“灵”~

免责声明:此篇文章所有内容皆是本人实验,并非广告推广,并非抄袭,如有侵权,请联系笔者。 每日一句 信念其实就是相信未来, 相信内在, 以及坦然美好的心境。 目录 每日一句 一. 引言 二.通义…

lesson33:Python协程详解:从原理到实战的异步编程指南

目录 一、协程核心概念:轻量级并发的本质 1.1 什么是协程? 1.2 协程与线程/进程的对比 二、协程工作原理:事件循环与协作式调度 2.1 事件循环(Event Loop):协程的"调度中心" 2.2 协作式调度…

深入理解C++模板进阶:非类型参数、特化与分离编译

前言C模板是泛型编程的核心,它允许我们编写与类型无关的代码。在掌握了模板的基础知识后,我们需要进一步了解模板的高级特性,以便更灵活地使用它们。本文将深入探讨三个重要的模板进阶主题:非类型模板参数、模板特化以及模板的分离…

使用winsw把SpringBoot项目注册成window服务

目录 一、使用winsw注册 1.1、项目打jar包 1.2、下载winsw 1.3、把 WinSW.NET4.exe 重新命名 1.4、编写m配置文件用于配置注册信息 1.5、创建文件夹存放你的文件 1.6、安装服务 1.7、启动服务 1.8、卸载服务 1.8、停止服务 一、使用winsw注册 1.1、项目打jar包 例如项目jar包名…

进阶向:Python开发简易QQ聊天机器人

数字化时代的聊天机器人应用在当今数字化时代,聊天机器人已经成为日常生活和商业活动中不可或缺的一部分。根据市场研究数据显示,全球聊天机器人市场规模预计将在2026年达到102亿美元,年复合增长率达到34.75%。这些智能助手正广泛应用于以下场…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的用户留存策略研究

摘要:在数字化商业竞争白热化的当下,用户留存成为企业可持续发展的核心命题。本文聚焦开源链动21模式AI智能名片S2B2C商城小程序这一创新技术组合,通过分析其技术架构、模式创新与生态闭环的协同效应,揭示其在降低用户决策成本、提…

单词的划分(动态规划)

题目描述有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。你就是来完成这一划分工作的。输入第一行,一…

C语言学习笔记——文件

目录1 文件的概念2 程序文件和数据文件3 二进制文件和文本文件4 流4.1 流的概念4.2 标准流5 文件信息区和文件指针6 处理文件的库函数6.1 fopen6.2 fclose6.3 fgetc6.4 fputc6.5 fgets6.6 fputs6.7 fscanf6.8 fprintf6.9 fread6.10 fwrite6.11 fseek6.12 ftell6.13 rewind6.14 …

C++语法与面向对象特性(2)

一.inline函数1.inline的基本特性被inline修饰的函数被称为内联函数。inline函数设计的初衷是为了优化宏的功能,编译器会在编译阶段对inline函数进行展开。然而需要注意的是,inline对于编译器而言是一种建议,它通常会展开一些简短的&#xff…

Linux中grep命令

Linux 中的 grep 用法详解grep 是 Linux 中强大的文本搜索工具,用于在文件或输入流中查找匹配指定模式的行。其基本语法为:grep [选项] "模式" [文件]核心功能基础搜索在文件中查找包含特定字符串的行:grep "error" log.…

【遥感图像入门】遥感中的“景”是什么意思?

在遥感成像中,“3景城市影像”和“5景城市影像”中的“景”是遥感数据的基本单位,通常指一次成像过程中获取的独立遥感影像块。这一概念的具体含义需结合技术背景和应用场景理解: 一、“景”的技术定义 单次成像的独立覆盖区域 遥感平台(如卫星、飞机)在特定时间和位置对…

Pytorch-07 如何快速把已经有的视觉模型权重扒拉过来为己所用

下载,保存,加载,使用模型权重 在这一节里面我们会过一遍对模型权重的常用操作,比如: 如何下载常用模型的预训练权重如何下载常用模型的无训练权重(只下载网络结构)如何加载模型权重如何保存权…

C语言零基础第9讲:指针基础

目录 1.内存和地址 2.指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量 2.3 解引用操作符(*) 2.4 指针变量的大小 3.指针变量类型的意义 3.1 指针的解引用 3.2 指针 - 整数 3.3 void*指针 4.指针运算 4.1 指针…

013 HTTP篇

3.1 HTTP常见面试题 1、HTTP基本概念: 超文本传输协议:在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」HTTP常见的状态码 [[Pasted image 20250705140705.png]]HTTP常见字段 Host 字段:客户…

每日面试题20:spring和spring boot的区别

我曾经写过一道面试题,题目是为什么springboot项目可以直接打包给别人运行?其实这涉及到的就是springboot的特点。今天来简单了解一下springboot和spring的区别, Spring 与 Spring Boot:从“全能框架”到“开箱即用”的进化之路 …

ClickHouse数据迁移

ClickHouse实例是阿里云上的云实例,想同步数据到本地,本地部署有ClickHouse实例,下面为单库单表 源实例:阿里云cc-gs5xxxxxxx.public.clickhouse.ads.aliyuncs.com:8123 目标实例:本地172.16.22.10:8123 1、目标实例建…