从零开发短视频电商 Jmeter基础介绍和使用心得

news2024/11/16 9:58:09

文章目录

    • 基本
      • Jmeter主要元件
      • 元件执行顺序
      • 提取器
        • Json提取器
        • 边界值提取器
    • 高级
      • 动态参数
      • 参数化
      • 前后关联
      • 设置Jmeter语言为中文环境
      • 非GUI模式压测
      • 分布式压测
      • 监控
      • 模板

基本

Jmeter主要元件

1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器

2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3、配置元件:用于初始化变量,以便采样器使用。类似于框架的配置文件,参数化需要的配置都在配置元件中。

4、前置处理器:负责在请求之前工作,常用来修改请求的设置

5、定时器:负责定义请求之间的延迟间隔。在没有定时器的情况下,JMeter 发送请求是不会暂停的。

6、取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求,也可以使用 Java 类型的请求进行自定义编写。

7、后置处理器:负责在请求之后工作,常用获取返回的值。

8、断言:用来判断请求响应的结果是否如用户所期望的。

9、监听器:负责收集测试结果,同时确定结果显示的方式。不过图形化的呈现非常消耗客户端性能,在正式性能测试中并不推荐使用。

10、逻辑控制器:可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

元件执行顺序

配置元件->前置处理器->定时器->取样器->后置处理器->断言->监听器

使用Jmeter进行接口测试的基本步骤如下:

1.测试计划

2.线程组

3.HTTP Cookie管理器

4.Http请求默认值

5.Sampler(HTTP请求)

6.断言

7.监听器(查看结果树、图形结果、聚合报告等)

提取器

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理,Jmeter可以使用后置处理器中的一些组件来处理关联,

常用的关联方法:

  • 正则表达式提取器 - 适用于所有返回的格式

  • 边界值提取器 - 适用于所有返回的格式

  • Json提取器 - 适用于返回的是json格式的数据(现在基本都是restfulAPI,选这个)

  • XPath提取器 - 适用于返回的是html或者xml格式的数据

Json提取器

JsonPath的语法推荐在此网站调试:http://jsonpath.com

示例

{
    "data":[
        {
            "name":"张三",
            "age":18
        },
        {
            "name":"李四",
            "age":28
        }
    ]
}

要取第一个人的姓名
JSON Path expressions:$.data[0].name

要取年龄>18 的姓名
JSON Path expressions:$.data[?(*@*.age>18)].name

边界值提取器

举例
view=1&token=721652512141&name=ggui
左边界token=
右边界&name
可得到结果 721652512141
PS:注意,左右边界尽可能唯一,能更精确匹配到想提取的字符

高级

动态参数

对于 POST 请求,我使用了以下 Jmeter 函数

  • __UUID() – 返回一个唯一的 GUID 结构
{
    "project": {
        "uuid": "${__UUID()}"
    }
}

img

参数化

3 种比较常见的 JMeter 参数化的实现方式。

  • CSV Data Set Config:将参数化的数据放入文件中,参数化读取依赖于文件操作。这样的参数化方式很常用,尤其适用于参数化数据量较多的场景,而且维护比较简单灵活。
  • User Defined Variables:一般来说可以配置脚本中的公共参数,如域名,端口号,不需要随着压测进行动态改变,比较方便环境切换
  • Function Helper 中的函数:使用函数的方式生成参数,如果你需要随机数、uuid 等都可以使用函数生成。JMeter 还提供了相应的接口给你二次开发,自定义需要的功能。

前后关联

  • 边界提取器,通过左右边界的方式关联需要的数据;

  • Json Extractor提取器,针对返回的 json 数据类型;

  • 正则表达式提取器,通过正则表达式去提取数据,实现关联。

设置Jmeter语言为中文环境

1、临时设置

Jmeter菜单栏选择Options -> Choose Language -> Chinese (Simplified)

这种方法,重启软件后又变为英文环境了。

2、永久设置

进入apache-jmeter\bin目录,找到“jmeter.properties”文件,在文件搜索并修改“language=zh_CN”,保存之后再打开jmeter就永久变为中文环境了。

img

非GUI模式压测

在linux上部署好Jmeter后,把xxx.jmx脚本上传。

# 切换目录
cd /usr/laker/apache-jmeter-5.5/bin
# 执行脚本
./jmeter -n -t /usr/laker/apache-jmeter-5.5/go-laker.jmx -l /usr/laker/result/result.jtl -e -o /usr/laker/result/WebReport

/usr/laker/apache-jmeter-5.5/go-laker.jmx:此路径是Jmeter脚本的绝对路径。

/usr/laker/result/result.jtl: 运行脚本后生成的jtl结果。

/usr/laker/result/WebReport :运行脚本成功后生成的html图形化报告的绝对路径,如果不需要此结果,删除“-e -o /usr/laker/result/WebReport”

压缩zip -r archive.zip folder/

参数说明:

  • -n: 非GUI模式执行JMeter

  • -t: 执行测试文件所在的位置

  • -l: 指定生成测试结果的保存文件,如:jtl文件格式,txt文件格式

  • -e: 测试结束后,生成测试报告

  • -o: 指定测试报告的存放位置

分布式压测

单机的 JMeter 最好将线程数控制在 1000 以内;如果超过了 1000 线程,则建议使用 JMeter 分布式压测,这在一定程度上可以解决 JMeter 客户端自身形成的瓶颈问题。

JMeter 的工作方式是一个控制节点在多个工作节点上发起测试。

  • 控制器节点

    运行 JMeter GUI 的系统,它控制测试

  • 工作节点

    运行jmeter-server 的系统,它从 GUI 获取命令并将请求发送到目标系统

  • 目标

    我们计划进行压力测试的网络服务器

在这里插入图片描述

重要重要重要

  • 控制节点,工作节点,待压测节点要网络互通(互相ping下试试可通,小心防火墙挡住了)

  • 控制节点,工作节点使用相同版本的JDK和Jmeter(非常重要)

  • 控制节点,工作节点的jmeter.properties文件开启配置server.rmi.ssl.disable=true

  • 工作节点单独运行No GUI的Jmeter测试是正常的。

  • 工作节点上添加 远程工作节点IP地址,打开jmeter.properties配置remote_hosts=192.168.0.10,192.168.0.11,192.168.0.12,192.168.0.13

  • 详细文档:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

1.启动单个工作节点
在这里插入图片描述

2.启动所有工作节点
在这里插入图片描述

常见错误

错误日志1

[root@localhost bin]# ./jmeter-server
Server failed to start: java.rmi.RemoteException: Cannot start. localhost is a loopback address.
An error occurred: Cannot start. localhost is a loopback address.

如果启动出现An error occurred: Cannot start. localhost is a loopback address报错
解决方案:指定启动ip

cd /usr/laker/apache-jmeter-5.5/bin
sh jmeter-server -Djava.rmi.server.hostname=x.x.x.x
# 或 nohup ./jmeter-server -Djava.rmi.server.hostname=10.22.66.10 & 

错误日志2

ERROR o.a.j.e.ClientJMeterEngine: Error in rconfigure() method 
java.lang.IllegalStateException: Engine is busy - please try later
...

解决方案:确保控制节点和所有的工作节点的JDK和jmeter版本要保证一致。

我上面的错误是JDK版本不一致导致。

正确的日志如下:

Created remote object: UnicastServerRef2 [liveRef: [endpoint:[10.2.66.197:39798                                                                                       ](local),objID:[-243708a9:18831fb2c04:-7fff, -9195443886642911871]]]

Starting the test on host 10.224.76.197 @ May 19, 2023 3:09:09 AM GMT (1684465749583)
Finished the test on host 10.224.76.197 @ May 19, 2023 3:10:10 AM GMT (1684465810986)

监控

PerfMon插件:监控服务器硬件,如CPU,内存,硬盘读写速度等

监控指标如下

硬件监控

  • 磁盘读写速度 剩余量
  • CPU使用率 大小
  • 内存使用率 大小
  • 网络读写速度
  • 文件句柄数

系统监控

  • 应用

    • GC
    • 连接请求数、拒绝数、丢包率、请求超时等
    • 链路监控
    • 业务监控 高并发下业务逻辑运行是否正常
    • 线程数
  • 数据库

    • 慢查询
    • 长事务
  • 缓存

    • 连接数
    • 慢命令
    • 缓存命中率
  • MQ

    • 生产速度
    • 消费速度
    • 消息堆积量

注意哪些是进程级别,哪些是系统级别

模板

  • Http模板
  • Websocket模板

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

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

相关文章

一、Zabbix介绍及6.0部署

Zabbix 一、Zabbix介绍1、zabbix是什么?2、zabbix的监控原理是什么?3、Zabbix 6.0新特性:4、Zabbix 6.0 功能组件: 二、Zabbix 6.0 部署1、部署 zabbix 服务端2、部署数据库3、编译安装 zabbix Server 服务端4、部署 Web 前端,进行…

Jmeter接口关联(二)【使用jsonpath表达式提取值】与python中使用jsonpath提取值 完成接口关联

文章目录 前言一、jmeter中使用jsonpath的表达式来提取值 1、使用jsonpath表达式匹配date的所有数据2、使用json提取器提取想要拿取的date值二、在Python中使用Jsonpath来完成接口的关联 ​​​​​​​1、jsonpath使用讲解 2、jsonpath在接口关联中使用总结 前言 Jmeter中关…

NFT + JAVA + 可更新合约

前言 合约部署参考:hardhat 合约开发参考:openzeppelin 钱包:metamask 部署链使用的是:sepolia 合约生成Java:solc 合约部署和测试自行处理 1. 合约 合约代码:ZhuZiNFTU.sol // SPDX-License-Iden…

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 Proteus仿真小实验: STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 功能: 硬件组成:STM32F103R6单片机 LCD1602显示器多个按键蜂鸣器DS18B20温度传感器3个LED灯表示档位加热指…

[SDOI2008] 仪仗队 题解

注:在洛谷同时发布。 题目链接 解题思路 首先观察样例。似乎什么也观察不出来? 那就根据题目描述中所给的图表做。首先找到对角线,将图形沿着对角线一分为二。注意对角线上可以看到一个人,所以答案要加 1 1 1。 其次逐个分析…

-XX:SurvivorRatio

-XX:SurvivorRatio-XXSurvivorRatio eden :from eden :to默认-XXSurvivorRatio8,即 Eden : s0 : s1 8 : 1 : 1,Eden占了年轻代的8/10,不建议修改 case1: -XX:NewRatio4 -XX:SurvivorRatio8 启动参数-Xmx200m -Xms1…

探索Flutter的启动交响曲,详尽指南助力应用启动

Flutter启动流程主要步骤有哪些? 初始化应用程序创建Flutter引擎加载Dart代码构建Widget树创建渲染树更新渲染树呈现界面处理用户输入 Flutter启动需要那些? Dart虚拟机 Dart语言是由Google开发的一种通用编程语言,它可以在不同的平台上运…

基于单片机汽车防盗报警的设计与实现

功能介绍 以STM32单片机作为主控系统;LCD1602液晶显示当前温度信息和参数等功能;3个LED指示灯表示:震动指示灯、人体感应指示灯、防盗模式开启指示灯;按键用来开启防盗模式,设置温度上下限;开启防盗后检测到…

批量识别表格数据——Python调用百度云API

识别效果展示 原始表格 识别处理的表格,可以看到,效果是非常好的 获取KEY 百度智能云 (baidu.com) 产品——文字识别——通用场景 去领取 通用场景OCR——全部——0元领取 去创建 填应用名称——全选——最下面应用描述——立即创建——返回应用列表 …

抖音seo矩阵系统源码|需求文档编译说明(技术)

1.抖音seo矩阵系统文档开发流程 抖音SEO矩阵指的是一系列通过搜索引擎优化(SEO)技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上,用户可以通过搜索关键词来查找与其相关的视频和账号。因此,抖音SEO矩阵的主要目…

将Notes应用中的PDF附件转为图片

大家好,才是真的好。 好久没有写专门开发方面的知识,主要是因为看的人太少。嗯,当然,这是表面上的,实际上更重要的原因是,写得很麻烦,而且看的人少。 开发要调试,代码要反复测试&a…

Java入门--变量

变量是什么? 变量是用来记住程序要处理的数据的。 变量的定义格式? 数据类型 变量名 数据 注意:这里面的 是赋值的意思,把等号右边的赋值给左边 变量名命名规则: 以字母、下划线、$ 作为首字母由字母、数字、下…

map和set介绍及使用

目录 一、什么是关联式容器 二、set 1.set的介绍 2.set的使用方法 三、mutiset 四、map 1.map简介 2.map的使用 五、multimap 一、什么是关联式容器 在了解map、set之前,你肯定已经使用过vector、list、deque、forward_list(C11)等这些容器,而他…

Jtti:linux如何查看磁盘驱动器列表?

在Linux系统中,你可以使用以下命令之一来查看磁盘驱动器列表: 1.使用 fdisk 命令:运行以下命令来查看磁盘驱动器列表: 这会列出系统中所有的磁盘驱动器及其分区。 2.使用 lsblk 命令:运行以下命令来查看磁盘驱动器列表…

SpringSecurity学习总结

目录 一、简介 二、使用 引入 登录验证流程 完整流程 三、案例(登录验证) 三、设置密码加密和解密方式 三、自定义登录 四、定义JWT认证过滤器 简介 流程 JWT(当前未使用) 定义token过滤 配置过滤器为最前 再次总结流程 五、退出登录 六、一些中间配置 七、网关…

05-流式操作:使用 Flux 和 Mono 构建响应式数据流

1 通过 Flux 对象创建响应式流 基于各种工厂模式的静态创建方法编程的方式动态创建 Flux 相对而言,静态方法在使用上都比较简单,但不如动态方法来得灵活。我们来一起看一下。 2 通过静态方法创建 Flux Reactor 中静态创建 Flux 的方法常见的包括 jus…

机器学习、深度学习、人工智能三者之间究竟是什么关系?

1 什么是人工智能 人工智能(Artificial Intelligence):人工智能是一个广泛的概念,指的是使计算机系统具备像人类一样的智能和能力。人工智能涵盖了包括机器学习和深度学习在内的各种方法和技术,旨在让计算机能够感知、…

IPO观察丨黑芝麻智能递表港交所,车芯行业已迈向量产决战期?

虽然我国汽车芯片行业还处在发展初期,但已经迸发出无限潜力。 一方面,智能汽车的发展不断带动需求增长;另一方面,政策引导下,汽车芯片企业持续抢占高地。对此,在7月5日-7日举办的2023年中国汽车论坛上&…

【数据结构二叉树OJ系列】7、构建二叉树并中序遍历

目录 题述: 思路: 正确代码: 题述: 编写一程序,读入用户输出的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#…

C++通过回车结束循环输入

试想一个案例,假设需要你输入n行数字,而每一行输入的数字数量都未知(不定),如何通过C来实现这一操作? 本贴笔者给出一个具体案例:首先规定输入的行数,而后在每一行输入不定量的数字&…