【性能测试】接口测试各知识第3篇:Jmeter 基本使用流程,学习目标【附代码文档】

ops/2024/9/17 23:10:48/ 标签: 测试, 性能测试, 性能测试, 测试

接口测试>测试完整教程(附代码资料)主要内容讲述:接口测试>测试,学习目标学习目标,2. 接口测试>测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标,RESTFUL1. 理解接口的概念,2.什么是接口测试>测试,3. 接口测试>测试的基本流程,4. 学习掌握接口测试>测试工具RESTClient、Postman的使用,目标,1. 定义。Jmeter 基本使用流程学习目标,目标,1. 主界面布局,2.Jmeter的基本使用流程,3. 相关概念。Jmeter 八大元件及执行顺序,参数化学习目标,目标,1. 元件作用域及执行顺序,2. 八大可执行元件,目标,目标。Jmeter 从数据库中获取数据,Jmeter 关联目标,目标,为什么要使用Jmeter从数据库中获取数据?,目标,1. 需求,2. 正则表达式提取器。Jmeter断言,Jmeter 集合点目标,目标,1. 断言概述,2. 需求,3. 响应断言,4. Size Assertion(大小断言)。Jmeter 逻辑控制器学习目标,目标,1 为什么要学习逻辑控制器?,2. 什么是逻辑控制器?,3. 常用(控制类)逻辑控制器,4. 常用(分组类)。Jmeter 图形监视器扩展插件下载及使用,项目-学生信息管理系统学习目标,目标,1. 为什么要下载图形监视器扩展插件?,2. 图形监视器扩展插件有什么用?,目标,目标。项目-学生信息管理系统,Jmeter 附件-API文档目标,目标,Queries释义,Queries释义,目标,目标。接口自动化脚本设计,性能脚本设计目标,目标,为什么要设计自动化脚本?,3. 组件配置图,4. 整体效果动态演示,5. 脚本执行含查数据库演示。Jmeter FTP服务器测试>测试,Jmeter Test Fragment(测试>测试片段)目标,目标,1. FTP是什么?,2. FTP有什么用?,3. 如何测试>测试FTP服务器?,目标。

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


全套教程部分目录:


部分文件图片:

学习目标

  • 了解Jmeter的优缺点
  • 能够搭建Jmeter的测试>测试环境
  • 知道Jmeter的基本使用流程
  • 能够区分组件和元件的区别
  • 掌握Jmeter的基本使用

Jmeter 基本使用流程


目标

  • 了解Jmeter功能界面布局
  • 熟悉测试>测试计划面板

1. 主界面布局

JMeter的主界面布局分为标题栏、菜单栏、工具栏、树形标签栏和内容栏

标题栏:主要显示计划信息及JMeter版本。
菜单栏:全部的功能的都包含在菜单栏中。
工具栏:工具栏中的按钮在菜单栏都可以找到,工具栏就相当于菜单栏常用功能的快捷按钮
树形标签栏:树形标签栏通常用来显示测试>测试用例(计划)相关的标签。
内容栏:配合树形标签栏显示,树形标签中点击哪个标签,内容栏中就显示相应的内容和操作。

jmeter界面

组件

概念: Jmeter中功能点称为组件

元件

概念:相同类似功能组件的集合称之为元件.

常用的八大元件:

  1. 逻辑控制器
  2. 配置元件: 包含java默认值、http请求默认值、http表头管理器等等
  3. 定时器(Timer): 包含同步定时器、泊松随时时间等
  4. 前置(预)处理器: jdbc 预处理器、html链接解析器,用户参数等
  5. 采样器(Sampler): 包含http请求、jdbc请求、邮件请求等
  6. 后置处理器: 包含jdbc后处理器、xpath抽取器、正则表达式抽取器等
  7. 断言
  8. 监听器: 包含图表结果、查看结果树、汇总报告等

2.Jmeter的基本使用流程

需求:
1. 需求对我们学院查询执行100次,如何去做?
2. 50个请求同时请求如何操作?
使用JMeter的解决方案
1. 添加【测试>测试计划】
2. 基于添加的测试>测试计划添加【线程组】,循环次数设置为100次
3. 在【取样器】中基于线程组添加**HTTP请求**  
4. 在【监听器】基于线程组添加【察看结果树】  
5. 在监听器基于线程组添加【聚合报告】

2.1 创建测试>测试计划

创建<a class=测试>测试计划" src="https://img-blog.csdnimg.cn/direct/782ad7def14c4e5ca312f690fa9130fc.png" />

测试>测试计划的名称栏目修改名字后,ctrl + s 保存

2.2 设置请求三要素

Jmeter基本使用流程设置http

2.3 运行并查看结果

(1). 设置监听器和结果树

设置监听器

(2). 查看运行结果

查看运行结果

3. 相关概念

3.1 TestPlan(测试>测试计划)

<a class=测试>测试计划" src="https://img-blog.csdnimg.cn/direct/782ad7def14c4e5ca312f690fa9130fc.png" />

在Jmeter中包含各种相互关联但为不同目的而设计的元素.

测试>测试计划可视化为用于运行测试>测试的JMeter脚本, 包含执行脚本的所有步骤。测试>测试计划由测试>测试元素组成,包括线程组,逻辑控制器,样本生成控制器,监听器,定时器,断言和配置元素等等。

每个测试>测试计划中至少应有一个线程组。 我们可以根据要求添加或删除元素。

测试>测试计划的作用:
1. 本次测试>测试所需要的【组件】都是基于测试>测试计划添加;
2. 本次测试>测试所有组件的设置与执行都基于测试>测试计划;组件:完成指定功能代码段的封装;
选项(在这里我们只介绍我们会使用到的选项)
  • 独立运行每个线程组:
进程:是每个正在运行的应用程序。
线程:按照进程的指令去执行指定的代码。
线程组(多线程):多个线程的组合。
线程组(多线程)的执行顺序是并行的。 勾选:让本次测试>测试计划中所有线程组保持从上到下顺序执行
  • Add directory or jar to classpath:
加载第三方jar包;比如:测试>测试数据库时使用,加载数据库驱动jar包。
注意事项

3.2 Threads(User)线程组 【重点】

创建线程组

1. thread group(线程组): 通常添加使用的线程组,一般一个线程组可以看作一个虚拟用户组,其中每个线程为一个虚拟用户.
2. setup thread group: 一种特殊线程组, 可用于执行预测试>测试操作,即执行测试>测试前进行, 一般做初始化操作.
3. teardown thread group: 一种特殊的线程组, 可用于执行后操作,即执行测试>测试结束后执行, 一般做结尾操作.
(1)、 thread group(线程组)

线程组

作用:
1. 添加测试>测试中使用的大多数组件
在取样器错误后要执行的动作
- 继续: 取样器执行时出现错误时,请求不会停止,继续执行
- Start Next Thread Loop: 忽略错误, 线程当前循环错误,执行下一个循环
- 停止线程: 只限当前线程停止,不影响其他线程执行
- 停止测试>测试: 当前执行的线程全部执行完毕后结束
- Stop Test Now: 立刻停止
线程属性
- 线程数:虚拟用户数
- Ramp-Up Period(in serconds):启动虚拟全部用户数所需要的时间
- 循环次数 :指定次数或勾线永远
- Delay Thread creation until needed: 默认不勾选,测试>测试开始时,所有线程被创建完.若勾选,线程会在需要合适时间进行创建.
- 调度器:勾选后,调度器配置才能使用;
调度器配置
- 持续时间(秒):设置脚本压测持续时间
- 启动延迟(秒):启动延迟时间
- 启动时间: 设置启动时间和启动延迟冲突.如果启动延迟设置后,启动时间被忽略.
- 结束时间: 设置脚本运行结束时间,和持续时间冲突,若有持续时间,结束时间会被忽略

提示:为了理解setup thread、teardown thread两个线程组我们结合案例理解下

(2) 案例

需求:

通过thread group、setup thread group、teardown thread group 三个线程组去访问去访问查询所有学院接口

效果图

效果图

1. 需求组件:
1. 基于测试>测试计划添加【线程组】  
2. 基于线程组添加【HTTP请求】
3. 基于测试>测试计划添加【setup thread group】线程组
4. 基于setup thread group添加HTTP请求
5. 基于测试>测试计划添加【teardown thread group】线程组
6. 基于teardown thread group添加HTTP请求
7. 基于测试>测试计划添加【察看结果树】
2. 组件设置细节:
1. 测试>测试计划勾选独立运行线程组 
2. HTTP请求:服务器地址 
3. HTTP请求: 修改HTTP请求名称,以做区分
3. 结论
经过测试>测试我们发现线程组的执行顺序是: setup thread group、thread group、 teardown thread group

3.3 Http请求

添加http请求

创建http请求

http界面

http界面

(1)、 作用:
1. 模拟前端或第三方软件向服务器发送请求;
2. 设置请求时的方法和参数数据;
(2)、 参数详解:
1. 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
2. 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
3. 端口号:目标服务器的端口号,默认值为80 。
4. 协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
5. 方法:发送HTTP请求的方法,可用方法包括GET、POST、PUT、DELETE。
6. Content encoding :内容的编码方式,默认值为iso8859;一般设置【UTF-8】
7. 路径:目标URL路径(不包括服务器地址和端口)
8. 同请求一起发送参数:请求时需要传递参数,如:学院资源list查询参数名称:【$dep_id_list】参数值:T01,T02,T03
(3)、 Body Data选项作用:
1.新增或更新时需要传递JSON报文;如学院新增是的JSON报文填写位置:{"data": [{"dep_id": "T01","dep_name": "Test学院","master_name": "Test-Master","slogan": "Here is Slogan"}]}2. 【注意】:新增和更新时传入报文也需要设置Content-Type:application/json   告诉服务器我传的数据格式为JSON格式;  设置地点:配置元件-->HTTP信息头管理器(用到的时候我们在讲解)
HTTP请求总结:
1. 接口完整请求地址
2. JSON报文存放地址
3. 设置默认请求数据格式

3.4 查看结果树

查看结果树

(1)、 作用:
1.查看请求服务器时的请求信息;
2.查看服务器响应数据;
3.记录信息到指定文件;
(2)、 说明:
1. 文件名:存放服务器响应后的状态信息; 如:e:\查询所有response.txt
2. 取样结果:服务器响应的信息头信息;比如:响应代码,响应数据大小
3. 请求:查看向服务器请求时的信息;比如:请求地址、方法、数据等
4. 响应数据:查看服务器响应的数据;比如:获取资源时,返回的JSON数据
察看结果树总结:
1. 查看请求
2. 查看响应
3. 存储请求状态信息

4. 总结

我们发现在Jmeter中测试>测试计划是展开测试>测试工作的源头,所以要掌握测试>测试计划的创建、删除操作; 在测试>测试计划使用中我们根据不同需求创建不同的元件和组件, 来实现测试>测试计划.

元件是相似功能组件的集合,能够便于管理组件,而组件是某个功能的在Jmeter中的实现.

测试>测试计划中每个线程组就是虚拟的一组用户,每个线程就是一个虚拟用户,对于每个用户发起的测试>测试的请求,可以每次定义http请求

未完待续, 同学们请等待下一期

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


http://www.ppmy.cn/ops/2312.html

相关文章

LeetCode 113—— 路径总和 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 看到树的问题一般我们先考虑一下是否能用递归来做。 假设 root 节点的值为 value&#xff0c;如果根节点的左子树有一个路径总和等于 targetSum - value&#xff0c;那么只需要将根节点的值插入到这个路径列表中…

如何用flutter写一个好的登录页面

编写一个好的登录页面是构建用户友好且安全的移动应用的重要一步。下面是使用Flutter编写一个好的登录页面的一些建议和步骤&#xff1a; 1. 设计用户界面 1.简洁明了的布局&#xff1a;确保界面简洁明了&#xff0c;不要过分复杂&#xff0c;避免用户感到困惑。 2.清晰的输入框…

Unity TextMeshProUGUI 获取文本尺寸·大小

一般使用ContentSizeFitter组件自动变更大小 API 渲染前 Vector2 GetPreferredValues(string text)Vector2 GetPreferredValues(string text, float width, float height)Vector2 GetPreferredValues(float width, float height) 渲染后 Vector2 GetRenderedValues()Vector…

面试梳理(4.15-11:00)

一、TS中any 和 unknown的区别 借鉴于阮一峰笔记 1、any ​ &#xff08;1&#xff09;any 类型表示没有任何限制&#xff0c;该类型的变量可以赋予任意类型的值。 ​ &#xff08;2&#xff09;变量类型一旦设为any&#xff0c;TypeScript 实际上会关闭这个变量的类型检查。…

(十八)C++自制植物大战僵尸游戏的游戏暂停实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 游戏暂停 当玩家遇到突发事件&#xff0c;可以通过暂停功能暂停游戏&#xff0c;以便及时处理问题。在激烈的游戏中&#xff0c;玩家可能需要暂停游戏来进行策略调整。此外&#xff0c;长时间的游戏对战可能会让玩…

CSS实现弹性盒子保持水平和垂直居中

弹性盒子 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

RuoYi-Vue-Plus (系统菜单路由获取、路由生成逻辑、前端按钮控制、自定义权限角色组件)

一、router 获取系统路由菜单 1-后端生成菜单方法 getRouters 方法位于 com.ruoyi.web.controller.system.SysLoginController类中, 作用:根据角色获取菜单 @GetMapping("getRouters")public R<List<RouterVo>> getRouters() {Long userId = LoginHel…

深度剖析扫雷游戏的各个知识点(2)

小伙伴们&#xff0c;大家好。这次继续上次的剖析扫雷游戏的知识点。 那么本次咱们主要是讲扫雷中的宏定义&#xff0c;也就是#define这些 首先#define是用来定义一个宏&#xff0c;后面就是类似于和变量一样的常量名&#xff0c;以及最后的数字就是它的值。 定义规则 #def…

LlamaIndex 组件 - Prompts

文章目录 一、关于 Prompts1、概念2、使用模式概览3、示例指南 二、使用模式1、定义自定义提示2、获取和设置自定义提示2.1 常用提示2.2 访问提示2.3 更新提示2.4 修改查询引擎中使用的提示2.5 修改索引构建中使用的提示 3、[高级]高级提示功能3.1 部分格式化3.2 模板变量映射3…

LLamaSharp加载llama.cpp转化好的模型

新建.net8控制台项目 安装依赖包 LLamaSharp和LLamaSharp.Backend.Cpu 准备好转化好的模型 没有的话参考这篇文章https://blog.csdn.net/qq_36437991/article/details/137248622 编写代码 using LLama; using LLama.Common; using LLama.Native;namespace llamasharpstu…

淘宝扭蛋机小程序开发:开启购物娱乐新纪元

在数字时代浪潮的推动下&#xff0c;小程序作为新兴的交互平台&#xff0c;正在不断引领着购物方式的革新。淘宝扭蛋机小程序的开发&#xff0c;便是这一变革中的一颗璀璨明星&#xff0c;它将传统扭蛋机的趣味与电商购物的便捷完美融合&#xff0c;为用户带来了前所未有的购物…

Spring Task 定时任务(cron的使用)

Spring Task 是 Spring 框架的一个组件&#xff0c;它为任务调度提供了支持&#xff0c;使得开发者能够创建后台任务或定期执行的任务。通过 Spring Task&#xff0c;您可以方便地在 Java 应用程序中实现定时任务&#xff0c;比如每天凌晨进行数据同步、每小时执行一次清理操作…

Netty在游戏开发中的用途

Netty 是一个高性能的 Java 网络应用程序框架&#xff0c;它支持快速开发可靠的网络服务器和客户端。在游戏开发中&#xff0c;Netty 常被用于以下几个主要用途&#xff1a; 实时多人交互 游戏如 MOBA&#xff08;多人在线战斗竞技场&#xff09;、MMORPG&#xff08;大型多人…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升&#xff0c;许多编程语言也纷纷效仿&#xff0c;Java 也不例外。 另一边&#xff0c;尽管社区内部问题重重&#xff0c;但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的&#xff1a;Rust 的编译器让开发人员避免了各种问题。编译器对…

已解决 数据库异常 SQLSyntaxErrorException:FUNCTION count does not exist.

今天排查问题看到数据库报错 Caused by: java.sql.SQLSyntaxErrorException: FUNCTION your_table_name(你的数据库名字).count does not exist. Check the Function Name Parsing and Resolution section in the Reference Manual然后查了很久才找到问题 在COUNT和括号之间有…

VictoriaMetrics安装部署

安装部署 1、 去 vm release 下载编译好的二进制版本&#xff0c;比如我们选择下载 v1.69.0 amd64。 2、 解压缩后得到&#xff1a; $ ls -l vm*-prod -rwxr-xr-x 1 work work 10946416 Nov 8 22:03 vminsert-prod* -rwxr-xr-x 1 work work 13000624 Nov 8 22:03 vmselect…

React 组件生命周期对比:Class vs. 函数式

在 React 中&#xff0c;Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比&#xff0c;详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点&#xff0c;以及如…

html公众号页面实现点击按钮跳转到导航

实现效果&#xff1a; 点击导航自动跳转到&#xff1a; html页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…

【C++】类和对象(下)

欢迎来到类和对象下&#xff0c;这篇博客之后我们将通关类和对象&#xff0c;也意味着我们已经入门C了~ 那么先了解一下本篇的学习目标&#xff1a;构造函数体赋值、初始化列表、explicit关键字 、static成员、友元&#xff0c;内部类&#xff0c;同时还有匿名对象的介绍以及编…

如何将本地项目上传到gitlab

具体步骤如下&#xff1a; 1. 登录 gitLab账号&#xff0c;成功创建一个项目文件&#xff0c;生成对应的http/https地址 2.打开本地项目&#xff0c;初始化git $ git init 3.将本地git和服务器上的连接&#xff08;确保项目没有其他远程连接的服务器端口&#xff09; $ gi…