【问题标题】:Possible JMeter bug when using JDBC Connection over SSH?通过 SSH 使用 JDBC 连接时可能出现 JMeter 错误?
【发布时间】:2022-01-17 03:25:42
【问题描述】:

我需要对 pgbouncer 执行负载测试。在建立与数据库的数据库连接(通过 pgbouncer)之前,所有客户端都会执行 SSH 隧道。是这样的:

sshpass -p 'MY_PSW' ssh -o StrictHostKeyChecking=no -N -L LOCAL_PORT:127.0.0.1:63666 PGBOUNCER_USER@PGBOUNCER_ADDRESS -p PORT >/dev/null 2>&1 &

我的Jmeter项目目前有三个线程组:

  1. 设置线程组:我在其中连接到不同的数据库以选择随机用户名和架构

  2. 查询线程组:我在其中使用前一个用户(使用 props.put("schema", vars.get("schema_1")); 进入 BeanShell 断言成为属性)和查询执行 JDBC 连接

  3. TearDown Thread Group:我在其中关闭了 ssh Tunnel。

现在每次我从 GUI 运行测试时,进入查询线程组的数据选择(JDBC 请求)都会给我一个错误:

Cannot create PoolableConnectionFactory (FATAL: "trust" authentication failed)

之后,如果我再次运行测试,一切正常。我用调试采样器检查了变量和属性的内容,一切都是正确的。

当我在没有 GUI 的情况下运行测试时,主要问题就开始了。它总是因为那个错误而失败。

我实际上不喜欢我必须使用 OS Process Sampler 来建立运行命令的 SSH 隧道,但我找不到任何更好的解决方案。 SSH隧道是测试的一部分,JMeter的主/从配置我不需要它。

非常感谢您提供解决方案或建议以使这项工作正常进行。谢谢。

【问题讨论】:

    标签: postgresql jmeter ssh-tunnel pgbouncer


    【解决方案1】:

    如果您在 OS Process Sampler 中使用该命令,它会在后台运行,因此我的预期是 OS Process Sampler 会立即返回 SampleResult 并且隧道尚未启动。

    然后,当“查询线程组”按照JMeter Test Elements execution order JDBC 连接配置启动时,尝试使用未完全建立的本地端口建立连接。该问题在非 GUI 模式下可重现的事实可能证实了我的猜测,因为 JMeter 在非 GUI 中工作得更快,因为它不需要浪费时间和资源来刷新 GUI 并将示例结果传播给听众。

    我的期望是,如果您将 Flow Control Action 采样器添加到 setUp 线程组并将其配置为“睡眠”几秒钟,它应该可以解决您的问题。如果没有 - 通过将下一行添加到 log4j2.xml 文件来尝试 increasing JMeter logging verbosity for the JDBC Test Elements

    <Logger name="org.apache.jmeter.protocol.jdbc" level="debug" />
    

    并比较jmeter.log file 中“成功”和“失败”执行的条目。

    【讨论】:

    • 首先感谢您的帮助。第一种方法(添加流控制操作)不起作用。但是添加调试帮助我找到了问题。第一次运行测试时,我将值放入 setUp 线程组的属性实际上并不包含值。其实这是错误信息:2021-12-14 10:23:46,338 DEBUG oajpjcDataSourceElement: Driver: org.postgresql.Driver DbUrl: jdbc:postgresql://127.0.0.1:50539/JB7 User: sshUser 在最后是属性的名称而不是值。但我不明白我该如何解决这个问题。
    【解决方案2】:

    好的,我设法找到了解决方案。感谢 Dmitri T 回答,我可以跟踪问题,这是关于属性设置不正确的问题。

    我使用 BeanShell 断言在 setUp 线程组中的 JDBC 请求结果之后设置属性。显然,BeanShell 断言是在整个运行结束时执行的,因此最后设置的属性。在第一次执行期间,该属性为空。

    我改用了 Beanshell 采样器,现在它可以工作了。

    【讨论】:

      最近更新 更多