在Java / beanshell代码中操作JMeter JDBC连接字段

时间:2016-04-21 20:29:48

标签: java jdbc jmeter beanshell

这是Using a JMeter JDBC connection in Java code的后续内容。如何在DataSourceElement类中使用getPassword()或getUsername等方法?我想从JDBC连接配置配置中获取然后修改用户名和密码(以及其他内容)。

我在该帖子中使用相同的代码,但是在beanshell采样器中(最终将在预处理器元素中使用)。我认为问题是我需要一个DataSourceElement对象并且只定义了一个Connection对象。那是我被困的地方。

我的代码:

import java.sql.Connection;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;
print("\nbeanshell script beginning");

try {
        Connection con = DataSourceElement.getConnection("jdbcconfig");
        print(con);
        String conpasswd = con.getPassword();
        print(conpasswd);
        if(con!=null)
        con.close();
}

catch (Throwable ex) {
    log.error("Something went wrong: ", ex);
}

print("the end");

jmeter.log返回:

ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval   Sourced file: inline evaluation of: ``import java.sql.Connection; import org.apache.jmeter.protocol.jdbc.config.DataSo . . . '' : Typed variable declaration : Error in method invocation: Method getPassword() not found in class'com.sun.proxy.$Proxy0'

控制台输出返回连接对象,然后在错误处停止:

beanshell script beginning
org.postgresql.jdbc4.Jdbc4Connection@7849e2a7

1 个答案:

答案 0 :(得分:1)

可以使用DatabaseMetaData类获取一些连接信息,如:

import java.sql.Connection;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;
import java.sql.DatabaseMetaData;

Connection con = DataSourceElement.getConnection("jdbcconfig");
DatabaseMetaData meta = con.getMetaData();
String conusername = meta.getUserName();
print(conusername);

但我认为您将能够以这种方式获取密码,因为这种能力会带来巨大的安全风险。

顺便说一句,您可以通过将Beanshell代码包含在try / catch块中,在 jmeter.log 文件中获得更友好的异常消息,如:

try {
    //your code here
}
catch (Throwable ex) {
    log.error("Something wrong", ex);
    throw ex;
}

有关使用Beanshell测试元素中的JMeter和Java API的更多信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component