首页 > 其他分享 >jmeter组件使用详解(一)

jmeter组件使用详解(一)

时间:2023-06-21 22:23:27浏览次数:50  
标签:1.7 匹配 详解 线程 组件 取样器 jmeter 取值

1.jmeter组件使用

创建脚本的方式:

代理录制:jmeter自带http代理服务器

抓包手写:应用层抓包工具(fillder,charles,F12等)

根据API文档手写

1.1 测试计划详解

它是jmeter测试元件的容器

用户定义的变量(User Defined Variables):可以定义整个测试中使用的重复值

独立运行每个线程组:

  • 勾选后,普通线程组之间按上下排列顺序执行,而非默认的执行
  • 默认不勾选,不勾选表示各种运行自己的

函数测试模式:压测的时候不选择,否则影响性能

添加classpath(需要重启jmeter):

  • 类路径设置,可以添加jar文件的目录到特定的测试计划
  • 也可以直接把jar包放到jmeter的lib目录(默认的classpath)

 

上面分别表示:

  • 运行时间
  • 日志,如果有错误日志,数字标红
  • 线程:绿色表示正在运行(灰色表示未运行)

1.2 线程组

1.2.1 线程组(Thread Group)

给服务器发请求的,发送压力

 在取样器错误后要执行的操作:

  • 继续:线程出错继续执行
  • 启动下一线程循环:开始下一次循环
  • 停止线程:3个线程循环2次,如果第二个线程出问题,这个线程就停止,继续运行其余线程
  • 停止测试:把线程运行的请求运行完才停止
  • 立即停止测试:立刻停止

线程属性:

线程数设置多少合适:线程要占用内存资源,创建线程要消耗cpu,结合tps和rt,如果应用处理快,可以设置少点

Ramp-Up时间(秒):线程在多少秒内启动(如果线程数是100,这里设置为10,表示10秒内启动100个线程,但是不一定是每秒启动10个线程)

调度器配置:

持续时间:最终的持续时间包含了启动时间

启动延迟:定时启动

1.2.2 jp@gc-Stepping Thread Group

阶梯加压,和自带的比,多了阶梯加压完成后,还可以设置持续运行多少时间

自带的,虽然没有明显的阶梯,但是场景还是有意义

1.2.3其他线程组

setup线程组:执行前执行一次,应用场景是初始化数据

tearDown线程组:执行后执行一次,做关闭连接、清除垃圾数据等收尾工作

 1.3 配置元件(ConfigElement)

1.3.1 CSV数据文件配置

作用:用于参数化实现,

说明:参数值最后只能一个空行或者没有空行

参数化实现的几种方式:

  • csv数据文件配置
  • 用户定义的变量
  • 相关函数
  • beanshell脚本

批量造csv参数化数据的方式:

  • 代码(Java,json)
  • 从数据库导出
  • 并发业务接口

 1.文件名:在当前测试计划下的相对路径或绝对路径

不要放中文路径下,路径不要包含空格,特殊字符

可以参数化:放在bin目录下可以用这种路径:${__P(user.dir,)}${__P(file.separator,)}user.csv

2.文件编码:一般选用UTF-8

变量名称(西文逗号间隔):

参数文件中每列的名称,如果有多列,用英文逗号间隔,如果只有一列,则不加分隔符

忽略首行(只在设置了变量名称后才生效):如果参数文件中有很多列,为了区分每列,就在首行把列名写上,此时就要选True

比如:

username,password,age,addr,phone
jack,123456,18,beijing,119
tom,123456,19,beijing,110

4.分隔符(用'\t'代表制表符):是变量值的分隔符,比如上面,分隔符是英文逗号

5.是否允许带引号?:如果是False,请求中保留引号(默认),如果是True,请求中去掉引号

遇到文件结束符再次循环?(Recycle on EOF):

True 表示循环:一般保持默认True

False 就取消循环

Edit:在没有参数的时候会根据定义的内容来调用函数或变量

遇到文件结束符结束进程?Stop thread on EOF?:

值不够,是否停止线程,不停,一般保持默认False

如果设置为True,结束进程,那么“Recycle on EOF?”设置的True将失效

线程共享模式(Sharing mode):

所有线程 ALL Threads【每次迭代,唯一】 (默认值):

结论:
多个线程组取值不一样,
每个线程组内的线程取值也不一样
每次迭代取值不一样,
每次循环取值一样
多个取样器取值一样

当前线程Current thread【每次迭代,顺序】:

结论:
多个线程组取值一样,
每个线程组内的线程取值也一样
每次迭代取值不一样,
每次循环取值一样
多个取样器取值一样

当前线程组 Current thread group:

结论:
多个线程组取值一样,
每个线程组内的线程取值不一样
每次迭代取值不一样,
每次循环取值一样
多个取样器取值一样

1.3.2 HTTP信息头管理器

比如:content-type:application/json

 1.3.3 HTTP Cookie管理器

UI端请求:建议加上

比如:登录完了有cookie,重定向时没有cookie,就又跳转到登录页面

1.3.4 HTTP请求默认值

 1.3.5 JDBC Connection Configuration

 

 1.3.6 计数器

 1.4 前置处理器(Pre Processors)

BeanShell预处理程序

1.5 定时器(Timer)【不建议使用】

1.5.1 高斯随机定时器:

1000-3000:

偏差1000,固定延迟偏移2000

取值范围:3000-1000 或3000+1000

1.5.2 同步定时器(集合点)

超时时间为0就永远等待

固定定时器

1.6 取样器

1.6.1 http请求

重定向:

  • 自动重定向:不传cookie信息
  • 跟随重定向:自动把上一次请求的header中的cookie信息传过去

User keepalive 长链接

Use multipart/form-data for POST:表单和json互斥,可以和文件上传一起使用

 参数Parameters:

设置url请求参数

编码?Encode:当参数值中有特殊字符时,最好选上“编码”,否则字符串可能会被截断

包含等于?Include Equals:自动添加参数名和值之间的等号

消息体数据Body data:设置post消息体

文件上传Send Files:发送文件相关设置

客户端实现

 其中有三个选项:空值、HTTPCLient4、Java

  • JAVA:使用JVM提供的HTTP实现
  • HTTPClient:使用Apache的HTTP组件HttpClient4.x实现
  • 空值:如果为空,则依赖HTTP Request默认方法,或在jmeter.properties文件中的jmeter.httpsample定义的值

差异:httpclient4每次连接都会重新建立tcp连接,适合模拟真实场景

1.6.2 其他取样器

jp@gc-Dummy Sampler

BeanShell取样器

调试器取样器

JDBC Request

1.7 后置处理器

jmeter关联的五种方式:

  1. 正则表达式提取器
  2. jp@gc - JSON Path Extractor提取器
  3. Json Extractor提取器
  4. 边界提取器
  5. beanshell后置处理器

1.7.1 正则表达式提取器

1.7.1.1 正则表达式:

基础:
. 匹配除"\r\n"之外的任何单个字符。要匹配包括""\r"\n"在内的任何字符,请使用像"[\s\S]"的模式。(\s是指空白,包括空格、换行、tab缩进等所以的空白,而\S刚好相反,这样一正一反就表示所有的字符),[a-z]

* 匹配前面的子表达式(也可以是一个字符)任意次。例如zo"能匹配z",也能匹配"zo"以及"zoo"。等价于o{0,}

+ 匹配前面的子表达式一次或多次(大于等于1次)。例如,"zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}

? 匹配前面的子表达式零次或一次,例如,"do(es)?" 可以匹配"do"或"does"中的"do"。等价于{0,1}

\w 字母、数字、下划线、汉字

\d 数字

{n} 重复n次 a{2}--aa

{n,} 重复>=n次

{n,m} 重复n到m次

说明:注意:限定符只对其前面一个字符起作用

组合:
.* 具有贪婪的性质,匹配到不能匹配为止,最大匹配原则
*?  +? 表示非贪婪匹配,即尽可能少的匹配,最小匹配原则
.*?  表示在能匹配成功的前提下尽可能少的匹配,最小匹配原则

常用:
.*?   \d  \s \S\s  \s+

1.7.1.2 详解

 要检查的响应字段:用得最多的是【主体】,其次是【信息头】

主体:header+body,可以从header,也可以从body取值

 响应信息:http响应代码对应得响应信息,例如:HTTP/1.1 200 ok  取值为ok

引用名称:变量名,由用户指定,最好有意义

正则表达式:

  • 用来获取服务器响应值的正则表达式
  • 括起来的部分就是要提取的
  • 写法(大部分情况有效):左边界(.*?)右边界

模板:填写的是位置变量$N$,或者是常量字符串,如果正则表达式需要提取多个值这里可以写多个:$1$$2$...

匹配数字:

  • 0表示随机取值
  • 1表示第一个,正整数代表提取第几个匹配的内容,模板中每个模板都取第一个
  • -1代表全部取值,此时提取结果是一个数组,哪怕结果只有一个值(如果匹配第一个,除了数字选择1,还可以通过${token_1}的方式来取第1个匹配的内容,${token_2}来取第2个匹配的内容,token是引用名称)

缺省值:如果参数没有取得到值,那默认给一个值让它取,最好是有特征的,方便出错的时候看报错信息,比如:----------

1.7.1.3 例子

{
    "data": {
        "orderId": "10000${__Random(100,999,num)}",
        "balanceFlag": true,
        "waitPayAmount": 0
    },
    "respMsg": "success",
    "respCode": "200"
}

取出orderId和respMsg 只用一个表达式

答案:"orderId": "(.*?)"([\s\S]*)"respMsg": "(.*?)",

 1.7.2  调试后置处理程序 Debug PostProcessor

用于调试

放在取样器下面

查看结果树--响应数据,里面的JMeterVariables,要引用,都可以${变量名}的方式获取

1.7.3 jp@gc-JSON/YAML Path Extractor

1.7.3.1 符号说明

  • $,表示根节点
  • @,当前节点
  • .或者[]用于连接父子节点
  • ..深层扫描
  • *通配符
  • [?(表达式)]
  • [start:end],切片
  • ==~   正则匹配

1.7.3.2 获取数组下的第一个uuid

 1.7.3.3 获取前三个uuid和showname

1.7.3.4 深层扫描

1.7.3.5 获取数组中所有的uuid

1.7.3.6 根据条件获取值

1.7.3.7 根据部分数据获取值(正则模糊匹配)

 1.7.4 BeanShell后置处理程序

 

标签:1.7,匹配,详解,线程,组件,取样器,jmeter,取值
From: https://www.cnblogs.com/lgs-tech/p/17497166.html

相关文章

  • ASPX页面如何加载GAC中的组件?
    注意这里是ASPX页面而不是ASPX.cs代码页面引用GAC的组件;要ASPX页面引用GAC中的组件,则需要做下面两步:一、在machine.config中增加你的assembly:在<assemblies>节(在<configuration>/<system.web>/<compilation>/<compilers>/<assemblies>可以找到这个节)中增加下面......
  • jmeter入门简介
    1.引入1.1为什么要学习jmeter免费开源多系统兼容轻量级工具易用插件丰富功能强大接口功能测试接口自动化测试(jmeter+maven/ant+jenkins)接口性能测试与其他性能测试工具比较:apacheAB:不接受服务器返回数据,只返回code,比jmeter快,返回结果无意义loadrunner:商用......
  • k8s架构组件
    Kubernetes(K8s)是一个开源的容器编排平台,由多个核心组件组成,用于管理和编排容器化应用程序。以下是Kubernetes的主要架构组件:1.Master节点:Master节点是Kubernetes集群的控制平面,负责管理和监控整个集群。它包含以下组件:-KubernetesAPIServer:提供与Kubernetes集群交互的API......
  • 【vue3】实现el-tree组件
     禾小毅csdn博客【vue3】实现el-tree组件,将不同层级的箭头修改成自定义图标的组件封装及调用【vue3】实现简易的“百度网盘”文件夹的组件封装实现【vue3】实现公共搜索组件,在当前页搜索的路由跳转不能改变当前值的操作,使用bus/event-emitter派发器......
  • mysql超时参数详解
    1.mysql超时参数详解目录1.mysql超时参数详解1.1.分类1.1.1.连接、网络类超时1.1.2.connect_timeout:默认为10S1.1.3.wait_timeout:默认是8小时,即28800秒1.1.4.interactive_timeout:默认是8小时,即28800秒1.2.net_read_timeout:默认是30S1.2.1.net_write_timeout:默认是60S1.2......
  • MySQL性能压测工具SysBench详解(非常详细)
    MySQL性能压测工具SysBench详解(非常详细)概述掌握数据库的性能情况是非常必要的。本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法;基准测试与压力测试简介1、什么是基准测试数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可......
  • mysqlbinlog命令详解
    1.mysqlbinlog命令详解目录1.mysqlbinlog命令详解1.1.初步了解binlog1.1.1.binglog简介1.1.2.mysqlbinlog常见的选项1.1.3.binglog对性能的损耗1.1.4.binlog日志的使用场景1.1.5.常用的binlog日志操作命令1.1.5.1.查看所有binlog日志列表1.1.5.2.查看master状态1.1.5.3......
  • JAVA之树的详解
    JAVA之树的详解度:每一个结点的子节点数量树高:树的总层数根节点:最顶层的节点左子节点:左下方的节点右子节点:右下方的节点二叉查找树特点每一个节点上最多有两个子节点任意节点左子树上的值都小于当前节点任意节点右子树的值都大于当前节点添加节点规则小的存......
  • react学习,实现子组件监听父组件对像的变化
    我们可以结合useEffet,useRef,useState来实现子组件监听父组件对像的变化:import{useEffect,useRef,useState}from"react";interfaceMyProps={counter:number;};constMyChildComponent:React.FC<MyProps>=({counter})=>{constprevCounterRef=u......
  • HiveSQL在使用聚合类函数的时候性能分析和优化详解
    概述前文我们写过简单SQL的性能分析和解读,简单SQL被归类为select-from-where型SQL语句,其主要特点是只有map阶段的数据处理,相当于直接从hive中取数出来,不需要经过行变化。在非多个节点的操作上,其性能甚至不比Tez和Spark差。而这次我们主要说的是使用聚合类函数的hiveSQL,这类SQL需......