使用中频控制器

Using IF controller

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

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

访问令牌过期后,将调用刷新令牌端点以生成新的访问令牌。(oauth2)。

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

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

JSR 223 Post 处理器

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,)}

您可以使用Module Controller and put your If Controller and JSR223 inside Test fragment进行重复使用

Module Controller provides a mechanism for substituting test plan fragments into the current test plan at run-time.

A test plan fragment consists of a Controller and all the test elements (samplers etc.) contained in it. The fragment can be located in any Thread Group. If the fragment is located in a Thread Group, then its Controller can be disabled to prevent the fragment being run except by the Module Controller. Or you can store the fragments in a dummy Thread Group, and disable the entire Thread Group.