Forum Discussion

sonya_m's avatar
sonya_m
Icon for Alumni rankAlumni
5 years ago
Solved

[TechCorner Challenge #11] Change Socket Timeout for HTTP requests using Groovy Script

Hi Community!🙂

Here's a new task for you to practice your skills of using the ReadyAPI tool.  Check out the participation rules and TechCorner Leaderboard here.

 

ReaydAPI allows you to set a global socket timeout value for HTTP requests through its preferences, however, there are times where this is not enough.

Some specific requests may require a different value to better suit your expectations for the test. In these cases, you can use a Groovy script to change the socket timeout value then change it back to its original value.

 

Task: Write a Groovy Script that will set socket timeout to a new value, then return it to the default value.

Difficulty

 

Good luck😊

  • I have learned that the operation works perfectly fine when I am at my home computer.

    The proxy settings I entered into SoapUI at my work computer don't seem to have a positive effect. Other developers here at my office have left those settings at their blank defaults.

    However, I KNOW it has to do with the security settings at my work's network.

    So, I finally got this to work, as others have pointed out, by saving the WSDL information to a local file. The steps I took were as follows:

    1. Entering the path into my Chrome (or any other) browser; in this case the url is:
      http://www.webservicex.com/currencyconvertor.asmx?WSDL
    2. Take the resultant browser output and save it as an XML file. "XML" is the default file extension. An extension of "WSDL" may be technically more accurate. You can do this by right-clicking in the browser window with the resultant WSDL information present and choosing "Save As...". Save the file to your local machine.
    3. After creating a new project in SoapUI, right-click the project and choose "Add WSDL".
    4. Enter the path to the saved XML file. SoapUI will correctly interpret the file and create the necessary information tree.
    5. The resultant SoapUI tree looks similar to the following:

     

     

3 Replies

  • Task: Write a Groovy Script that will set socket timeout to a new value, then return it to the default value.

     

    This is a solution created for [TechCorner Challenge #11]

     

    Hi sonya_m :

     

    I have came across two below solutions:

     

    1. As the challenge states to change particular Test Step Setting, below groovy can be useful:

     

     

    import com.eviware.soapui.SoapUI
    import com.eviware.soapui.settings.HttpSettings
    
    def testStep = testRunner.testCase.getTestStepByName("TEST__STEP__NAME");
    def testSettings = testStep.getSettings();
    def oldTime = testSettings.getString(HttpSettings.SOCKET_TIMEOUT,"");
    log.info "OLD TIMEOUT :: "+oldTime
    //setting new timeout
    testSettings.setString(HttpSettings.SOCKET_TIMEOUT,"120000");
    //save the settings
    SoapUI.saveSettings();
    
    log.info "NEW TIMEOUT :: "+testSettings.getString(HttpSettings.SOCKET_TIMEOUT,"");
    //revert back old timeout
    testSettings.setString(HttpSettings.SOCKET_TIMEOUT,oldTime);
    
    log.info "REVERT BACK TO OLD TIMEOUT :: "+testSettings.getString(HttpSettings.SOCKET_TIMEOUT,"");
    //save the settings
    SoapUI.saveSettings();
    

     

     

     

    2. If we want to modify global setting instead of particular test step setting, below groovy can be useful:

     

     

    import com.eviware.soapui.SoapUI
    import com.eviware.soapui.settings.HttpSettings
    
    //Get soapUI settings from preferences > HTTP Settings > Socket Timeout (ms)
    def settings = SoapUI.getSettings()
    //Set New time
    settings.setString(HttpSettings.SOCKET_TIMEOUT,"120000")
    //save the settings
    SoapUI.saveSettings();

     

     

    • sonya_m's avatar
      sonya_m
      Icon for Alumni rankAlumni

      groovyguy Thank you, that was a really fast answer! And, it works great, too.

       

      HimanshuTayal Awesome! Thank you for providing an alternative solution!

       

  • groovyguy's avatar
    groovyguy
    Community Hero

    Task: Write a Groovy Script that will set socket timeout to a new value, then return it to the default value.

     

    This is a solution created for [TechCorner Challenge #11]

     

    Here's what I managed to come up with 🙂

     

     

    import com.eviware.soapui.SoapUI;
    import com.eviware.soapui.settings.HttpSettings
    
    // Get test step reference.
    def testStep = context.testCase.testSteps["TestStep"];
    
    // Get the settings of the test step.
    def tsSettings =  testStep.getSettings();
    
    // Get the value of the current time out.
    def currentTimeOut = tsSettings.getString(HttpSettings.SOCKET_TIMEOUT, "");
    
    // Adjust the timeout.
    def newTimeOut = (currentTimeOut.toInteger() * 2).toString();
    
    // Show the current timeout value.
    log.info("The current Socket Timeout value is: " + tsSettings.getString(HttpSettings.SOCKET_TIMEOUT, ""));
    
    // Set to the new timeout.
    tsSettings.setString(HttpSettings.SOCKET_TIMEOUT, newTimeOut);
    
    // Show the timeout value has been adjusted.
    log.info("The adjusted Socket Timeout value is: " + tsSettings.getString(HttpSettings.SOCKET_TIMEOUT, ""));
    
    // Revert back to original timeout.
    tsSettings.setString(HttpSettings.SOCKET_TIMEOUT, currentTimeOut);
    
    // Show the timeout value is the original value. 
    log.info("Adjusted back to original timeout: " + tsSettings.getString(HttpSettings.SOCKET_TIMEOUT, ""));