Ask a Question

Update definition with active environment

SOLVED
ancm
Occasional Contributor

Update definition with active environment

I am trying to update interface definition of my soap services with this script  : 

 

import static com.eviware.soapui.impl.wsdl.actions.iface.UpdateInterfaceAction.recreateRequests
import static com.eviware.soapui.impl.wsdl.actions.iface.UpdateInterfaceAction.recreateTestRequests
import com.eviware.soapui.model.ModelItem
import com.eviware.soapui.impl.wsdl.WsdlRequest
import com.eviware.soapui.model.iface.Request
import com.eviware.soapui.impl.wsdl.WsdlInterface
import com.eviware.soapui.model.iface.Operation
import com.eviware.soapui.impl.wsdl.WsdlOperation
import com.eviware.soapui.impl.wsdl.actions.*


def project = testRunner.testCase.testSuite.project
def ifaceList = project.getInterfaceList()

//Mise a jour de toutes les interfaces
ifaceList.each{
iface->
def url = iface.definition
log.info iface.getClass()
def oldName = iface.getName()
log.info "Début mise à jour de l'interface : " + iface.getName() + " avec url : " + url
try {
iface.updateDefinition( url, false)
}catch(exception){
log.error exception.description
}

log.info "Interface mise à jour"
iface.setName(oldName)
List<ModelItem> updated = new ArrayList<ModelItem>()
updated.addAll(recreateRequests(iface, true, false, true, false))
}

 

It works fine except that this doesn't take into account the environment i choose. It keeps updating with the same endpoint url and doesn't override it with my environment endpoint.

 

How can i modify this script to do an updateDefinition based on the environment ?

13 REPLIES 13
TanyaYatskovska
SmartBear Alumni (Retired)

Hi @ancm,

 

I guess this behavior (selecting an active environment) depends on how exactly you run a test. There are several ways of specifying the environment: on the ReadyAPI control bar or in the script. You can try adding the environment name in the script:

// Replace the project and environment names with those you need

def proj = testRunner.testCase.project.workspace.getProjectByName("Sample Project")
proj.setActiveEnvironment("Test Environment")
---------
Tanya Yatskovskaya
SmartBear Community and Education Manager



ancm
Occasional Contributor

Nothing changes with this piece of code

TanyaYatskovska
SmartBear Alumni (Retired)

Hmmm. Community, we need your help.

@nmrao@groovyguy@avidCoder ?

---------
Tanya Yatskovskaya
SmartBear Community and Education Manager



nmrao
Champion Level 3

Sorry, can't go thru the code.

How about using Project level custom properties if something you got stuck with and like to proceed?


Regards,
Rao.
ancm
Occasional Contributor

In fact the whole purpose of this script is to perform an update definition of the service according to the chosen environment before running all tests.

 

The problem is that the url i get with "def url = iface.definition" is the one specified during the import of the soap project not the one corresponding to the environment.

 

I think What i need is to change the  definition URL according to the environment i choose before doing an update

 

image.png

 

I dont know if this is even possible to do it programmatically 

nmrao
Champion Level 3

Just reading the statement "How can i modify this script to do an updateDefinition based on the environment ?" -

I believe that, wsdl definition will be same irrespective of environment except the url. Isn't it?


Regards,
Rao.
ancm
Occasional Contributor

Yes it is

ancm
Occasional Contributor

Nobody seems to have a solution i guess the product cannot do it

Nastya_Khovrina
SmartBear Alumni (Retired)

Hi @ancm,

 

I've checked your code. When you define the following in your code:

def url = iface.definition 

you get the WSDL URL. Please see the screenshot:

 

ReadyAPI_2019-03-13_09-48-06.png

 

As @nmrao  said this URL doesn't depend on an environment. This URL is defined on a service level.

 

If you need to update the definition based on the currently selected environment, you need to change the "url" value in your code before doing this:

iface.updateDefinition( url, false)

Now, you're using the same URL.

 

You can get the Endpoint of the active environment with this code:

project.getActiveEnvironment().getSoapServiceByName("Test_serviceSoap").getEndpoint().getConfig().getStringValue()

Note: don't forget to change the Test_serviceSoap value in the script to your actual Service name:

 

ReadyAPI_2019-03-13_12-06-40.png


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others. ⬇️⬇️⬇️
cancel
Showing results for 
Search instead for 
Did you mean: