JMeter性能测试(上)

一、基础简介

界面

  • 打开方式

    • 双击 jmeter.bat
    • 双击 ApacheJMeter.jsr
    • 命令行输入 java -jar ApacheJMeter.jar
  • 目录

    • BIN 目录:存放可执行文件和配置文件

    • docs目录:api文档,用于开发扩展组件

    • printable-docs目录:用户帮助手册

    • lib目录:存放JMeter依赖的jar包和用户拓展所依赖的jar包

  • 元件

    • 概念:多个类似功能组件的容器(类似于类)

      • 取样器:发送请求。类似于自动化中的业务测试语句
      • 逻辑控制器:控制元件执行顺序。类似于自动化中的逻辑控制语句
      • 前置处理器:对发送的请求参数进行预处理。类似于自动化中的参数化。
      • 后置处理器:对收到的响应数据进行处理。类似于自动化中获得对应的测试结果。
      • 定时器:等待一定时间。类似于自动化中的sleep语句
      • 测试片段:封装的脚本,供其他脚本调用。类似于自动化中封装的函数
      • 配置元件:测试前的环境及数据配置。类似于自动化中的初始化动作
      • 监听器:查看测试的结果。类似于自动化中的日志和报告。
    • 组件:类似于类中定义的方法
  • 作用域

    • 按照jmeter测试计划的树形结构来定义作用域(有点儿类型python的缩进)

    • 作用域的原则:
      • 取样器是jmeter的核心,不作用于其他的组件
      • 逻辑控制器,只对子节点起作用
      • 对于其他的组件,
        • 如果父节点是取样器的话,则只对父节点起作用,
        • 如果父节点不是取样器的话,则对父节点下的所有组件起作用
    • 第一个案例:

      • 访问百度

  • 线程组

  • 模拟多人操作,如果有多个线程组时,可以并行或者串行执行

    • 串行:如下图,“独立运行每个线程组”勾选,则所有的线程组按照添加顺序串行执行;如果未勾选,则并行执行(先后顺序无法保证)

    • 线程组的分类:
      • 普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响)
      • setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)
      • teardown:在所有的线程组之后执行(不受并行、串行配置的影响)

    • 线程组的属性:

      • 线程数:需要模拟的虚拟用户数。

      • ramp-up time:模拟的虚拟用户数全部启动所需要的时间。
        • 目的:为了模拟性能测试的场景,更接近用户的使用习惯(用户慢慢接入系统)
      • 循环次数:

        • 设置为固定次数n时:脚本运行时发送请求的次数为n
        • 设置循环次数为“永远”时,脚本会一直运行下去,不停止
      • 调度器:

        • 一般与循环次数为“永远”的设置配合使用
        • 持续时间设置为n时:脚本的请求发送的时间为n秒
        • 延迟启动设置为n时:脚本的请求发送在等待n秒后再进行
      • 延迟创建线程直到需要:当启动线程发送请求时,才分配资源;如果暂未启动该线程,则不分配。如果不勾选,在jmeter点击运行时立即分配(使用不多,了解即可,无法观察效果)

      • 线程数m和循环次数n的关系:
        • 如果同时配置,实际发送的HTTP请求数应该为m*n
        • 虽然发送请求的次数相同,但是不能相互替换
          • 线程数:代表并发用户数,体现服务器的负载量
          • 循环次数:代表执行时间
  • HTTP请求

    • 案例1:

    • 案例2:

    • 案例3:post

  • 察看结果树:

    • 出现乱码 1062行

  • 参数化

    • 定义:使用不同的测试数据,调用相同的测试方法进行测试
    • 本质:实现测试数据与测试方法的分离
    • 实现方法:

      • 1、用户定义变量

        • 配置方法1:配置元件中配置
          • 添加路径:测试计划——线程组——配置元件——用户定义的变量

          • 参数设置:
            • 参数名:参数值

          • 在HTTP取样器中应用:${参数名}

          • 线程组下配置的用户定义的变量,在线程组下生效,与测试计划中配置的变量冲突时,以线程组下的为准

        • 配置方法2:在测试计划中配置(全局生效)方法同上

      • 2、用户参数

        • 针对同一组参数,为不同用户访问时,分配不同的参数值

          • 使用用户定义的变量时,不同的用户在访问时,读取的参数值完全相同,如果希望每个用户在访问时的变量不同,可以使用用户参数。
          • 配置方法:
            • 添加位置:线程组——前置处理器——用户参数
            • 添加用户:可以添加多组用户(添加线程数,n)
            • 添加参数:针对每个用户添加多个参数

            • 添加HTTP请求,引用定义的变量名。格式为:${变量名}
      • 3、CSV数据文件设置

        • 使用用户参数时,每个用户可以取不同的数据,但是同一用户的多次循环时读取的数据是不变的。如果想让同一用户多次循环读取时的数据也不同,需要使用CSV数据文件设置的方式。
        • (1)定义CSV数据文件

        • (2)添加线程组
        • (3)配置CSV数据文件设置
          • 添加位置:线程组——配置元件——CSV数据文件设置
          • 参数配置

        • (4)添加HTTP请求

          • 引用参数值时,使用时CSV数据文件中定义的变量名
        • (5)查看结果树

      • 4、函数

        • 通过counter函数在生成动态变化的数值(自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义)

        • 在HTTP取样器中,应用counter函数生成的函数字符串,就可以读取counter函数生成的数值。
          • 如果counter参数设置为:TRUE,则每个用户分别从1开始计算,每循环一次加1
          • 如果counter参数设置为:FALSE,则所有用户公用一个计数器,每发送一个请求时,取值加1
        • 步骤:
          • (1) 添加线程组,设置虚拟用户数和循环次数
          • (2)生成_counter函数
          • ( 3) 添加http请求,使用*counter函数 格式 :${_counter(FALSE,)}
          • (4)添加查看结果树
      • 练习:

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

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

相关文章

Springboot_Redis

Springboot默认使用lettuce操作redis,底层是netty jdeis并发差些 Redis的Template 分为两种, 一种是StringRedisTemplate,另一种是RedisTemplate 根据不同的数据类型,大致的操作也分为这5种,以StringRedisTemplate为例 stringRedisTempla…

阿里云将关停代销业务

我是卢松松,点点上面的头像,欢迎关注我哦! 阿里云自从逐渐分拆独立之后,做了很多调整。最近它又做了一个大动作:据DoNews消息,阿里云将会在今年9月30日之前,全面关停代销业务。 这件事实际上…

MyBatis 动态SQL的标签有哪些?如何使用?

目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该…

【3D激光SLAM】LOAM源代码解析--laserOdometry.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…

什么是回调函数(callback function)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 回调函数(Callback Function)⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这…

Unity中实现获取InputField选中的文字

一:前言 获取到选中的文字:哈哈 二:实现 UGUI的InputField提供了selectionAnchorPosition和selectionFocusPosition,开始选择时的光标下标和当前光标下标 using UnityEngine; using UnityEngine.EventSystems; using UnityEngin…

记录一个诡异的bug

将对接oa跳转到会议转写的项目oa/meetingtranslate项目发布到天宫,结果跳转到successPage后报错 这一看就是successPage接口名没对上啊,查了一下代码,没问题啊。 小心起见,我就把successPage的方法请求方式从Post改为Get和POST都…

第61步 深度学习图像识别:多分类建模(TensorFlow)

基于WIN10的64位系统演示 一、写在前面 截至上期,我们一直都在做二分类的任务,无论是之前的机器学习任务,还是最近更新的图像分类任务。然而,在实际工作中,我们大概率需要进行多分类任务。例如肺部胸片可不仅仅能诊断…

元矿山下的音视频应用

// 近年来,矿业的技术和管理模式随着元宇宙的火爆和自动驾驶技术的发展逐渐变化、升级,进而衍生出元矿山的概念,音视频技术也在其中成为了关键一环。LiveVideoStackCon 2023 上海站邀请了来自希迪智驾的任思亮,为大家分享希迪智…

算法通过村第三关-数组黄金笔记|数组难解

文章目录 前言数组中出现超过一半的数字数组中只出现一次的数字颜色的分类问题(荷兰国旗问题)基于冒泡排序的双指针(快慢指针)基于快排的双指针(对撞指针) 总结 前言 提示:苦不来自外在环境中的人、事、物,…

yolov8热力图可视化

安装pytorch_grad_cam pip install grad-cam自动化生成不同层的bash脚本 # 循环10次,将i的值从0到9 for i in $(seq 0 13) doecho "Running iteration $i";python yolov8_heatmap.py $i; done热力图生成python代码 import warnings warnings.filterwarn…

使用秘籍|如何实现图数据库 NebulaGraph 的高效建模、快速导入、性能优化

本文整理自 NebulaGraph PD 方扬在「NebulaGraph x KubeBlocks」meetup 上的演讲,主要包括以下内容: NebulaGraph 3.x 发展历程NebulaGraph 最佳实践 建模篇导入篇查询篇 NebulaGraph 3.x 的发展历程 NebulaGraph 自 2019 年 5 月开源发布第一个 alp…

【Spring MVC】

目录 🍮1 什么是 MVC ? 🎁2 Spring MVC 的连接 🍘2.1 RequestMapping 实现 POST 和 GET 请求 🥣2.2 GetMapping 只支持 GET 请求 🫖2.3 PostMapping 只支持 POST 请求 🍬3 Spring MVC 获取参数的…

创建本地镜像

通过前面文章的阅读,读者已经了解到所谓的容器实际上是在父镜像的基础上创建了一个可读写的文件层级,所有的修改操作都在这个文件层级上进行,而父镜像并未受影响,如果读者需要根据这种修改创建一个新的本地镜像,有两种…

Smartbi电子表格软件版本更新,首次推出Excel轻应用和语音播放

Smartbi电子表格软件又又又更新啦! 此次更新,首次推出了新特性——Excel轻应用和语音播报。另外,还对产品功能、Demo示例、配套文档进行了完善和迭代。 低代码开发Excel轻应用 可实现迅速发布web应用 业务用户的需求往往都处于“解决问题”…

APP调用bindService的跨进程调用过程

app执行bindService时会经过如下8次跨系统进程调用过程: 第1步:通过AMS.getService跨进程调用 第2步:AMS返回它的IBinder 第3步:通过AMS的IBinder调用AMS的bindService方法 第4步:而AMS存放有Server端的IBinder&…

ChatGPT在医疗系统的应用探索动态

注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 生成式人工智能,如OpenAI开发的ChatGPT,被认为是可以颠覆医疗行业的工具。尽管该技术刚刚起步,但已有许多医…

Vue2向Vue3过度Vuex核心概念mutations

目录 1 核心概念-mutations1.定义mutations2.格式说明3.组件中提交 mutations4.练习5.总结 2 带参数的 mutations1.目标:2.语法2.1 提供mutation函数(带参数)2.2 提交mutation 3 练习-mutations的减法功能1.步骤2.代码实现 4 练习-Vuex中的值…

kettle实现爬虫

步骤概览 获取请求 请求地址 东方财富网股票请求 自定义常量数据 获取HTTP请求之前,必须先定义一个URL常量作为HTTP client的输入 HTTP client 注:此处得到的数据并不是原生的json字符串,自己可以用文本文件输出测试以下。如下图 JavaScri…