首页 > 解决方案 > 使用中频控制器

问题描述

我想在每个 HTTP 请求之前检查一个条件。

我有一个访问令牌和一个刷新令牌。

一旦访问令牌过期,就会调用刷新令牌端点来生成新的访问令牌。(oauth2)。

因此,在每次 HTTP 请求之后,我都想检查访问令牌是否已过期。如果我在每个 HTTP 请求之后添加一个 jmeter IF 控制器,就可以实现这一点。有没有办法全局设置 IF 控制器(在每个请求之前不检查)。

我使用 JSR223 后处理器检查到期时间,并根据结果执行 IF 控制器。我想全局设置这个 IF 控制器以避免重复。

JSR 223 后处理器

import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.jmeter.util.JMeterUtils;


SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
long expiryTime = sdf.parse(vars.get("expiry_time")).getTime();
long currentTime = sdf.parse(vars.get("time")).getTime();
long timeleft = currentTime - expiryTime;
vars.putObject("isExpired",timeleft);

每个 HTTP 请求之前的 IF 控制器条件

${__jexl3(${isExpired}>0,)}

标签: jmetercode-duplicationjsr223

解决方案


您可以使用Module Controller并将您的 If Controller 和 JSR223 放在Test 片段中以供重用

模块控制器提供了一种在运行时将测试计划片段替换为当前测试计划的机制。

测试计划片段由控制器和其中包含的所有测试元素(采样器等)组成。片段可以位于任何线程组中。如果片段位于线程组中,则可以禁用其控制器以防止片段在模块控制器之外运行。或者您可以将片段存储在虚拟线程组中,并禁用整个线程组。


推荐阅读