Contributions
Re: Groovy Datasource fails after several runs
I would prefer to use a JSON datasource. The problem was I had three separate teststep responses that I wanted to aggregate into one datasource. Is there a way to do this other than a groovy datasource?8 years agoPlace ReadyAPI QuestionsReadyAPI Questions2KViews0likes0CommentsGroovy Datasource fails after several runs
I have a Groovy Datasource that combines the responses from several previous http requests into a single datasource. It works great the first few times that the test is run but after a few times it starts failing and generates a NullPointerException. If I restart SoapUI it starts working again for a few runs. The error log: Thu Sep 29 10:42:41 MDT 2016:ERROR:java.lang.NullPointerException java.lang.NullPointerException at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.setVariable(SoapUIGroovyScriptEngine.java:146) at com.eviware.soapui.impl.wsdl.teststeps.datasource.GroovyDataSource.next(GroovyDataSource.java:73) at com.eviware.soapui.impl.wsdl.teststeps.WsdlDataSourceTestStep.c(WsdlDataSourceTestStep.java:586) at com.eviware.soapui.impl.wsdl.teststeps.WsdlDataSourceTestStep.b(WsdlDataSourceTestStep.java:565) at com.eviware.soapui.impl.wsdl.teststeps.WsdlDataSourceTestStep.a(WsdlDataSourceTestStep.java:752) at com.eviware.soapui.impl.wsdl.teststeps.WsdlDataSourceTestStep.next(WsdlDataSourceTestStep.java:762) at com.eviware.soapui.impl.wsdl.panels.teststeps.DataSourceDesktopPanel$TestAction.actionPerformed(DataSourceDesktopPanel.java:520) at com.eviware.soapui.impl.wsdl.panels.teststeps.DataSourceDesktopPanel$TestAction.actionPerformed(DataSourceDesktopPanel.java:1) at com.eviware.soapui.impl.wsdl.actions.iface.AbstractSwingAction.actionPerformed(AbstractSwingAction.java:62) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) My Datasource code: import groovy.json.JsonSlurper def responseOne = context.expand( '${Request One#Response}' ) def responseOneJson = new JsonSlurper().parseText(responseOne) def responseTwo = context.expand( '${Request Two#Response}' ) def responseTwoJson = new JsonSlurper().parseText(responseTwo) def responseThree = context.expand( '${Request Three#Response}' ) def responseThreeJson = new JsonSlurper().parseText(responseThree) //verify the slurper isn't empty assert !(responseOneJson.isEmpty()) && !(responseTwoJson.isEmpty()) && !(responseThreeJson.isEmpty()) def row = testRunner.testCase.testSteps["Data Source"].currentRow def numOfRows = 5 def responseOneSize = responseOneJson.value.size() def responseTwoSize = responseTwoJson.value.size() def responseThreeSize = responseThreeJson.value.size() if((row + 1) <= numOfRows){ // output to the test step property in the result map result["Id One"] = responseOneJson.value[row % responseOneSize].id result["Id Two"] = responseTwoJson.value[row % responseTwoSize].id result["Id Three"] = responseThreeJson.value[row % responseThreeSize].id }8 years agoPlace ReadyAPI QuestionsReadyAPI Questions2KViews0likes3Comments