目录

  • jmeter常用组件功能简介
  • 一些基本按键说明
  • 创建一个http请求
  • jmete所有动作都必须在一个线程组里面发起。有了线程组才能创建采样请求
  • 有了线程组以后才能创建http请求
  • 一个请求大概是这样的
  • 添加参数
  • 添加header
  • 定义http hearder
  • 定义了头所有请求都会使用这个头,头可以定义多个,都会生效
  • 使用变量
  • 定义变量
  • 全局变量(Property)
  • 请求接口返回参数可以赋值给变量
  • 使用数据文件
  • 断言
  • 使用 添加-->断言 添加断言
  • 断言示例,你也可以选json断言,可以通过jsonPath语法对返回值是json格式的数据做判断
  • 采集器响应值提取
  • 使用正则表达式提取器,或者接送提取器可以提取返回值中的数
  • 响应值赋值给变量
  • 查看请求结果
  • 使用添加-->监听器-->查看结果树 可以看到请求记录,监听器里面别的组件还能看到汇总报告等等别的信息
  • 请求结果查看
  • 循环请求
  • 循环控制是一个线程指定多次,而不是多线程执行
  • 简单的循环3次,这下面有个数据文件里面有3组测试数据,所以这里循环3次
  • 使用多线性请求
  • 前面创建请求前,第一个添加的就是线程组,线程组是执行用例的基础,可以理解为线程池
  • 测试片段
  • 添加测试片段
  • 测试片段里面可以包含测试计划
  • 早本地我们通过模块控制器来指定那个片段需要运行(一个测试片段就是一个模块)
  • 测试片段可以导出
  • 测试片段的引用
  • 指向别人给你的测试片段
  • 连接数据库取值
  • 添加数据库驱动包
  • 添加 数据库连接配置
  • 配置数据库连接池
  • 添加一个数据库连接请求
  • sql 查询请求的内容
  • 可以在后可以通过调试取样器查看当前的变量,属性
  • 调用操作命令行取值
  • 取数据都是添加取样器
  • 配置os进程取样器
  • 取到的结果
  • 函数助手
  • 函数助手对话框打开位置
  • 函数调用格式
  • http代理服务器抓包
  • Bean shell
  • jmeter多机协作
  • jmeter后台运行脚本
  • --P() 和 __property()区别
  • jmeter的日志

jmeter常用组件功能简介

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

一些基本按键说明

jmeter常用功能介绍_线程组

创建一个http请求

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

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

jmeter常用功能介绍_字符串_02

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

jmeter常用功能介绍_字符串_03

一个请求大概是这样的

jmeter常用功能介绍_字符串_04

添加参数

jmeter常用功能介绍_测试计划_05

添加header

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

jmeter常用功能介绍_字符串_06

定义http hearder

jmeter常用功能介绍_字符串_07

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

jmeter常用功能介绍_线程组_08

使用变量

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

jmeter常用功能介绍_字符串_09

定义变量

jmeter常用功能介绍_线程组_10

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

jmeter常用功能介绍_字符串_11

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

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

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

jmeter常用功能介绍_线程组_12

全局变量(Property)

jmeter常用功能介绍_线程组_13

jmeter常用功能介绍_字符串_14

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

jmeter常用功能介绍_测试计划_15

使用数据文件

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

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

jmeter常用功能介绍_测试计划_16

jmeter常用功能介绍_测试计划_17

断言

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

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

jmeter常用功能介绍_测试计划_18

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

jmeter常用功能介绍_字符串_19

采集器响应值提取

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

jmeter常用功能介绍_字符串_20

响应值赋值给变量

jmeter常用功能介绍_测试计划_15

查看请求结果

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

jmeter常用功能介绍_测试计划_22

请求结果查看

jmeter常用功能介绍_测试计划_23

循环请求

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

jmeter常用功能介绍_线程组_24

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

jmeter常用功能介绍_线程组_25

使用多线性请求

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

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

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

jmeter常用功能介绍_线程组_26

测试片段

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

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

添加测试片段

jmeter常用功能介绍_测试计划_27

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

jmeter常用功能介绍_线程组_28

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

jmeter常用功能介绍_字符串_29

jmeter常用功能介绍_字符串_30

测试片段可以导出

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

jmeter常用功能介绍_字符串_31

测试片段的引用

jmeter常用功能介绍_测试计划_32

指向别人给你的测试片段

jmeter常用功能介绍_线程组_33

连接数据库取值

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

添加数据库驱动包

jmeter常用功能介绍_字符串_34

添加 数据库连接配置

jmeter常用功能介绍_线程组_35

配置数据库连接池

jmeter常用功能介绍_字符串_36

添加一个数据库连接请求

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

jmeter常用功能介绍_测试计划_37

sql 查询请求的内容

jmeter常用功能介绍_测试计划_38

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

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

jmeter常用功能介绍_测试计划_39

调用操作命令行取值

取数据都是添加取样器

jmeter常用功能介绍_线程组_40

配置os进程取样器

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

jmeter常用功能介绍_测试计划_41

jmeter常用功能介绍_线程组_42

取到的结果

jmeter常用功能介绍_线程组_43

函数助手

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

函数助手对话框打开位置

jmeter常用功能介绍_字符串_44

函数调用格式

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

jmeter常用功能介绍_线程组_45

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

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

http代理服务器抓包

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

jmeter常用功能介绍_测试计划_46

Bean shell

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

  • bsh.args #bean shell 参数数组
log.info(bsh.args[0]);
  • 1.
  • log
log.info(bsh.args[0]);
  • 1.
  • 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变量中
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 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对象
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 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字符串
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

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才生效
  • 1.
  • 2.
  • 3.

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

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

jmeter常用功能介绍_字符串_47

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

jmeter后台运行脚本

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

参数

  • -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
  • 1.
  • 2.

--P()__property()区别

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

jmeter的日志

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

jmeter常用功能介绍_测试计划_48