Error: Stack trace: java.lang.ClassNotFoundException: customMethods.DatabaseMethods

Hello, I’m pretty new on test automation / Katalon.
I’m try to create a test case where it is performed a query on data base looking for a given text. The custom keyword for data base connection that I’ve create seems to be working fine, but in the test case I’m getting the below error.

Can anyone help me please?

(…)

09-20-2018 08:37:49 AM - [START] - Start action : Statement - queryResult = CustomKeywords.customMethods.DatabaseMethods.executeQuery(“SELECT 1 FROM [NAMSLogDev].[dbo].[uLogEntry] where Transaction_Id in (select MAX(transaction_id)from [NAMSLogDev].[dbo].[uLogEntry]) and Class=1 and Log_Text like ‘%NAMST%’”)

09-20-2018 08:37:49 AM - [ERROR] - customMethods.DatabaseMethods

09-20-2018 08:37:49 AM - [END] - End action : Statement - queryResult = CustomKeywords.customMethods.DatabaseMethods.executeQuery(“SELECT 1 FROM [NAMSLogDev].[dbo].[uLogEntry] where Transaction_Id in (select MAX(transaction_id)from [NAMSLogDev].[dbo].[uLogEntry]) and Class=1 and Log_Text like ‘%NAMST%’”)

09-20-2018 08:37:49 AM - [ERROR] - Test Cases/New Test Case FAILED because (of) (Stack trace: java.lang.ClassNotFoundException: customMethods.DatabaseMethods

at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:677)

at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:787)

at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:775)

at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.getCustomKeywordClassAndSetMetaClass(CustomKeywordDelegatingMetaClass.java:96)

at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:41)

at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)

at Script1536943761578.run(Script1536943761578.groovy:12)

at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:183)

at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:108)

at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:294)

at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:285)

at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:264)

at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:256)

at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:200)

at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:99)

at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:90)

at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)

at TempTestCase1537443446530.run(TempTestCase1537443446530.groovy:22)

at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:263)

at groovy.lang.GroovyShell.run(GroovyShell.java:518)

at groovy.lang.GroovyShell.run(GroovyShell.java:507)

at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653)

at groovy.ui.GroovyMain.run(GroovyMain.java:384)

at groovy.ui.GroovyMain.process(GroovyMain.java:370)

at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129)

at groovy.ui.GroovyMain.main(GroovyMain.java:109)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)

at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)

)

09-20-2018 08:37:49 AM - [END] - End Test Case : Test Cases/New Test Case

Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook

Picked up _JAVA_OPTIONS: -Xbootclasspath/a:“C:\Program Files (x86)\HPE\Unified Functional Testing\bin\java_shared\classes\jasmine.jar”

Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook

==========

The test case is this one:

import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject

import java.sql.ResultSet as ResultSet

import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS

WS.sendRequest(findTestObject(‘New Request’))

CustomKeywords.‘com.database2.SqlConnection.connectDB’(‘131.97.222.220’, ‘1433’, ‘NAMSLogDev’, ‘NAMS’, ‘n87gX3S’)

//Execute our query

ResultSet queryResult = CustomKeywords.‘customMethods.DatabaseMethods.executeQuery’(‘SELECT 1 FROM [NAMSLogDev].[dbo].[uLogEntry] where Transaction_Id in (select MAX(transaction_id)from [NAMSLogDev].[dbo].[uLogEntry]) and Class=1 and Log_Text like \’%NAMST%\‘’)

//Move the cursor in the ResultSet table to the first row

queryResult.next()

//Save the result as a string

String valueFromDatabase = queryResult.getString(1)

//Print our result from the database as a string to the console

println(valueFromDatabase)

CustomKeywords.‘com.database2.SqlConnection.closeDatabaseConnection’()

Can you also post how your Keyword is looking like?
since it seems when you call CustomKeywords.‘com.database2.SqlConnection.connectDB’ is working, but CustomKeywords.‘customMethods.DatabaseMethods.executeQuery’ is not recognized

Hi, yes:

package com.database2

import java.sql.DriverManager

import java.sql.ResultSet

import java.sql.Statement

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.Driver;

import com.kms.katalon.core.annotation.Keyword

public class SqlConnection {

private static Connection connection = null;

@Keyword

def connectDB(String server, String port, String dbname, String username, String password){

String url = “jdbc:sqlserver://” + server + “:” + port + “;databaseName=” + dbname + “;user=” + username + “;password=” + password

if(connection != null && !connection.isClosed()){

connection.close()

}

connection = DriverManager.getConnection(url)

return connection

}

@Keyword

def executeQuery(String queryString) {

Statement stm = connection.createStatement()

ResultSet rs = stm.executeQuery(queryString)

return rs

}

@Keyword

def closeDatabaseConnection() {

if(connection != null && !connection.isClosed()){

connection.close()

}

connection = null

}

@Keyword

def execute(String queryString) {

Statement stm = connection.createStatement()

boolean result = stm.execute(queryString)

return result

}

}

Try…

CustomKeywords.'com.database2.SqlConnection.executeQuery'( ... )

It’s a question for you why you were using the unknown customMethods.DatabaseMethods construct.

Russ Thomas said:

Try…

CustomKeywords.'com.database2.SqlConnection.executeQuery'( ... )

It’s a question for you why you were using the unknown customMethods.DatabaseMethods construct.

It worked! Thanks!!
I’ was using a piece of the code that I found in another topic, did not know that was another way to use this command.

Thanks again.