6

ReadyAPI“语义分析”错误。我已将脚本库存储在 bin 文件夹中,并getBuildingInfo从 ReadyAPI 的 groovy 测试脚本中调用该方法。大多数情况下,此方法工作正常,但偶尔会出现此错误。我想找出确切的问题并解决根本原因。我在eclipse中测试了代码,它工作得很好。

错误:错误!源单元“Script15.groovy”中的“语义分析”阶段异常 查找 PropertiesQuery 导致编译失败。此调用不应该进行任何编译。漏洞!源单元“Script15.groovy”中的“语义分析”阶段异常 查找 PropertiesQuery 导致编译失败。此调用不应该进行任何编译。

14:在静态范围内发现表观变量“数据库”,但不引用局部变量、静态字段或类。可能的原因:您试图引用绑定中的变量或静态上下文中的实例变量。您拼错了类名或静态导入的字段。请检查拼写。您尝试使用方法“数据库”,但在语法不允许的位置遗漏了括号。@ 第 14 行,第 17 列。 def dbConn = Database.getDbConnection(env);

public class Database {

public static Connection getDbConnection (String env){

    Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver")

    switch (env){
        case "TEST":
            conn = DriverManager.getConnection("a","b","c")
            break;
        case "DEV":
            conn = DriverManager.getConnection("a","b","d")
            break;
    }

    return conn;
}

public static void closeDbConnection(Connection conn) {

    conn.close();
}
}  


class PropertiesQuery {
    public static String getBuildingInfo(String env, String id, int row ){
        String result = "111";


        def query = "SELECT col1, col2 FROM tabl1 WHERE id = 1"

        def dbConn =  Database.getDbConnection(env);
        def stmt = dbConn.createStatement()
        def rs = stmt.executeQuery(query);

        while(rs.absolute(row)){
            rs.getString("col1")
            rs.getString("col2")

            result = rs.getString("col1") +"/"+rs.getString("col2")
            return result;
        }
    }   
}
4

1 回答 1

1

我有我自己的用于返回 SQL 连接的 Groovy 脚本。我没有命名驱动程序,而是使用 Groovy SQL 包....

哦,在连接到我的机器上的数据库时有一个问题。不确定这是否是一个更广泛的问题,但我有它并在此处的其他地方提到过。当我启动 SoapUI 时,我无法运行使用数据库连接的测试,因为它失败了。我要做的是进入环境屏幕,选择我的一个连接,然后单击“测试连接”按钮。之后,我可以运行任何测试。这很奇怪,但在我的机器上似乎单击测试连接只会将空气从管道中吹出......

导入 groovy.sql.Sql

类 jdbcConnections {

jdbcConnections() {

}

def getJdbcConnection(conDetails, log) {

    def connString = conDetails.getConnectionString()
    def url = 'jdbc:oracle:thin:' + connString.substring(connString.indexOf('@'),connString.size());
    def userName = connString.replace('jdbc:oracle:thin:', '');
    userName = userName.substring(0,userName.indexOf('/'));
    def password = connString.substring(connString.indexOf('/') + 1,connString.indexOf('@'));

    log.info('      Connecting to database ' + conDetails.getName() + '.  Using account ' + userName + ' at URL ' + url );

    return Sql.newInstance(url, userName, password, conDetails.getDriver());

}

def getJdbcConnection(conDetails)
{
    def connString = conDetails.getConnectionString()
    def url = 'jdbc:oracle:thin:' + connString.substring(connString.indexOf('@'),connString.size());
    def userName = connString.replace('jdbc:oracle:thin:', '');
    userName = userName.substring(0,userName.indexOf('/'));
    def password = connString.substring(connString.indexOf('/') + 1,connString.indexOf('@'));

    return Sql.newInstance(url, userName, password, conDetails.getDriver());
}

}

我传入的连接详细信息来自环境/JDBC 连接屏幕。

于 2017-09-20T12:27:00.183 回答