JMeter基础篇

目录

总目录:

一、JMeter简介:

-用途:

-优缺点:

二、JMeter安装:

三、项目简介:

-学生管理系统:

-API接口清单:

查询:

新增:

更新:

删除:删除单个,删除多个。

四、JMeter基本使用:

-示例:

-JMeter线程组相关:

-JMeter并发执行和顺序执行:

-JMeter两个特殊线程组:

-JMeter线程组常用属性:

-http请求默认值:

-信息头管理器:

五、参数化:

1.参数化--用户定义的变量:

2.参数化--CSV数据文件设置(用得更广):

3.参数化--用户参数(不常用):

4.参数化--函数:

六、直连数据库:

步骤:

七、断言:

1.响应断言:

举例:

模式匹配规则:

测试字段:

-响应代码报错示例:

2.大小断言:

-示例:

3.断言持续时间:

下章导航:


总目录:

一、JMeter简介:

-用途:

JMeter是Apache组织使用Java开发的一款测试工具:

1.可以使用对服务器、网络或对象模拟巨大的负载。

2.通过创建带有断言的脚本来验证程序是否能返回期望的结果。

-优缺点:

优点:

1.开源、免费 2.跨平台 3.支持多协议 4.小巧 5.功能强大

缺点:

1.不支持IP欺骗

2.使用JMeter无法验证JS程序,也无法验证页面UI,所以要和Selenium配合来完成Web2.0应用的测试。

二、JMeter安装:

1).JMeter是使用Java编写的,必须安装Java环境:

1.JDK:Java SE Development Kit(java开发工具包,为Java程序开发提供环境支持)

2.JRE:Java Runtime Environment(java运行环境,为Java程序运行提供环境支持)

2).下载并安装JMeter

下载:Apache JMeter - Download Apache JMeter

安装:直接解压缩即可

三、项目简介:

-学生管理系统:

学生管理系统:对学生信息进行增删改查,对应的RESTful语法风格如下。

查:URL+GET (查所有,查指定,根据某些参数进行查找,模糊查询) 状态码确定就是200

增:URL+POST ()状态码201或200

改:URL+PUT 状态码201或200

删:URL+DELETE 状态码确定为204

-API接口清单:

附件内容是相关接口清单,请根据清单描述,测试各个接口实现。

PS:该系统是严格遵循RESTful架构风格的实现,通过练习以强化对RESTful架构风格的理解与认识。

查询:

新增:

更新:

删除:删除单个,删除多个。

四、JMeter基本使用:

设置接口三要素查询所有学院信息:

1.测试计划--右键--线程--添加线程组

2.线程组--右键--取样器--http请求

3.测试计划--右键--添加监听器--查看结果树

4.点击运行,查看结果

测试要遵循接口的文档进行一步步测试。

-示例:

目的:查询所有。

http://127.0.0.1:8000/api/departments/

查看结果:【查看结果树】

-JMeter线程组相关:

进程:正在运行的程序

线程:是进程中的执行线索

线程组:进程中有许多线程,为了方便管理,可以对线程按照性质分组,分组的结果就是线程组

PS:三者关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程。

-JMeter并发执行和顺序执行:

并发执行:多个线程同时执行

顺序执行:多个线程顺序执行

-JMeter两个特殊线程组:

setUp线程组:最优先执行的线程组

tearDown线程组:最后执行的线程组

-JMeter线程组常用属性:

线程组的配置:

线程数:组内线程个数

Ramp-Up时间(秒):程序准备时间

循环次数:每个线程要执行的次数

调度器:调度器配置包括持续时间和启动延迟。

-http请求默认值:

http请求默认值:被复用的内容的封装。

若多个线程的http请求所需信息一致,可通过HTTP请求默认值来设置,就不需要对单个的http请求进行设置重复信息了,只需对该http请求设置独特的信息。

-信息头管理器:

新增修改实现时提交的数据是JSON格式的,需声明提交的数据的内容类型;

五、参数化:

定义:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提高脚本的编写效率及编写质量

以下四种方式实现参数化:

1.用户定义的变量

2.CSV数据文件设置

3.用户参数

4.函数

1.参数化--用户定义的变量:

调用格式:${变量名}

通俗点说:用一个名称来代替一小段数据。即下图中红色字体的部分。

只能代表一小段内容,不适合大量数据的参数化。

2.参数化--CSV数据文件设置(用得更广):

CSV : 逗号分隔值,是一种简洁且常见的数据存储格式,存储语法如下图所示:

对于批量数据的参数化。

实现步骤:

1.使用CSV文件存储测试数据

2.编写被复用的学院新增脚本模板

注意2:编码集使用UTF-8无BOM格式

3.关联脚本与数据(将文件数据导入脚本)

操作步骤:

1.先准备好数据,并将其csv.txt格式,具体数据的保存是:每行里的数据用","英文下的逗号隔开。不同行数据用“回车”隔开。数据保存为“UTF-8”格式。

2.测试计划-右键“添加”-配置原件-CSV数据文件设置:

文件名:数据的存储路径

文件编码:utf-8

变量名称(西文逗号间隔):将各列的名称列举出来,不同名称用英文逗号间隔。

忽略首行(只在设置了变量名称后才生效):False

分隔符(用'\t'代替制表符):,

是否允许带引号?:False

遇到文件结束符再次循环?:False

遇到文件结束符停止线程?:True

线程共享模式:所有现场

3.配置线程组的参数:

循环次数:永远

对于这里面线程组的配置:

循环次数:选择【永远】,除非知道具体的数据条数,可不选【永远】直接在后面写上具体条数。

3.参数化--用户参数(不常用):

也是处理批量数据。但csv数据文件设置需要额外添加txt文件数据。而用户参数无需额外添加文件数据。

实现步骤:

1.编写被复用的学院新增脚本模板

2.使用用户参数存储测试数据

3.将数据导入脚本模板

4.设置执行次数

具体操作步骤:

1.HTTP请求-用户参数:点击添加变量多一行数据;点击添加用户多一列数据。

2.线程组属性:用线程数模拟几个人,所以有几个人线程数就写几。此处无需设置循环次数。

3.消息体数据进行变量替换:

4.参数化--函数:

常见函数:

_counter计数器函数TRUE(每个用户都有自己的计数器)FALSE(所有用户共用一个计数器)

_Random随机数函数 参数1:取值范围最小值(包含) 参数2:取值范围最大值(包含)

_time获取当前时间的函数 无参:获取的是距离 1970/01/01 00:00:00的毫秒值

参数1:yyyyMM_dd HH:mm:ss 格式化成 年|月_日 时:分:秒 格式

_time:

六、直连数据库:

通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。

获取某条学院的名字,放在百度搜索:

1.Jmeter不具备直连数据库功能,必须整合第三方(jar包)实现

2.配置数据库的连接

3.通过JDBC Ruquest请求向数据库发送SQL语句并接受提取响应结果

4.结果获取规则可以通过Debug Sampler组件查看

5.将提取到的响应结果,在百度上

步骤:

1.新建一个测试计划,并添加上jar包(sqlite-jdbc-3.21.0.jar),这样JMeter就有了直连数据库的功能。

2.添加JDBC请求。线程组-添加-取样器-JDBC Request

3.JDBC Connection Configuration的具体配置:

jdbc:sqlite:具体数据库的文件路径

例如:jdbc:sqlite:E:\项目\studentManagementSystem\db.sqlite3

4.JDBC Request的参数配置:

5.可在察看结果树中查看结果。

6.HTTP请求参数的配置:

协议:http

服务器名称或IP:www.baidu.com

端口号:80

val_30对应黑马学院1

在线程组中添加调试取样器但并不需要设置任何东西。

7.一切弄好后,再次运行,然后查看结果树。结果如下:

七、断言:

在HTTP请求中进行添加断言。

1.响应断言:

断言:让程序代替人工判断响应结果是否符合预期

分类:

响应断言 = 断言状态码和响应体

大小断言 = 判断响应内容的字节长度

断言持续时间 = 判断响应时间

步骤:

1.按照之前的实现编写测试脚本

2.为被判断的取样器添加断言组件

3.直接运行查看结果断言通过:无提示。断言失败:给出错误。

举例:

判断响应文本:

1.包含“老张”:

结果无报错:

2.不包含“老张hahha”:

结果报错:

模式匹配规则:

常用“包括”和”相等“。

“包括”:判断某些内容是否包含。

“匹配”:正则表达式用到的内容

“相等”:判断是否完全相等

“字符串”:

“否”:在前面的选择基础上结果取反。

“或者”:

测试字段:

常用“响应文本”和“响应代码”:

“响应文本”:最终通过一系列条件判断得到的内容。

“响应代码”:查的状态码是200;增的状态码是201或200;改的状态码是201或200;删的状态码是204.如果判断值为2000或其他数则直接报错。

-响应代码报错示例:

2.大小断言:

判断请求得到的结果数据有多少。

“响应字段的大小”的选择:

完整响应:

响应头:

响应的消息体:

响应代码:

响应消息:

-示例:

因为没有添加判断条件,所以侧边栏爆红。这样可以看到全部的响应结果。

3.断言持续时间:

同样的添加断言方式。

1000ms = 1s

注意单位是毫秒

下章导航:

JMeter进阶篇...

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

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

相关文章

AWTK-HarmonyOS NEXT 发布

AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎,支持跨平台同步开发,一次编程,到处编译,跨平台使…

右旋圆极化散射后的stocks矢量 与T3矩阵的关系

T3矩阵如下 斯托克斯与T3的关系如下。 斯托克斯与T3均没有平均处理,即斯托克斯是完全极化波的(一种琼斯矢量得到),T3是由一个散射矩阵得到,只有一个特征值。

理解 WordPress | 第二篇:结构化分析

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣,点个关注吧,防止迷路。 WordPress 的内容和功能结构可以按照层级来划分,这种层次化的…

Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)

前言:上一期我们简单学习了如何编写一个多次弹窗警告用户的exe伪恶意文件。我们知道了把Python初始文件编译为exe文件后,程序在没有Python环境的情况下也能正常运行。我们上次编写的程序仅仅只是伪造系统正在执行关机命令前的倒计时的假象,实…

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段:PT(Pre training)。使用公开数据经过预训练得到预训练模型,预训练模型具备语言的初步理解;训练周期比较长;微调阶段1:SFT(指令微调/有监督微调…

字节青训-小S的倒排索引

问题描述 小S正在帮助她的朋友们建立一个搜索引擎。为了让用户能够更快地找到他们感兴趣的帖子,小S决定使用倒排索引。倒排索引的工作原理是:每个单词都会关联一个帖子ID的列表,这些帖子包含该单词,且ID按从小到大的顺序排列。 例…

你需要了解的正则表达式相关知识

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于匹配字符串的模式。它广泛应用于文本查找、替换、验证等场景,尤其是在数据处理、网络爬虫、编程等领域非常有用。下面将详细介绍正则表达式的基本语法、常用元字符…

掌握分布式系统的38个核心概念

天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢? 1. 架构设计 这一节将从一些经典的开源系统架…

【C++进阶】智能指针的使用和原理(2)

5. shared_ptr和weak_ptr 5.1 shared_ptr循环引用问题 shared_ptr大多数情况下管理资源⾮常合适,⽀持RAII,也⽀持拷贝。但是在循环引⽤的场景下会导致资源没得到释放内存泄漏,所以我们要认识循环引用的场景和资源没释放的原因,并…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,或者是第三方公司提供的是Android的库,这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种,Module模…

linux进程的状态之环境变量

我们在前面了解了进程的状态及相关概念 接下来我们接着上一篇进程的状态接着了解环境变量 进程的状态 文章目录 目录 文章目录 前言 二、环境变量 1、常见环境变量 2、查看环境变量 3、修改PATH 4、HOME 5、PATH ​编辑 6、和环境变量相关的命令 三、环境变量的组织…

揭秘集装箱箱号自动识别原理,箱号识别算法

集装箱箱号自动识别算法是一种高效且实用的软件工具。它利用相机、手机或其他摄像头捕获集装箱箱号图像,并通过深度学习的OCR(光学字符识别)识别技术对集装箱号码进行准确识别。要想进行集装箱箱号识别,需要以下几个基本步骤&…

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。

2024-10-31,由清华大学和北京大学共同创建的AndroidLab数据集,为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架,这对于推动安卓代理技术的发展具有重要意义。 数据集地址:Android Instruct|A…

使用axois自定义基础路径,自动拼接前端服务器地址怎么办

请求路径: http://localhost:5173/http://pcapi-xiaotuxian-front-devtest.itheima.net/home/category/head 很明显多拼接了路径地址 查看基础路径文件发现: //axios基础封装 import axios from axiosconst httpInstance axios.create({baseURL: /h…

Densenet模型花卉图像分类

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

【Mysql NDB Cluster 集群(CentOS 7)安装笔记一】

Mysql NDB Cluster 集群(CentOS 7)安装笔记 NDB集群核心概念 NDBCLUSTER(也称为NDB)是一个内存存储引擎,提供高可用性和数据保存功能。 NDBCLUSTER存储引擎可以配置一系列故障转移和负载平衡选项,但从集群级别的存储引擎开始是最容易的。NDB集群的NDB存储引擎包含一整套…

Pattern program MPAT 详解

本文为VIP文章,主要介绍Pattern中元素与格式、常用指令、地址&数据产生指令等。 目录 一、pattern概述 二:Pattern构成元素 1、pattern构成元素:MPAT、END 2、pattern构成元素:pattern file name 3、pattern构成元素:SDEF 4、Pattern构成元素:REGISETR 5、Pa…

【通义灵码】AI编码新时代

目录 一.初识灵码,开启新篇 安装 登录 二.灵码相伴,探索新境 实时续写 自然生成 单元测试生成 解释代码 优化建议 快捷键 三.智慧流转,高效开发 驱动移植 LVGL框架 项目总结 四.融合创新,携手同行 一.初识灵码&#…

RabbitMQ客户端应用开发实战

这一章节我们将快速完成RabbitMQ客户端基础功能的开发实战。 一、回顾RabbitMQ基础概念 这个RabbitMQ的核心组件,是进行应用开发的基础。 二、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持。这里我们只分析Java语言的客户端。 上一章节提…

PySide6百炼成真(2)

文章目录 1.简单的登录页面2.简单的计算器 本篇根据前面所学做两个小demo 制作一个简单的登录页面制作一个计算器 因为还没有学习布局流等,所以就只能拖拉到设计师中. 1.简单的登录页面 下面就到计算器了,在图形界面中计算器就跟我们编程语言的hello,world一样,所以一定要自己…