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进阶篇...

JMeter进阶篇-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_60872637/article/details/143677252?spm=1001.2014.3001.5501

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

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

相关文章

Elasticsearch中什么是倒排索引?

倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射&…

【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)

这是我的第374篇原创文章。 一、引言 SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。 TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。 DeepExplainer :DeepExplain…

C++数据结构算法学习

C ,orient(面向) object , object entity(实体) Visible(可见的) or invisible(不可见) 变量用来保存数据 objects attribute(属性) services(服务) C STL 容器 vector, list() vector底层是数组,类似双向链表和list底层 map/s…

ELK-Logstash配置

文章目录 一、什么是Logstash、有什么用?什么是 Logstash?Logstash 的主要特点:Logstash 的用途: 二、Logstash的安装与基本配置事先要安装Java的环境?Logstash 安装Debian/UbuntuRed Hat/CentOSmacOS(使用…

R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记, 快来收藏关注【科研私家菜】 01 机器学习的可解释性 对于集成学习方法,效果虽好,但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型,是由N棵树组成,…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释: 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。…

sql server启用远程连接与修改默认端口

一,数据库右键属性 二,sa账号状态属性启用 三,SQL Server配置管理器, 点击SQL Server 服务选项,确定SQL Server是正在运行的。 四,手动修改数据库的连接端口 1)确保启用 2)修改默认端口 3)客户端IP改为一…

吴恩达机器学习笔记(3)

吴恩达机器学习(3) tensorflow实现 用 TensorFlow 实现神经网络 以下是一个完整的代码示例,展示如何使用 TensorFlow 和 Keras 构建和训练一个简单的神经网络来处理 MNIST 数据集: import tensorflow as tf from tensorflow.k…

【入门篇】A+B Problem——多语言版

AB Problem 跳转 题目分析: 这个题目要求输入两个整数 a 和 b,然后输出它们的和。需要注意的是 a 和 b 的绝对值都不超过 10^9。此外,题目中提到了 Pascal 使用 integer 类型可能会爆掉,说明需要使用更大范围的数据类型来处理这…

Matlab实现鹈鹕优化算法(POA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鹈鹕优化算法(POA)是一种受自然界鹈鹕捕食行为启发的优化算法。该算法通过模拟鹈鹕群体在寻找食物时的协作行为,如群飞、潜水和捕鱼等,来探索问题的最优解。POA因其…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示(LCD)技术的电视类型,但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

《JavaEE进阶》----20.<基于Spring图书管理系统①(登录+添加图书)>

PS:关于接口定义 接口定义,通常由服务器提供方来定义。 1.路径:自己定义 2.参数:根据需求考虑,我们这个接口功能完成需要哪些信息。 3.返回结果:考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

OpenEuler 下 Docker 安装、配置与测试实例

文章目录 前言1. 环境准备2. 下载 Docker3.配置服务文件4.配置加速器加速下载docker镜像5. 验证 Docker 安装 前言 Docker 安装大致分为包管理器安装、脚本安装、离线手动安装、容器编排工具安装、桌面版安装等,每种安装各有特点,但涉及知识面不少&…

如何线程安全的使用HashMap

前言 Map一直是面试中经常被问到的问题。博主在找工作的过程中,就被问到了这样一个问题: Map是线程安全的吗?我不考虑使用线程安全的Map(eg:ConcurrentHashMap) 。如何在多线程/高并发下安全使用 HashMap? 当时博主…

Android CarrierConfig 参数项和正则匹配逻辑

背景 在编写CarrierConfig的时候经常出现配置不生效的情况,比如运营商支持大范围的imsi,或者是测试人员写卡位数的问题等等,因此就需要模式匹配(包含但不限于正则表达式)。 基本概念: 模式匹配涉及定义一个“模式”&a…

现代Web开发:Vue 3 组件化开发实战

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 现代Web开发:Vue 3 组件化开发实战 现代Web开发:Vue 3 组件化开发实战 现代Web开发:Vue 3 组…

吾店云介绍 – 中国人的WordPress独立站和商城系统平台

经过多年在WordPress建站领域的摸索和探索,能轻松创建和管理各种类型网站的平台 – 吾店云建站平台诞生了。 应该说这是一个艰苦卓绝的过程,在中国创建一个能轻松创建和使用WordPress网站的平台并不容易,最主要是网络环境和托管软件的限制。…

「QT」几何数据类 之 QLine 整型直线类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

uniapp分享功能

页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle onShareTimeline 监听用户点击右上角转发到朋友圈 微信小程序 2.8.1 onAddToFavorites 监听用户点击右上角收藏 微信小程序、QQ小程序 2.8.1 onShareAppMessage 用户点击右上角分享 微信小程序、QQ小程…