jmeter常用功能介绍

目录


jmeter常用组件功能简介

  • 线程
    jmeter 线程 就是测试里面的一个用户环境,可以认为是一个线程是模拟的一个用户,前置处理器中的·用户信息·实际上就是给 指定变量设置不同线程不同值 (类似 ThreadLocal )。
  • 取样器
    用于获取数据,比如http请求,数据库查询,比如通过调试取样器查看当前所有变量/属性
  • 配置元件
    用于存配置,设置变量,存放数据库配置,http头文件,cookie,csv数据文件等
  • 前置/后置处理器
    取样器执行取样的前后可以做一些操作,比如初始化一些数据,比如把返回值存下来。
  • 断言
    判断返回值是否符合预期,是一种特殊的后置处理程序
  • 监听器
    得到报告,请求记录等信息
  • 逻辑控制器
    控制那些模块需要被使用,控制那些测试片段需要导入,控制是循环,分支(if)等等流程控制,变量一个数组(foreach)
  • 定时器
    用于让线程暂停指定时间(固定定时器),比如让100个用户同时请求一个接口(同步定时器),比如限制接口的吞访问频率10次每秒(吞吐量定时器)

一些基本按键说明

image-20240125184947657

创建一个http请求

jmete所有动作都必须在一个线程组里面发起。有了线程组才能创建采样请求

线程(用户),jmeter工具都在提示我们,这里的线程和用户类似,一个线程模拟的是一个用户的操作,并且不同线程之间变量是隔离的。只有全局变量才能跨线程(用户)使用

image-20240125171122814

有了线程组以后才能创建http请求

image-20240125171307637

一个请求大概是这样的

image-20240125172144588

添加参数

image-20240125172259036

添加header

添加-->配置元件-->http请求头管理器 添加

image-20240125172453259

定义http hearder

image-20240125173437268

定义了头所有请求都会使用这个头,头可以定义多个,都会生效

image-20240125172955882

使用变量

使用 添加-->配置元件-->用户定义的变量 添加用户变量配置文件,可以有多个这个配置文件,如果多个配置文件里面有key重复,下面的覆盖前面的
image-20240125173557783

定义变量

image-20240125173700978

使用变量:${变量名字)}
几乎任何位置都能使用变量

image-20240125173917722

jmeter的变量是线程隔离的,不同线程之间同一个变量可以有不同的值,设置为全局变量可以不同线程之间通用,不同线程组之间全局变量也是通用的

设置全局变量:${__setProperty( 全局变量名字 ,${变量名})}

取全局变量: ${__P(全局变量名字)}
你可以在后置bean shell 后置处理程序,前置处理程序等地方设置它(发送请求前后的一段处理脚本)

image-20240125174246475

全局变量(Property)

image-20240125225253752

image-20240125225346195

请求接口返回参数可以赋值给变量

image-20240125175223868

使用数据文件

效果相当于定义了几个变量,第一次运行读取的是第一行,第二次第二行,读完以后重头再来。

比如只有3行数据,这个请放在一个循环里面跑了5次,那么后2次用的第一行和第行数据。

image-20240125175435539

image-20240125175745079

断言

断言的目的是判断采样器取得结果是否符合预期,选择合适的断言方式

使用 添加-->断言 添加断言

image-20240125180454991

断言示例,你也可以选json断言,可以通过jsonPath语法对返回值是json格式的数据做判断

image-20240125180806116

采集器响应值提取

使用正则表达式提取器,或者接送提取器可以提取返回值中的数

image-20240125181011565

响应值赋值给变量

image-20240125175223868

查看请求结果

使用添加-->监听器-->查看结果树 可以看到请求记录,监听器里面别的组件还能看到汇总报告等等别的信息

image-20240125181247510

请求结果查看

image-20240125181424315

循环请求

循环控制是一个线程指定多次,而不是多线程执行

image-20240125181809588

简单的循环3次,这下面有个数据文件里面有3组测试数据,所以这里循环3次

image-20240125181847237

使用多线性请求

如果线程组设置的多个线程,那么就是每个线程把测试计划都跑一边,不是一个线程跑一段

循环次数就是每个线程跑测试计划的次数。ramp-up 是指多少之间内启动这些线程,线程少直接设置0.

前面创建请求前,第一个添加的就是线程组,线程组是执行用例的基础,可以理解为线程池

image-20240125182158609

测试片段

测试片段的效果是分模块的编写测试计划。比如一个项目由 购物车逻辑,用户中心,商品 三个部分组成。

张三做了 购物车的测试计划,李四做了用户中心,王二做了商品测试计划。分别测试以后可以把他们合起来跑。

添加测试片段

image-20240125183449457

测试片段里面可以包含测试计划

image-20240125183533115

早本地我们通过模块控制器来指定那个片段需要运行(一个测试片段就是一个模块)

image-20240125183753028image-20240125183643416

测试片段可以导出

合并可以把指定的测试片段加入到当前测试计划,加入以后当前测试计划内创建的测试片段一样,可以通过 模块控制器指定运行。
image-20240125183932057

测试片段的引用

image-20240125184320740

指向别人给你的测试片段

image-20240125184405556

连接数据库取值

测试中需要校验的数据部分来自测试用例,可以通过数据文件导入,还有些数据来自数据库需要和数据库做对比

添加数据库驱动包

image-20240125192031756

添加 数据库连接配置

image-20240125192158532

配置数据库连接池

image-20240125192435308

添加一个数据库连接请求

取样器,或者数据的都在这里面,比如http请求,比如数据库查询

image-20240125192525622

sql 查询请求的内容

image-20240125192849139

数据已经放在变量里面了,在http请求和响应都可以用的上

可以在后可以通过调试取样器查看当前的变量,属性

image-20240126011722452

调用操作命令行取值

取数据都是添加取样器

image-20240125200959077

配置os进程取样器

运行命令:wmic logicaldisk get size,freespace,caption 可以查看磁盘信息
image-20240125201257553

image-20240125201212707

取到的结果

image-20240125201326708

函数助手

可以看到有那些函数,函数参数,也可以在这里测试函数

函数助手对话框打开位置

image-20240125224244306

函数调用格式

${__functionName(var1,var2,var3)},无参函数可以写作 ${__functionName}

image-20240125224201964

jmeter默认不支持函数嵌套,如果要取数组下边,并且下标是变量,这时候就需要__V的函数嵌套效果

${data_${n}} 这样嵌套是不支持的, 需要写成__V(data_${n})__V() 代替了 ${}

http代理服务器抓包

别的设备连接这个代理地址就能抓到http包

image-20240126141039685

Bean shell

实际就是Java代码片段,并且拥有适配 jmeter 环境的一些变量,语法和Java一样,可以通过jar包导入别的类库

  • bsh.args #bean shell 参数数组

    log.info(bsh.args[0]);
    
  • log

    log.info(bsh.args[0]);
    
  • vars

    //获取字符串类型数据获取
    vars.get("domain");		
    
    //对字符串类似修改
    int adultNum = 8;
    vars.put("adultNum",adultNum.toString());	
    
    
    //非字符串类型获取
    vars.getObject("personInfo");
    
    //设置非String类型的值
    List list = new ArrayList();
    list.add("a");
    list.add('b');
    list.add("c");
    vars.put("list", list);			//将list对象放至到jmeter的list变量中
    
    
    
    
    
  • props jmeter的全局变量 用法和 var类似

  • ctx 上下文对象

    //SampleResult需要import对象
    import org.apache.jmeter.samplers.SampleResult;
    
    SampleResult result = ctx.getPreviousResult();					//getPreviousResult()返回SampleResult对象
    String RequestHeaders = result.getRequestHeaders();			//getRequestHeaders()方法返回请求headers字符串
    String ResponseHeaders = result.getResponseHeaders();		//getResponseHeaders() 返回响应headers字符串
    String responseCode = result.getResponseCode();					//getResponseCode() 返回响应状态码字符串
    URL url = result.getURL();															//getURL() 返回请求URL对象
    
    
  • prev 等同于 ctx.getPreviousResult()

    String ResponseData = prev.getResponseDataAsString();			//getResponseDataAsString()返回响应文本
    String RequestHeaders = prev.getRequestHeaders();			//getRequestHeaders()方法返回请求headers字符串
    String ResponseHeaders = prev.getResponseHeaders();		//getResponseHeaders() 返回响应headers字符串
    String responseCode = prev.getResponseCode();					//getResponseCode() 返回响应状态码字符串
    URL url = prev.getURL();															//getURL() 返回请求URL对象	
    String urlStr = prev.getUrlAsString();								//getUrlAsString() 返回请求URL字符串
    
    

jmeter多机协作

一控制机多执行机模式

控制机 配置,打开bin/目录下的 jmeter.properties 文件

server.rmi.ssl.disable=true  #关闭ssl证书
remote_hosts=192.168.124.129,192.168.124.130     #远程主机地址
server_port=1099                           #服务端口(以供远程连接),需要运行jmeter-server才生效


编辑从机节点(执行机)的 jmeter.properties 文件,然后运行jmeter-server

server.rmi.ssl.disable=true    #关闭ssl证书
server.rmi.localport=1001      #本地端口
server_port=1099               #服务端口

image-20240126185546461

如果执行的脚本有 本地文件引用(csv文件,数据库驱动等),需要保持执行机上也有对应的文件,否者无法执行

jmeter后台运行脚本

jmeter -n -t 功能演示测试计划.jmx -l log.csv -e -o F:\tools\export

参数

  • -n 无归运行
  • -t 脚本位置 指定脚本位置
  • -l 日志文件位置 指定输出的日志文件,需要日志文件是空
  • -e 生成报表
  • -o 输出报表位置 需要输入位置是空
#如下异常,java版本的问题,我用的 jmeter不支持java17
Error generating the report: org.apache.jmeter.report.dashboard.GenerationException: Error while processing samples: Consumer failed with message :Consumer failed with message :Consumer failed with message :Consumer failed with message :Begin size 0 is not equal to fixed size 5

--P()__property()区别

--P() 是 __property() 的简化版,获取属性值,但是不能获取值的时候把值赋值给另外一个变量

jmeter的日志

默认日志文件位置 bin/jmeter.log

image-20240126191528156

posted on 2024-01-24 10:36  zhangyukun  阅读(164)  评论(0编辑  收藏  举报

导航