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.调试查看结果方式
随机推荐
- 翻转链表和k个一组翻转以及两两反转
一.输入一个链表,输出反转后的链表. 非递归实现: # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.v ...
- 如何有效地报告Bug
英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
- idea(or maven) 未结束字符串字面值 非法的表达式开始
[ERROR] *.java:[38,27] 未结束的字符串字面值 [ERROR] *.java:[38,53] 需要 ';' [ERROR] *.java:[41,19] 需要 ')' [ERROR ...
- Luogu_1966_火柴排队
题目描述 涵涵有两盒火柴,每盒装有\(n\)根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum (a_i-b_i)^2 ...
- 将js进行到底:node学习7
Node.js之Websocket技术 我第一次听说websocket之时,HTML5标准尚未公布,当时只有少数前瞻性浏览器携带了这个API. 我对websocket最大的印象是,他可以解决我对&qu ...
- Flume 实战练习
前期准备 了解Flume 架构及核心组件 Flume 架构及核心组件 Source : 收集(指定数据源从哪里获取) Channel : 聚集 Sink : 输出(把数据写到哪里去) 学习使用 Flu ...
- windows7 64位系统下无法运行ipython
windows7 64位系统下无法运行ipython | Creator 导航 导航 博客 分类 标签 友链 关于 大专栏 windows7 64位系统下无法运行ipythontent-post L ...
- 收费的QQ群 改变的不只是所谓的在线教育
改变的不只是所谓的在线教育" title="收费的QQ群 改变的不只是所谓的在线教育"> 如果说国内互联网企业中最会捞钱的,腾讯敢认第二,恐怕没有其他的企业敢认第一 ...
- Android中的路径记录
Android中的路径记录 | RobinBlog 导航 导航 博客 分类 标签 友链 关于 搜索 Environment.getDataDirectory().getPath()=/dataEnvi ...
- python通用读取vcf文件的类(可以直接复制粘贴使用)
前言 处理vcf文件的时候,需要多种切割,正则匹配,如果要自己写其实会比较麻烦,并且每次还得根据vcf文件格式或者需要读取的值不同要修改相应的代码.因此很多人会选择一些python的vcf的库,但 ...