Jmeter——如何使得token在各线程组间引用的游刃有余
在以前的博文中,有介绍过,jmeter基本的关联,关联就是将参数在各接口中动态传参,使得接口脚本变得灵活使用,非一次性脚本。今天再来介绍一种jmeter全局变量的设置与使用,可以让脚本运用更丰富,场景覆盖更广。
应用场景
在做性能测试或多业务场景测试时,将多个业务写在多个线程组中,但都是一个正常的流程。全程只需登录一次,这时就需要设置全局变量来实现。我们也知道,只将token提取并设置为一个普通变量的话,是不能实现跨线程组调用的。跨线程组调用,只能引用全局变量。
使用场景
前置处理器BeanShell PreProcessor
使用前置处理器BeanShell PreProcessor,编写如下代码:
通过vars.put()方法,将a1的值写入到token中

在信息头中,引用该参数如下,使用的是__P()函数,__P()是一个简化的属性函数,用于与命令行上定义的属性一起使用。

运行脚本,查看数据,在运行日志中查看token

在请求头中查看token数据

后置处理器BeanShell PostProcessor
使用后置处理器BeanShell PostProcessor,编写代码如下:

在线程组2中的信息头里引用如下

执行脚本,查看数据

__setProperty(,,)函数
在后置处理器中,使用__setProperty(,,)函数,函数介绍如下:
该函数用于设置 JMeter 属性的值。
函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
通过将函数可选的第3个参数设置为"true",函数就会返回属性的原始值。
属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信。
在后置处理器中,编写代码如下:

在线程组2中的信息头中引用如下:
__property函数是用于获取属性值
示例:
${__property(department.id)} 返回 department.id 的值。
${__property(department.id,UUID)} 返回 department.id 的值,并保存在变量 UUID 中。
${__property(abcd,ABCD,atod)} 返回属性 abcd 的值,如果该属性未定义则返回 atod,并保存在变量 ABCD 中。
${__property(abcd,,atod)} 返回属性 abcd 的值,如果该属性未定义则返回 atod,不保存结果值。

运行脚本,查看结果

参数化跨线程传参
使用后置处理器BeanShell PostProcessor,将登录获取到的token,写入到文件中,并引用csv元件进行参数化。这种方式稍微麻烦点,但还是能够满足跨线程调用参数的,后置处理器中的参考代码如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileWriter;
import java.io.BufferedWriter; String filePath = System.getProperty("user.dir") + "/login.txt";
log.info(System.getProperty("user.dir") + "/login.txt" );
vars.put("filePath",filePath);
File file = new File(filePath); try {
if (file.exists()){
file.delete();
}
file.createNewFile();
FileWriter fs = new FileWriter(filePath,true);
BufferedWriter bw = new BufferedWriter(fs); String token=vars.get("accessToken");
log.info("写入的token:" + token);
bw.write(token);
bw.write(System.getProperty("line.separator"));
fs.flush();
bw.close();
fs.close(); }catch(IOException e) {
e.printStackTrace();
}
csv的参数配置,这里就不赘述了,可以查看以前的博文,有详细介绍。
在线程组2中引用csv元件,读取保存到文件中的token,csv配置如下:

在信息头中引用token,配置如下:

我们来运行脚本,查看下运行结果,是否成功?
看如下截图,日志打印写入到文件中的token与线程组2请求传递的token是一样的,脚本运行成功,实现了token跨线程的调用。

再来看下保存到文件中的token,如下:

注意
需要注意的是,多个线程间,将参数配置成了全局变量,但运行还是会报错,线程组间的接口请求乱序。此时,检查下测试计划里的配置,有个独立运行线程组的配置,如下所示。

Jmeter——如何使得token在各线程组间引用的游刃有余的更多相关文章
- jmeter 发送加密请求 beanshell断言 线程组间传递参数
原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密接口,请求头的uid参数及body的请求json参数都经过加密再发送请求, ...
- Jmeter线程组间传递参数
现在做测试和以前不太一样了,以前只要站在一个用户的角度做端到端的UI测试就可以了,现在不会做接口测试,出去都不好意思和别人打招呼.那提到接口测试,就不得不提一下接口测试利器Jmeter,大家也都知道, ...
- 转 2 jmeter常用功能介绍-测试计划、线程组
2 jmeter常用功能介绍-测试计划.线程组 1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...
- JMeter 不同线程组间变量传递
JMeter元件都是有作用域的,而变量大多使用正则表达式提取器,要想在不通过线程组件使用变量参数,则需要设置全部变量 JMeter函数助手就提供了一个函数用于设置全局变量属性,实现的功能类似于在用户自 ...
- JMeter 不同线程组间变量传递(亲测 ok)
JMeter元件都是有作用域的,而变量大多使用正则表达式提取器,要想在不通过线程组件使用变量参数,则需要设置全部变量 JMeter函数助手就提供了一个函数用于设置全局变量属性,实现的功能类似于在用户自 ...
- Jmeter系列(7)- 基础线程组Thread Group
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Thread Group基础线程组介绍 ...
- Jmeter系列(11)- 并发线程组Concurrency Thread Group详解
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Concurrency Thread ...
- 2 jmeter常用功能介绍-测试计划、线程组
1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添加一些系统常用的配置.如果测试过程中想切换环境,切换 ...
- jmeter之线程组间变量的传递二
1.线程组设置先后顺序 2.获取正则匹配值 3.设置全局属性 4.其他线程组使用该全局属性 5.调试查看结果方式
随机推荐
- CF-1117C-Magic Ship
二分 C - Magic Ship GNU C++11 Accepted 31 ms 1700 KB #include "bits/stdc++.h" using namespac ...
- python中coding:utf-8的作用
或者
- 吴裕雄--天生自然 R语言开发学习:图形初阶(续二)
# ----------------------------------------------------# # R in Action (2nd ed): Chapter 3 # # Gettin ...
- Nginx的四层和七层代理
理论部分: 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,它一般走的是tcp,udp协议 所谓七层负载均衡,也称为“内 ...
- SpringBoot + JPA + mariadb
SpringBoot + JPA + MariaDB 源码:https://github.com/ldl326308/LiveGreen-SpringBoot.git JPA持久层方法名命名规则:
- <SCOI2009>粉刷匠の思路
emm.dp真的是写不来啊难过 不边写边注释我就挂了 #include<cstdio> #include<cstring> #include<iostream> # ...
- numpy的基础计算2
import numpy as np A = np.arange(14,2,-1).reshape((3,4)) #平均值 print(np.mean(A)) print(A.mean()) prin ...
- Jquery 实现原理深入学习(3)
前言 1.总体结构 √ 2.构建函数 √ 3.each功能函数实现 √ 4.map功能函数实现 √ 5.sizzle初步学习 6.attr功能函数实现 7.toggleClass功能函数实现(好伤) ...
- java design pattern - adapter pattern
场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B ...
- IO和流
I/O和流 I/O是Input和Output的缩写 从读写设备,包括硬盘文件,内存,键盘输入,屏幕输出,网路 输入输出"内容"(字节或文本) 流是对输入输出设备的一种抽象 从流中读 ...