Forum Discussion
ibridge
12 years agoOccasional Contributor
I'm still struggling with this problem. When changing the active environment, the default connect information seems to be used. The problem occurs when using a DataSource (WsdlDataSourceTestStep) that uses an environment specific JDBC connection. When manually trying "TestConnection" in the DataSource, it works, and after that it keeps working. Unfortunately that's not a workable situation as the tests are being executed on a CI (Jenkins) server...
I've tried the following code, in the "TestRunListener.beforeRun" event, to workaround the problem:
The connectionString and password values are correct, but still it uses the default connect settings. As changing the default JDBC connect settings makes it work again.
I've tried the following code, in the "TestRunListener.beforeRun" event, to workaround the problem:
// Get first databaseName.
databaseName = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionAt(0).getName()
log.info "Found databaseName: " + databaseName
// Get connectionString of active environment.
connectionString = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionByName(databaseName).getConnectionString()
log.info "Found connectionString: " + connectionString
// Iterate all test steps in the test case and change connectionString for all ProJdbcRequestTestStep to the selected environment connectionString.
for(testStep in context.testCase.getTestStepList())
{
// Set the connectionString for all ProJdbcRequestTestStep and WsdlDataSourceTestStep
if(testStep instanceof com.eviware.soapui.impl.wsdl.teststeps.ProJdbcRequestTestStep)
{
// Get databaseName
def databaseName = testStep.getJdbcRequestTestStepConfig().getDbConnectionName()
// Get connectionString of active environment
def connectionString = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionByName(databaseName).getConnectionString()
testStep.setConnectionString(connectionString)
// Get connection password of active environment
def connectionPassword = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionByName(databaseName).getPassword()
testStep.setPassword(connectionPassword)
}
else if(testStep instanceof com.eviware.soapui.impl.wsdl.teststeps.WsdlDataSourceTestStep)
{
if(testStep.getDataSource() instanceof com.eviware.soapui.impl.wsdl.teststeps.datasource.DBDataSource)
{
// Get databaseName
def databaseName = testStep.getDataSource().getDbConnectionName()
// Get connectionString of active environment
def connectionString = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionByName(databaseName).getConnectionString()
testStep.getDataSource().setConnectionString(connectionString)
// Get connection password of active environment
def connectionPassword = context.testCase.testSuite.project.activeEnvironment.databaseConnectionContainer.getDatabaseConnectionByName(databaseName).getPassword()
testStep.getDataSource().setPassword(connectionPassword)
}
}
}
The connectionString and password values are correct, but still it uses the default connect settings. As changing the default JDBC connect settings makes it work again.