Forum Discussion

Raven25's avatar
Raven25
New Contributor
2 years ago
Solved

Add test step name and project name to header SOAP test

Hi!

 

I'm pretty new to testing so still figuring everything out the best I can ðŸ˜€

 

I was wondering is someone could help me out with the following dilemma:

To make my life a bit easier, I want to add the name of the teststep (and possibly the project name as well) to the header of a SOAP request (and response).

How can I make that happen? I've been experimenting with Event handlers and have tried the following (of which I'm quite sure is totally wrong ðŸ˜…)

 

Can someone point me in the right direction? Thanks in advance!! ðŸ˜Š

  • Hi Raven25,

    The approach you have chosen definitely makes sense.

     

    To modify the test step headers, you should use TestRunListener.beforeStep. Also, you will be able to use the testStep variable. You can look at the following script and accommodate it for your needs.

     

    import com.eviware.soapui.support.types.StringToStringMap 
    import com.eviware.soapui.impl.support.http.HttpRequestTestStep

    if (testStep instanceof HttpRequestTestStep) {
    testRequest = testStep.testRequest

    // Create new headers map
    def headers = new StringToStringMap()
    // Copy existing headers
    testRequest.requestHeaders.each { headers.put(it.key, it.value[0])}
    // Add TestStep Name
    headers.putIfAbsent("x-Testing-TestStep", testStep.getName())

    testRequest.setRequestHeaders(headers)
    }

     

    Best regards,

    Karel

     

5 Replies

  • KarelHusa's avatar
    KarelHusa
    Champion Level 3

    Hi Raven25,

    The approach you have chosen definitely makes sense.

     

    To modify the test step headers, you should use TestRunListener.beforeStep. Also, you will be able to use the testStep variable. You can look at the following script and accommodate it for your needs.

     

    import com.eviware.soapui.support.types.StringToStringMap 
    import com.eviware.soapui.impl.support.http.HttpRequestTestStep

    if (testStep instanceof HttpRequestTestStep) {
    testRequest = testStep.testRequest

    // Create new headers map
    def headers = new StringToStringMap()
    // Copy existing headers
    testRequest.requestHeaders.each { headers.put(it.key, it.value[0])}
    // Add TestStep Name
    headers.putIfAbsent("x-Testing-TestStep", testStep.getName())

    testRequest.setRequestHeaders(headers)
    }

     

    Best regards,

    Karel

     

    • hnicolaij's avatar
      hnicolaij
      New Contributor

      Hi Karel,

      I tried (copy paste of your code) this and got the following ClassCastException:

      Caused by: java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
      at com.eviware.soapui.support.types.StringToStringsMap.<init>(StringToStringsMap.java:55)
      at com.eviware.soapui.impl.support.AbstractHttpRequest.setRequestHeaders(AbstractHttpRequest.java:514)

       

      Any ideas ?

       

      Kind regards, Heymen