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 ?
I managed to do what i want with the following code :
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-> //Recuperation de l'url du wsdl utilise pour la création du service def oldWsdlUrl = iface.definition //Récupération du nom du service SOAP def serviceName = iface.getName() //Debut de la MAJ de la definition du service log.info "Debut mise a jour du wsdl avec l'ancienne addresse : " + oldWsdlUrl //recuperation du nouveau endpoint du service String newEnpointUrl = context.expand(project.getActiveEnvironment().getSoapServiceByName(serviceName).getEndpoint().getConfig().getStringValue()); //Extraire domain du nouveau endpoint int slashslash = newEnpointUrl.indexOf("//") + 2; String newDomain = newEnpointUrl.substring(slashslash,newEnpointUrl.indexOf('/', slashslash)); //Remplacer le domain du wsdl par le nouveau correspondant à l'environnement slashslash = oldWsdlUrl.indexOf("//") + 2; String newWsdlUrl = oldWsdlUrl.substring(0,slashslash) + newDomain + oldWsdlUrl.substring(oldWsdlUrl.indexOf('/', slashslash)); //Mise a jour iface.updateDefinition( newWsdlUrl, false) //on force le renomage original iface.setName(serviceName) List<ModelItem> updated = new ArrayList<ModelItem>() updated.addAll(recreateRequests(iface, true, false, true, false)) log.info "Fin de la mise a jour du wsdl avec la nouvelle addresse : " + newWsdlUrl }
Thanks to @Nastya_Khovrina