如何使用 Soap 编写项目中可用的所有 Soap 请求 UI Groovy

how to write all Soap Request available in Project using Soap UI Groovy

我有一个带有 4 个测试套件的 soap 项目,每个测试套件都有一些测试用例,每个测试用例都有一些测试步骤[Soap 请求,Groovy 脚本] 我可以使用下面提到的代码访问所有属性,但是,代码正在本地系统中写入空白 request/response 文件 **

def Project = testRunner.testCase.testSuite.project;
for(def i=0;i<Project.testSuiteCount;i++)
{
log.info Project.getTestSuiteAt(i).name 
def Suite = Project.getTestSuiteAt(i)
  for(def j=0;j<Suite.testCaseCount;j++)
  {  
   log.info Suite.getTestCaseAt(j).name
   def TCase = Suite.getTestCaseAt(j)
    for(def k=0;k < TCase.testStepCount;k++)
    {
    def TStep= TCase.getTestStepAt(k)
    def req =  context.expand('${'+TStep.name+'#Request}')
    new File("D:/Directory/"+Suite.name+"_"+TCase.name+"_"+TStep.name+"_"+k+".txt").write( req )
    }
  }
}

** 请帮忙解决这个问题,**

实际上有多种方法可以实现这一点。 以下是其中一种方法。

这里是Groovy Script,它写了请求和响应。

此脚本假定用户已经 运行 测试套件,以便可以保存响应。

创建一个新的测试套件->测试用例->添加Groovy脚本测试步骤并复制以下脚本进去。

Groovy 脚本:

/**
* This groovy script saves the request and response
* And this script will be able to write the responses
* into files if and only if there is response available
**/
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep

//Change direcoty path if required
def directoryToSave = 'D:/directory'

//Not required to change the script beyond this point

//date time is appended to the file name
def dt = new Date().format('yyyyMMdd_HHmmss')

//Closure to save the file
def saveToFile(file, content) {
    if (!file.parentFile.exists()) {
         file.parentFile.mkdirs()
         log.info "Directory did not exist, created"
    }
    if (content) {
        log.info "Writing the content into file :${file.name}"
    file.write(content) 
    assert file.exists(), "${file.name} not created"
    } else {
        log.warn "the content is empty, not writing the content into file"
    }
}

//Get the project object
def project = context.testCase.testSuite.project

//Loop thru the project and save the request and responses
project.testSuiteList.each { suite ->
    suite.testCaseList.each { kase ->
                kase.testStepList.each { step ->
            if (step instanceof WsdlTestRequestStep) {
                def reqFilePath = new File("${directoryToSave}/${suite.name}_${kase.name}_${step.name}_request${dt}.xml")   
                def resFilePath = new File("${directoryToSave}/${suite.name}_${kase.name}_${step.name}_response${dt}.xml")  
                saveToFile(reqFilePath, step.testRequest.requestContent)
                saveToFile(resFilePath, step.testRequest.responseContent)
saveToFile(step)
            } else {
                log.info "Ignoring as the step type is not Soap request"
            }
        }
    }
}