JMeter基础

JMeter工具基础使用

    • JMeter的三个重要组件
      • 线程组
      • HTTP请求
      • 查看结果树
    • JMeter参数化
      • 用户定义的变量
      • 用户参数
      • CSV数据文件设置
      • 函数
      • 四种参数化方式的不同
    • JMeter断言
    • JMeter关联
      • 正则表达式
      • XPath提取器
      • JSON提取器
    • JMeter属性
    • JMeter录制脚本
    • JMeter直连数据库
    • JMeter逻辑控制器
    • JMeter定时器

JMeter环境搭建

JMeter的三个重要组件

线程组

作用:控制JMeter用于执行测试的一组用户

分类:

  • Setup线程组:预测试操作,所有脚本之前执行
  • 线程组:执行测试用例的
  • Teardown线程组:所有脚本之后执行

位置:测试计划——添加——线程(用户)——线程组

属性

  • 线程数:虚拟用户数
  • Ramp-Up时间:全部虚拟用户启动需要的时间
  • 循环次数:指定运行次数,选中“永远”后一直执行
    调度器:配合“永远”使用。

Ps:线程数为2,循环次数为3;与线程数为3,循环次数为2的区别?

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

HTTP请求

作用:向服务器发送http及https请求

位置:线程组——添加——取样器——HTTP请求

属性

  • 协议:默认为HTTP,HTTPS
  • 服务器名称或IP:IP地址
  • HTTP请求:GET或POST请求
  • 路径:URL端口后面的部分
  • 参数:get方法中URL路径中传参(/?键名=键值&键名=键值)
  • 消息体数据:POST方法中,请求体中传参数(直接在消息体数据中添加请求体,任意格式:from、json)

查看结果树

作用:在查看结果树中点击运行可以查看请求参数和响应结果

位置:线程组——添加——监听器——查看结果树

JMeter参数化

参数化:把测试数据组织起来,用不同的测试数据调用相同的测试方法

用户定义的变量

场景:定义全局变量

位置:线程组——添加——配置元件——用户定义的变量

使用方法:

添加用户定义的变量,格式:变量名 - 变量值
在HTTP请求中引用定义的变量名。格式:${变量名}

用户参数

场景:针对同一组参数,不同用户访问时,可以获取到不同的值

位置:线程组——添加——前置处理器——用户参数

使用方法:

第一列添加多个变量名,后续每一列为一组用户的数据
在HTTP请求中引用定义的变量名。格式:${变量名}

CSV数据文件设置

场景:当不同用户或者同一用户多次循环时,都可以获取到不同的值

位置:线程组——添加——配置元件——CSV数据文件设置

使用方法:

准备好CSV数据文件,文件名处为文件路径
变量名称:自定义
在HTTP请求中引用自定义的变量名。格式:${变量名}

函数

场景:相当于计数函数,自动生成不重复的数据,让每个用户每次循环都能取到不同的值,且不需要提取定义

位置:菜单栏中的工具——函数助手对话框——选择counter函数——选择计数器方式——点击生成——复制函数

使用方法:

在HTTP请求中使用counter函数。格式:${__counter(FALSE,)}

四种参数化方式的不同

用户定义的变量:

  • 作用:定义全局变量
  • 局限性:每次取值(无论是否相同的用户) 都是固定值

用户参数:

  • 作用:保证不同的用户针对同一组参数,可以取到不同的值
  • 局限性:同一个用户在多次循环时,取到相同的值

csv数据文件设置:

  • 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值
  • 局限性:需要手动进行测试数据的设置

函数

  • 作用:保证不同的用户及多次循时,都可以取到不同的值,不需要提前设置
  • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)

PS:查看结果树看到的发送消息和HTTP取样器配置不完全一样的原因?

  • 查看结果树中最外层HTTP请求的 请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求信息和响应信息一致
  • 配置的HTTP请求,因该与子结点中第一个请求的请求信息一致

利用JMeter测试的一个具体用例,找一个跟着学一下,不然真的不会,不知道在干嘛怎么用

JMeter断言

让程序自动判断预期结果和实际结果是否一致

  • JMeter在请求的返回层有一个自动判断机制(响应状态码)
  • 但是请求成功了,并不代表结果一定正确,需要检测机制提高测试准确性。
  • 响应断言
    • 位置:HTTP请求——断言——响应断言
    • 场景:对HTTP请求任意格式的响应结果进行断言
  • JSON断言
    • 位置:HTTP请求——断言——JSON断言
    • JSON路径: . w e a t h e r i n f o . c i t y , .weatherinfo.city, .weatherinfo.city.为根目录,.对目录进行分割
    • 场景:对HTTP请求格式为JSON格式的响应结果进行断言
  • 持续时间断言
    • 位置:HTTP请求——断言——持续时间断言
    • 作用:检查HTTP请求的响应时间是否超出要求范围

JMeter关联

当请求之间有依赖关系的时候需要用到关联处理。如一个请求的入参是另一个请求返回的数据。

正则表达式

公式格式:左边界(匹配符)右边界

.:通配符,可以代表任意字符(换行回车除外)

*:表示前面的字符出现0次或多次

?: 表示非贪婪匹配,找到左边界后,往右查找右边界,查到匹配的右边界就停止继续查找;再次查找左边界和右边界

正则表达式提取器位置:HTTP请求——后置处理器——正则表达式提取器

参数:

引用名称:存放提取出的值的参数名称
模板:用$$引用起来,表示解析出的第几个正则表达式(.*?)中的值
匹配数字:1表示第一个值,0表示随意一个值,-1表示获取所有值

XPath提取器

位置:HTTP请求-后置处理器-XPath提取器

JSON提取器

位置:HTTP请求-后置处理器-JSON提取器

JMeter属性

用于不同线程组之间的参数获取

  • setProperty函数:将值保存成JMeter属性
  • property函数:在其他线程组中使用property函数读取属性
  • 使用步骤:
    • 添加线程组1
      • 添加HTTP请求——添加JSON提取器
      • 使用setProperty函数保存JSON中的值
      • 添加BeanShell取样器,在脚本中添加JMeter属性:${__setProperty(pro_city,${city},)}
    • 添加线程组2
      • 添加HTTP请求——使用property函数读取JMeter属性:${__property(pro_city,)}

JMeter录制脚本

  • 作用:在没有接口文档的旧项目中,快速录制web页面产生的HTTP接口请求,帮助编写接口测试脚本
  • 位置:测试计划(右键)->非测试元件->HTTP代理服务器

JMeter直连数据库

使用场景

  • 用作请求的参数化:登录时需要的用户名,可以从数据库中查询获取
  • 用作结果的断言:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致
  • 清理垃圾数据:添加商品,再执行该脚本不能成功,需要在下次执行前删除该商品数据
  • 准备测试数据:通过数据库准备大量的性能测试数据

JMeter逻辑控制器

位置:线程组-逻辑控制器-IF控制器/循环控制器/ForEach控制器

  • IF控制器:控制它下面的测试元素是否运行
  • 循环控制器:通过设置循环次数,实现循环发送请求
  • ForEach控制器:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量

JMeter定时器

  • 同步定时器:阻塞线程,当在规定时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大压力。
    • 超时时间:超市多少毫秒后同时释放指定的线程数。
    • 0:表示定时器会等待线程数达到了设置的线程数才释放,若没有达到则会一直死等。
  • 常数吞吐量定时器:
    • QPS单位为:次/s,而该定时器参数是:次/m,因此需要注意时间的换算
  • 固定定时器

定时器的作用也需要后面遇到具体的项目来做才能明白其作用

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

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

相关文章

百云齐鲁 | 云轴科技ZStack成功实践精选(山东)

山东省作为我国重要的工业基地和北方地区经济发展的战略支点,在“十四五”规划中将数字强省建设分为数字基础设施、数字科技、数字经济、数字政府、数字社会、数字生态六大部分,涵盖政治、经济、民生等多个方面,并将大数据、云计算、人工智能…

【错误记录】Uncaught TypeError: m.nodeName.toLowerCase is not a function

描述:在控制台输出上述错误~ 原因:在页面中,使用jQuery 开发时,命名不能和jQuery一起方法属性冲突,比如这里的nodeName,这里换一个不冲突的名字,就解决问题了。

统一身份认证平台之SSO建设

前言 上篇说道Passwordless无密码技术,也提到了数字时代密码管理的难度,其实在日常的生活中,很多用户也会因为忘记某些网站的登录密码而烦恼。为了方便记忆,很多人都在不同的站点使用相同的用户名和密码,虽然也可以减少…

uvm环境获取系统时间的方法和使用案例

背景: 有时候我们想统计一下验证环境中某个步骤总共花费了多少时间,有什么比较方便的方法呢,利用$realtime理论上也是能做到的,不过这个和timescale绑定起来了,需要手动换算成单位是秒的数,现在提供一种利用…

未来之路:互联网技术驱动汽车行业的创新浪潮

在互联网迅猛发展的今天,它的触角已延伸至各行各业,其中最引人注目的莫过于汽车行业。随着互联网技术的融合,汽车正变得越来越智能,预示着一场关于出行方式的革命。 首先,自动驾驶技术的发展正日益成熟。依托先进的传感…

josef约瑟 闭锁继电器 LB-7DG 100V 50HZ 导轨安装

LB-7型闭锁继电器 闭锁继电器LB-7导轨安装 一、用途 LB-7型闭锁继电器(以下简称继电器)用于发电厂及变电所内高压母线带电时防止和接地刀闸。 二、结构和工作原理 1、继电器按整流式原理构成,该继电器由变压器、电阻器、整流桥、滤波电容、极化继电器及指示灯组…

新人报到

文章目录 自我介绍博客平台写一些什么?为什么写博客? 自我介绍 计算机硕士研究生在读(研二),研究方向为神经网络模型量化、模型部署、深度学习和计算机视觉等。 博客平台 CSDN:_leoatliang 2022年5月12…

【C++初阶】STL详解(四)vector的模拟实现

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

Looking up a deactivated widget‘s ancestor is unsafe

背景: showCupertinoModalPopup中使用Navigator.of(context).pushNamedAndRemoveUntil(RouteName.login, (route) > false); 报错:Looking up a deactivated widget’s ancestor is unsafe 解决方案:先将CupertinoModal关闭,再…

使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…

esbuild打包

esbuild官网 npm install esbuild此命令应该会将 esbuild 安装到你本地的 node_modules 中。 你可以运行如下命令,来检测 esbuild 的原生可执行文件 是否正常: .\node_modules\.bin\esbuild --version这是一个简易的真实案例,用于说明 esbu…

为什么大家考完软考中级都去考高级?原因在这里!

2023上半年软考考试已经结束了,有很多同学在后台留言,一起考软考中级的同学都开始备考高级了,为什么考完软考中级还要考高级呢?软考高级含金量大吗?考试难度高吗?软考中级我考的集成,高级应该选…

STM32获取最大堆栈空间

参考 stackflow相关讨论 原理 通过参考链接,可知探测Stack的最大深度是先在stack中填充不常用的特定值,然后实时检测这些值哪些发生了变化,变化的表示使用到了这个空间,如果程序完全遍历后,有些值还是没变&#xff…

c语言-输入输出详解

文章目录 格式化输入输出占位符printfscanf 字符串输入输出puts&#xff08;&#xff09;gets&#xff08;&#xff09; 字符输入输出putchar&#xff08;&#xff09;getchar&#xff08;&#xff09; 区别 格式化输入输出 输入输出的库函数的头文件&#xff1a; #include<…

物联网AI MicroPython学习之语法 SPI串行外设通信

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; SPI 介绍 模块功能: SPI串行外设驱动 接口说明 SPI - 构建SPI对象 函数原型&#xff1a;SPI(id, baudrate&#xff0c;polarity, phase&#xff0c;sck, mosi, miso)参数说明&#xff1a; 参数类型必选参…

内置函数和消息传递API

消息传递范式 消息函数、聚合函数与更新函数 消息函数接受一个参数 edges&#xff0c;这是一个 EdgeBatch 的实例&#xff0c; 在消息传递时&#xff0c;它被DGL在内部生成以表示一批边。edges 有 src、 dst 和 data 共3个成员属性&#xff0c; 分别用于访问源节点、目标节点…

使用Docker/K8S/Helm部署项目流程

假设项目已经开发完成&#xff0c;部署流程如下&#xff1a; 一、制作镜像&#xff1a; 1、创建nginx配置文件default.conf server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html ind…

postgresql安装fdw扩展

最近有同一个服务器不同数据库、不同服务器数据库之间的数据同步需求&#xff0c;使用了fdw 下面举例的是同一个服务器两个不同数据库的同步情况 1、安装扩展 create extension postgres_fdw; 在需要使用fdw的数据库都加上该扩展 2、创建fdw服务器 mlhbase_prd库 CREATE…

【17】基础知识:reduxjs/toolkit

一、Redux Toolkit 概念了解 Redux Toolkit 是 Redux 官方强烈推荐&#xff0c;开箱即用的一个高效的 Redux 开发工具集。它旨在成为标准的 Redux 逻辑开发模式。 Redux Toolkit 最初是为了帮助解决有关 Redux 的三个常见问题而创建的&#xff1a; "配置 Redux store 过…

Failed to execute org.scala-tools:maven-scala-plugin:2.15.2解决

原因也不是很清楚&#xff0c;查看一个博主文章(net.alchim31.maven:scala-maven-plugin&#xff1a;maven依赖无法下载或无法编译)得到的解决方案&#xff1a; 在idea的terminal执行以下语句即可实现maven对scala代码的编译&#xff1a; mvn clean scala:compile compile pac…