我正在尝试使用在进行调用之前通过“令牌请求”中的 POST 调用检索到的访问令牌来建立 JDBC 连接。然后,我在 JDBC 连接配置中使用
accessToken=${__property(access_token)}
来检索它。但是,即使正确检索了令牌(我使用调试器进行了检查),JDBC 调用在第一次运行时始终会失败,但在以后的任何调用中都会成功运行。对于连续运行,我运行完全相同的脚本而不做任何更改,并且它有效。再次重启JMeter会导致第一次运行失败。
根据这篇文章,这是因为 JDBC 连接配置是在设置任何其他变量/属性之前初始化的,这是有道理的。但是,无论我尝试什么,我都无法在分配令牌后强制 JDBC 连接配置初始化。有办法做到吗?
我尝试将 JDBC 连接配置和 JDBC 调用放在单独的线程组中,并在测试计划中勾选“连续运行线程组”。我还尝试将 JDBC 连接配置放入 While 控制器中,该控制器仅在属性“access_token”不为空后运行。此外,我尝试用
__property()
替换 __P()
。
要解决在 JMeter 中设置访问令牌属性后初始化 JDBC 连接配置的问题,您可以按如下方式构建测试计划:
线程组 1 - 令牌检索: 使用 HTTP 请求采样器将令牌检索逻辑放置在此线程组中。从响应中提取访问令牌并使用 props.put("access_token", ExtractedToken) 将其存储为 JMeter 属性。
线程组2-主要测试逻辑: 在此线程组中创建 JDBC 连接配置和 JDBC 请求采样器。确保 JDBC 连接配置使用 ${__P(access_token)} 引用访问令牌属性。
同步定时器: 向线程组 2 添加一个同步计时器,并将其配置为等待指定数量的线程(例如,将其设置为等待一个线程),然后再继续。这可确保线程组 2 仅在线程组 1 中设置访问令牌属性后启动。
通过以这种方式组织测试计划并使用同步计时器,您可以确保 JDBC 连接配置在分配访问令牌属性后初始化,从而避免执行顺序问题并启用成功的 JDBC 调用。