性能测试-JMeter(1)

news2024/10/9 3:48:18

性能测试工具

  • 主流性能测试工具
    • Loadrunner
    • JMeter
  • JMeter环境安装
  • JMeter功能概要
    • JDK常用文件目录介绍
    • JMeter元件和组件介绍
      • 元件的基本介绍
      • 组件的基本介绍
    • JMeter元件作用域和执行顺序
    • JMeter第一个案例
      • 线程组
      • HTTP请求
      • 查看结果树
    • JMeter参数化(重点)
      • 用户定义的变量
      • 用户参数
      • CSV数据文件设置
      • 函数(__counter)
      • 小结

主流性能测试工具

Loadrunner

  • HP Loadrunner是一种工业级标准性能测试负载工具,可以模拟上万用户实施测试,并在测试时可实时检测应用服务器及服务器硬件各种数据,来确认和查找存在的瓶颈
  • 支持多协议:Web(HTTP/HTML)、Windows Sockets、FTP、ODBC、MS SQL Server等协议
  • 采用C语言编写
  • 优点
    • 多用户(支持用户以万为单位)
    • 详细的分析报表(以秒为单位)
    • 支持IP欺骗功能
  • 缺点
    • 收费
    • 体积庞大(安装包单位GB)
    • 无法定制功能

JMeter

  • JMeter是Apache组织开发的基于Java的开源软件,用于对系统做功能测试和性能测试
  • 它最初被设计用于Web应用测试,但后来扩展到其他测试领域,例如静态文件、Java程序、shell脚本、数据库、FTP、Mail等
  • 优点
    • 开源免费
    • 小巧(安装包50MB左右)
    • 丰富的学习资料和扩展组件
  • 缺点
    • 不支持IP欺骗
    • 分析和报表能力相对于LR欠缺精度(以分钟为单位)

JMeter环境安装

1、安装JDK
2、安装JMeter(JMeter版本与JDK版本匹配)
安装好后,进入JMeter安装目录下的bin目录【以下任意一种方式打开】
1)双击jmeter.bat
2)双击ApacheJMeter.jar
3)命令行输入:java -jar ApacheJMeter.jar

JMeter功能概要

JDK常用文件目录介绍

  • Bin目录:存放可执行文件和配置文件
    • jmeter.bat——windows的启动文件【重要】
    • jmeter.log——Jmeter工具运行的日志文件
    • jmeter.properties——Jmeter工具的配置文件【重要】
    • jmeter.sh——linux的启动文件
    • jmeter-server linux分布式测试的启动程序
    • jmeter-server.bat windows分布式测试的启动程序
  • docs目录:是JMeter的api文档,用于开发扩展组件
  • printable_docs目录:用户帮助文档
    • 用户手册路径:…\apache-jmeter-5.6.3\printable_docs\usermanual\index.html
  • lib目录:存放JMeter依赖的jar包和用户扩展所依赖的jar包

JMeter元件和组件介绍

元件的基本介绍

  • 元件:多个类似功能组件的容器(类似于
    jmeter元件
    • 取样器:发送请求
    • 逻辑控制器:控制语句的执行顺序
    • 前置处理器:对请求参数进行预处理
    • 后置处理器:对响应结果进行提取
    • 断言:检查接口的返回结果是否与预期结果一致
    • 定时器:设置等待
    • 测试片段:封装一段代码,供其他脚本调用
    • 配置元件:测试数据的初始化配置
    • 监听器:查看JMeter脚本的运行结果

组件的基本介绍

  • 组件:实现独立的某个功能(类似于方法)

    如:取样器的组件
    jmete取样器下的组件

(1)如下接口自动化脚本的实现过程对应着Jmeter哪个元件?

  1. 初始化测试数据——配置元件
  2. 对请求参数化赋值——前置处理器
  3. 调用GET/POST方法发送请求——取样器
  4. 提取响应中特定字段的值——后置处理器
  5. 对提取出来的值与预期结果进行对比——断言
  6. 在控制台查看脚本运行的结果——监听器
    (2)元件与组件有什么关系?
    元件:多个类似功能组件的容器(类似于
    组件:容器中实现独立的某个功能(类似于方法

JMeter元件作用域和执行顺序

元件的作用域:是靠测试计划的树形结构中元件的父子关系来确定的
提示:所有的组件都是以取样器为核心来运行的。组件添加的位置不同,生效的取样器也不同。

  • 作用域的原则
    • 取样器:核心,不和其他元件相互作用,没有作用域
    • 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
    • 其他元件:
      • 如果是某个取样器的子节点,则该元件只对其父节点起作用
      • 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点、子节点的子节点等)
  • 元件的执行顺序
    • 同一个作用域下不同类型元件:
    1. 配置元件
    2. 前置处理程序
    3. 定时器
    4. 取样器
    5. 后置处理程序
    6. 断言
    7. 监听器

JMeter第一个案例

需求:使用JMeter访问百度首页接口,并查看请求和响应信息
步骤:

  1. 启动JMeter
  2. 在’测试计划’下添加’线程组’
  3. 在’线程组’下添加’HTTP请求’取样器
  4. 填写’HTTP请求’的相关请求数据
  5. 在’线程组’下添加’查看结果树’监听器
  6. 点击’启动’按钮运行,并查看结果
    案例

线程组

作用:线程组就是控制Jmeter用于执行测试的一组用户
位置:右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组
【特点】

  • 模拟多人操作
  • 线程组可以添加多个,多个线程组可以并行或串行
  • 取样器(请求)和逻辑控制器必须依赖线程组才能使用
  • 线程组可以添加其他元件下组件

【线程组分类】

  • 线程组:普通的、常用的线程组,可以看作一个虚拟用户组,线程组的每一个线程都可以理解为一个虚拟用户
  • setUp线程组:一种特殊类型的线程组,可用于执行预测试操作
  • tearDown线程组:一种特殊类型的线程组,可用于执行测试后工作

【参数详解】
线程组-参数详解
如下场景如何设置线程组?

  • 模拟10个用户并行执行——线程数10
  • 模拟10个用户5s内启动完成——线程数10,ramp-up时间:5s
  • 模拟2个用户各循环3次——线程数2,循环次数2
  • 模拟2个用户运行30s——线程数2,循环永远,持续时间30s
  • 模拟2个用户等待10s后开始执行——线程数2,循环永远,启动延迟10s

案例分析:

  • 使用1个线程组,添加http请求
    • 配置线程数为2,循环次数为3时,运行观察结果
    • 配置线程数为3,循环次数为2时,运行观察结果,对比不同

分析:

  • 线程数代表虚拟用户数,用户数越多,负载越大
  • 循环次数代表运行时间,次数越多,运行时间越长

HTTP请求

作用:向服务器发送http及https请求
位置:选中线程组 --> 右键 --> 添加 --> 取样器 --> HTTP请求
参数:
HTTP请求参数设置
【练习】编写Jmeter脚本,访问百度
案例一:GET请求,URL为http://www.baidu.com/S?wd=test
要求:使用HTTP请求—路径来传递get请求参数
在这里插入图片描述

案例二:GET请求,URL为https://www.baidu.com/S?wd=test
要求:使用HTTP请求—参数列表来传递get请求的参数
在这里插入图片描述

案例三:POST请求,URI为https://www.baidu.com/S,请求体为:wd=test(form表单
要求:使用HTTP请求—参数列表来传递POST请求的form格式参数
在这里插入图片描述

案例四:POST请求,URL为http://www.baidu.com/S,请求体为:wd=test(form表单)要求:使用HTTP请求—消息体数据来传递POST请求的form格式参数
在这里插入图片描述

查看结果树

作用:查看http请求的请求和响应结果
位置:选中测试计划/线程组 --> 右键 --> 添加 --> 监听器 --> 查看结果树
组成:

  • 取样结果:查看响应信息头信息、响应状态码
  • 请求:查看请求相关信息(url、方法、参数)
  • 响应:查看响应信息

若结果出现乱码,解决方法:
1、找到jmeter安装目录下的bin目录
2、打开jmeter.properties文件,修改配置sampleresult.default.encoding=UTF-8
3、重启jmeter即可
【新版默认就是utf-8】

JMeter参数化(重点)

参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法
本质:实现测试数据与测试方法的分离

  • JMeter中常见的参数化方式:
    • 用户定义的变量——全局变量
    • 用户参数——为每个用户分配不同的参数值
    • CSV Data Set Config——文件方式参数化
    • 函数——随机数据
    • 数据库

用户定义的变量

作用:定义全局变量
位置:测试计划 --> 线程组 --> 配置元件 --> 用户定义的变量
【练习】
请求:https://www.baidu.com:443
要求:使用用户定义的变量配置被测系统的协议、域名和端口
在这里插入图片描述
在这里插入图片描述

用户参数

作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置:测试计划 --> 线程组 --> 前置处理器 --> 用户参数
【练习】
请求:https://www.baidu.com
要求:第一个用户请求附带参数:name=“张三"&age=28;第二个用户请求附带参数:name=“李四”&age=30
操作步骤:
1、添加线程组,线程数设置为2
2、添加用户参数
3、添加HTTP请求
4、添加查看结果树
在这里插入图片描述
在这里插入图片描述

CSV数据文件设置

作用:让不同用户在多次循环时,可以取到不同的值
位置:测试计划 --> 线程组 --> 配置元件 --> CSV数据文件设置
在这里插入图片描述
【练习】
请求:https://www.baidu.com
要求:循环请求3次,每次请求时附带参数username,password,code的值不相同
操作步骤:
1、定义CSV数据文件
2、添加线程组,设置循环次数为3
3、添加CSV数据文件设置
4、添加HTTP请求
5、添加查看结果树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数(__counter)

作用:计数函数,一般做执行次数统计使用
位置:在菜单中选择 --> 选项(工具) --> 函数助手对话框
在这里插入图片描述
【练习】
请求:访问百度首页 http://www.baidu.com/s?num=1
要求:每个用户每次循环执行该脚本都可以使用不同的值
操作步骤:
1、添加线程组,设置虚拟用户数和循环次数
2、生成__counter函数
3、添加HTTP请求,使用__counter函数
4、添加查看结果树
在这里插入图片描述

小结

  • 什么是参数化?
    • 把测试数据组织起来,用不同的测试数据调用相同的测试方法
  • 4种参数化方式有何不同?如何选择适当的方式?
    • 用户定义的变量
      • 作用:定义全局变量
      • 局限性:每次取值(无论是否相同的用户)都是固定值
    • 用户参数
      • 作用:保证不同的用户针对同一组参数,可以取到不同的值
      • 局限性:同一个用户在多次循环时,取到相同的值
    • CSV数据文件设置
      • 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值
      • 局限性:需要手动进行测试数据的设置
    • 函数
      • 作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置
      • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户密码)

【案例】
某支付系统,需要1000个不同的用户登录,并使用添加不同的测试金额数据访问支付接口?
答案:
1、准备CSV数据文件——1000个登录的用户名密码
2、添加线程组
3、添加CSV数据文件设置
4、添加HTTP请求——登录,使用读取的用户名密码
5、添加HTTP请求——支付,使用counter函数添加不同的测试金额
6、查看结果树

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

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

相关文章

02_InFluxDb

InFluxDb 初始化初始化流程 交互InFluxDbWebUI交互 数据模型行协议添加标签数据格式 数据类型空格索引 初始化 初始化流程 用户 密码 组织名称 Bucket—mysql里面的数据库概念 交互InFluxDb 暂用了8086端口.提供了 http api WebUI交互 略... 数据模型 这是mysql里面的表…

1500元买哪款显卡好?对比一下,差别明显

在游戏过程中,显卡负责渲染游戏画面,将其转化为可视化的图像,并快速显示在屏幕上,确保游戏运行的流畅性和画面的质量。所以对于游戏电脑来说,显卡的重要性尤为突出。虽说在最近几年,显卡市场的“消费升级”…

算法:前缀和算法模版

一维前缀和 题目 链接:一维前缀和模版题 思路分析 一:暴力O(q * N) 对于每一次询问,我们都可以用一个循环计算[l,r]区间内的元素和, 时间复杂度,O(q * N) 每一次计算一个区间都需要去循环一次,这是不是…

2024年中国研究生数学建模什么时候出成绩(附避坑指南)

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 今年的华为杯已经于2024年9月20日——2024年9月25日完成,相信大家下…

40 C 语言结构体:结构体数据类型、结构体变量、访问结构体成员、结构体指针

目录 1 为什么需要结构体 2 什么是结构体 3 声明结构体类型 3.1 语法格式 3.2 案例演示 3.2.1 学生信息结构体 3.2.2 通讯录条目结构体 3.2.3 猫咪结构体 4 声明结构体变量 4.1 什么是结构体变量 4.2 声明结构体变量的常见方式 5 结构体和结构体变量的区别与联系 …

基于STM32的智能鱼缸自动喂食系统设计

引言 本项目设计了一个基于STM32的智能鱼缸自动喂食系统,能够按照预设的时间间隔自动投放饲料,同时监测鱼缸内的水温和光照情况。该系统通过电机控制喂食器的旋转来实现饲料投放,用户还可以通过按键实现手动喂食。该项目展示了STM32在定时控…

Spring Validation —— 参数校验框架

案例说明——后端校验注册表单字段 在编写注册功能时,需要考虑字段校验的情况,这时候可以采用 Spring提供的一套参数校验框架工具——Spring Validation。一下是使用的步骤: 1. 导入validation坐标 2. 在参数上添加 Pattern注解&#xff0c…

单细胞|Signac 进行 Motif 分析

单细胞|Signac 进行 Motif 分析 引言 本教程将指导您如何在Signac平台上进行DNA序列的基序(Motif)分析。会介绍两种基序分析的方法:一种是在一组差异可访问的峰值中寻找出现频率较高的基序;另一种是在不同细胞群组间进行基序活性的差异分析。 library(Si…

simpread-OpenAI推出Canvas:让ChatGPT成为更出色的项目协作者

引言 OpenAI在最新一轮融资中创下了VC融资历史上的记录,与此同时,他们也推出了一项令人瞩目的新功能——Canvas。Canvas是一个专门为项目协作设计的界面,旨在让ChatGPT成为更高效的项目协作者。在现有的ChatGPT应用之外,它打开了…

LC538 - 把二叉搜索树转换为累加树

文章目录 1 题目2 思路3 ACM模式参考 1 题目 https://leetcode.cn/problems/convert-bst-to-greater-tree/description/ 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree) 累加树&#…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-08

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-07目录1. GraphRouter: A Graph-based Router for LLM Selections摘要创新点算法模型实验效果结论推荐阅读指数 2. DOTS: Learni…

2024年诺贝尔物理学奖授予AI先驱 Hopfield 和Hinton,奖金1100万瑞典克朗,他们是ChatGPT的忠实用户

2024年诺贝尔物理学奖得主:AI领域的杰出科学家 获奖者 2024年诺贝尔物理学奖的获奖者是两位在人工智能(AI)尤其是机器学习技术方面做出杰出贡献的科学家:约翰霍普菲尔德和杰弗里欣顿。 瑞典皇家科学院在周二宣布,这两…

Shamiko模块:隐藏root

开启Zygisk 在安装Shamiko模块之前,需要使用面具开启Zygisk,在面具的设置里可以开启,开启后重启手机Zygisk生效。 开启后的样子 开启面具随机报名 在面具的设置里,找到“隐藏Magisk应用”,点击这个选项&#xff0…

ESP8266使用AT指令完成MQTT功能

ESP8266使用AT指令完成MQTT功能 在esp8266设备中烧录安信可的AT固件之后,进行AT指令完成信息发布,并最终实现在Homeassistant中发布传感器并设置传感器状态。 一、基础指令 以下是完整的步骤和对应的AT指令: 1. 配置ESP8266为Station模式 …

在线培训知识库管理系统:企业的明智之选

在当今这个快速变化的时代,企业之间的竞争日益激烈,知识更新速度之快前所未有。为了保持竞争力,企业不仅需要不断引入新技术、新方法,还需要确保员工能够及时掌握这些新知,将其转化为生产力。在此背景下,在…

codetop标签双指针题目大全解析(四),双指针刷穿地心!!!!!

复习复习复习!! 1.长度最小的子数组2.移动零3.盛水最多的容器4.旋转链表5.最接近的三数之和6.删除有序数组中的重复项7.返回倒数第k个节点的值8.四数之和9.验证回文串 1.长度最小的子数组 考滑动窗口的 要注意是大于等于不是等于 看错题目一顿调 class …

CNAI趋势下,打造一体化AI赋能平台

在数字化转型的浪潮中,人工智能(AI)已成为推动企业创新和转型的核心力量。云原生技术以其灵活性和可扩展性,为AI的应用和发展提供了坚实的基础。本文将探讨云原生人工智能(CNAI)如何为企业带来颠覆性的变革…

cnn突破八(两层卷积核bpnet网络扩展)

cnn突破七中x【?】怎么求?我们举个例子: 接着cnn突破七: hicnn【】来自temphicnn【】2*2最大池化: temphicnn[0]x[i0,j0,5*5方阵]*w1cnn[0-24], hicnn是5*5的,temphicnn是10*10的&#xff0…

YOLOv8改进 - 注意力篇 - 引入SimAM注意力机制

一、本文介绍 作为入门性篇章,这里介绍了SimAM注意力在YOLOv8中的使用。包含SimAM原理分析,SimAM的代码、SimAM的使用方法、以及添加以后的yaml文件及运行记录。 二、SimAM原理分析 SimAM官方论文地址:SimAM文章 SimAM官方代码地址&#…

【土地那些事儿】一文读懂“集体所有土地”

今天咱们来聊一个既熟悉又神秘的概念——集体所有土地。在中国广袤的大地上,除了国有土地外,还有一种特殊的土地所有权形式,它关乎亿万农民的切身利益,那就是集体所有土地。来,让我们一起揭开它的面纱吧! …