jmeter基础知识小笔记(容易忘记的)

jmeter基础测试

jmeter元件执行顺序

1、配置元件
2、前置处理器
3、定时器
4、sampler
5、后置处理器(关联,正式表达式提取器)
6、断言
7、监听器

Jmeter语言版本中英文切换
1、控制台修改
menu -> options -> choose language
2、配置文件修改
bin目录 -> jmeter.properties
默认 #language=en
改为 language=zh_CN

jmter环境变量配置

注:在安装Jmeter之前,请先检查下电脑有没有装JDK:开始->运行->然后输入cmd->进入命令行界面,输入java -version , 出现以下信息就是此电脑已安装了JDK
image.png
如果没有,需要安装JDK,官网上下载即可
Java环境配置

变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_51 (即jdk安装的位置)
变量名:Path (这个变量名已在系统变量中存在,现只需在这个值的前面添加以下变量值就可以了)
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
变量名:CLASSPATH
变量值:.;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jar(记住前面的.)

jmeter环境配置

新建:JMETER_HOME=D:\apache-jmetes\apache-jmeter-4.0(jmeter安装位置)
CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;
PATH=%JMETER_HOME%\bin

最后在cmd输入jmeter 直接打开 如图
image.png

jmeter响应数据中中文乱码问题
Jmeter安装目录/bin/jmeter.properties中sampleresult.default.encoding默认为ISO-8859-1,将参数修改为
sampleresult.default.encoding=utf-8 即可
同时注意将注释符号#去掉,否则不会生效
image.png

参数化构造技巧

如何构建唯一ID?

使用多个函数组合:{group}+{thread number}+{迭代计数}
group:由于JMeter支持多个Group,所以要考虑多个Group的情况,于是我们把线程组编号也纳入组合中

thread number:线程Number,组中的线程Number是唯一 的,group+thread number能够保证线程号唯一

迭代计数:每个线程都有一个迭代计数量,记录脚本运行了多少次

{group}+{thread number}+{迭代计数} 就可以保证生成一个唯一号,如果觉得不够长可以加上time({time}+{group}+{thread number}+{迭代计数} )

${__BeanShell(((ctx.getThread().getThreadName().toString()).split(" ")[1]).split("-")[0],group)}-》线程组的Id放在group中

其他的thread number,time,迭代计数器通过函数助手获取,如:迭代计数器:__counter

合在一起:${__time(hhmmss,)}${group}${__threadNum}${__counter(,)}名称中直接用了BeanShell函数,在此可以触发截取group。
image.png
image.png
image.png

构造未来时间和过去时间

函数助手里面的time函数是当前时间,就不适用了,使用BeanShell函数,代码如下:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

try{
	//获取当期那日期
	Date date = new Date();  
	SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
	String nowDate = sf.format(date);   
	
	Calendar cal = Calendar.getInstance();  
	cal.setTime(sf.parse(nowDate));  
	//当前时间往后面+3天
	cal.add(Calendar.DAY_OF_YEAR, +3);  
	String chanceDate = sf.format(cal.getTime());   
	cal.add(Calendar.DAY_OF_YEAR, +7);
	String planFinishDate = sf.format(cal.getTime());
	vars.put("orderDate",chanceDate);
	vars.put("delivery",planFinishDate);
	}
	catch (Exception e)
	{
	String orderDateate="";
	String planFinishDate="";
	vars.put("orderDate",orderDateate);
	vars.put("delivery",planFinishDate);
		}

image.png
image.png

运行结果

关联

关联是一种动态行为,用以后续的请求(比如HTTP请求)从之前的请求(比如JDBC Request)的的查看结果器—>响应数据(服务器返回的数据)中直接使用指定的数据。

如:HTTP请求—>HTTP请求。某个用户(调用登陆接口)登录成功后服务器会返回一个登录凭证比如防止csrf攻击而生成的account_token,之后的操作比如修改密码接口、发布信息等都需要带上此凭证。我们怎么获取登录凭证并传递给后续的HTTP接口请求呢,可用的方法就是关联。
登录后获得的account_token
登录后获得的account_token
使用正则表达式提取器,提取account_token
使用正则表达式提取器,提取account_token
使用debug sampler获取关联参数
使用debug sampler获取关联参数
在接下来的接口信息头管理器中关联此参数
在接下来的接口信息头管理器中关联此参数
后面的接口请求成功
后面的接口请求成功

集合点

模拟并发,使虚拟用户在需要压力的地方等一等

添加synchronizing timer
设置筹齐5个点就请求

线程数改成10个

这是全部sampler都会按照集合点要求请求,如果想只是作用于某一个,可以将synchronizing timer放在该sampler下面
image.png

控制器

1、条件控制器(if)
添加条件判断
image.png
2、循环控制器
image.png
3、吞吐量控制器

序号线程数循环次数模式throughput(吞吐量)per user执行次数
1210percent50Y10
2210percent50N10
3210total7Y14
4210total7N7
522total7Y4
622total7N4

如下图:

序号线程数循环次数模式throughput(吞吐量)per user执行次数
4210total7N7

image.png
image.png

image.png
4、for each控制器
image.png
image.png
image.png

JDBC

数据库驱动类和URL格式:

DatebaseDriver classDatabase URL
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host:port/{dbname}
PostgreSQLorg.postgresql.Driverjdbc:postgresql:{dbname}
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name}(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))

JDBC select

image.png
image.png
image.png
image.png

JDBC update:prepared update statement(进行参数化)
image.png

image.png

image.png

JDBC callable(存储过程)
新建存储过程:
image.png
image.png
image.png
image.png

jmeter非GUI操作

jmeter非GUI下命令参数

-h 帮助 -> 打印出有用的信息并退出

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-J 是设置本地jmeter属性,引用变量参数

-G 是设置server的jmeter属性

-l 日志文件 -> 记录结果的文件

-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器

-H 代理主机 -> 设置 JMeter 使用的代理主机

-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

image.png
image.png
非GUI参数化
image.png
image.png
image.png

场景设计
右键测试计划->添加->Threads(Users)->jp@gc - Stepping Thread Group
image.png
l This group will start Max threads - 设置单台负载机,线程组启动的线程总数为Max个

First,wait for N seconds - 启动第一个线程之前,需要等待N秒
Then start N threads - 设置最开始时启动N个线程
Next add N1 threads every N2 seconds, using ramp-up N3 seconds - 然后,每隔N2秒,在N3秒内启动N1个线程
Then hold load for N seconds - 单台负载机启动的线程总数达到Max之后,持续运行N秒
Finally,stop N1 threads ervery N2 seconds - 最后,每隔N2秒,停止N1个线程数

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值