I have encountered a similar problem. I have a theory that the problem is because SoapUI doesn't want you to modify the project (add/remove model items such as requests, test steps, etc) in multiple threads at the same time, since internally the whole project is just one big xml document, and when I had the problem I was seeing in the error log "XmlDisconnectedException" whenever things were failing.
One potential solution is instead of cloning the TestRequests (in a TestCase), you just having GroovyTestSteps that submit existing Requests (inside the interface).
First, your script should set some variables in the TestRunContext to use in the request:
context.with {
username = "Login"
password = "Login123"
}
Your requests can use context variables directly:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.soapui.org/sample/">
<soapenv:Header/>
<soapenv:Body>
<sam:login>
<username>${username}</username>
<password>${password}</password>
</sam:login>
</soapenv:Body>
</soapenv:Envelope>
Then submit, making use of the current TestRunContext:
submitResult = context.testCase.project
.getInterfaceByName("ServiceSoapBinding")
.getOperationByName("login")
.getRequestByName("login rq")
.submit(context, false)
Now that you're using Requests rather than TestRequests, you can't use SoapUI's assertions any more, but you can still get hold of the response and make your own:
submitResult
.getResponse()
.getContentAsString()
.with { String response ->
new XmlSlurper()
.parseText(response)
.with {Envelope -> assert Envelope.Body.Fault.faultstring == "Already Login"}
}