testing - Jmeter - 如何在一个线程组中的所有线程的第一个请求中使用变量集
问题描述
我想只运行一次请求,并使用 Json 提取器从其响应中获取授权令牌,然后将该令牌用作在同一线程组下运行的另一个请求中的标头。
我尝试使用“设置线程组”,但变量值对主线程组不可用。所以,我在同一个线程组下使用了“ If Controller ”,条件如下:
${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1,)}
这使得特定请求只执行一次。但是,变量值仅适用于后续请求的一个线程,而不适用于所有线程。下面是结果树的图片:
我可以知道如何访问在所有线程的第一个请求中设置的变量值,而不仅仅是一个线程吗?
解决方案
根据JMeter 文档:
属性与变量不同。变量是线程本地的;属性对所有线程都是通用的
因此,如果您想对所有线程(虚拟用户)使用单个令牌,则需要首先将其转换为 JMeter 属性,例如:
- 在 If Controller 下使用__setProperty() 函数将变量转换为属性
- 在您的 GET 请求中使用__P() 函数读取属性值
在线程之间共享数据的另一种方法(即使它们位于不同的线程组中)是使用线程间通信插件
推荐阅读
- spring-boot - 使用外部 jar 中的 ControllerAdvice
- android - “符号表全局部分中的本地符号'__bss_start'”仅在Android NDK aarch64构建中
- javascript - 如何使用 JavaScript 在用户名和密码输入元素上添加“输入”事件侦听器?
- spring-cloud-dataflow - 组合任务属性
- css - 无法使表单控件透明
- ruby-on-rails - 使用参数初始化新对象失败,没有符号
- python-3.x - Pygame模块没有得到语法高亮
- scheme - Gimp Scheme 脚本:列表参数
- c - 如何以 root 和非交互方式运行 exec() 函数?
- html - 相对路径被破坏