Groovy - SoapUI - 更新请求标头 - 无法创建If语句

时间:2016-11-03 08:31:28

标签: groovy http-headers soapui

我正在SoapUI中创建一个测试项目,需要执行以下操作:

  • 我有一个" Token"带有1个测试用例的测试套件具有:3个步骤,为3种不同类型的用户(查看器,管理员,编辑器)生成令牌,然后是一个带有令牌头的Groovy脚本测试步骤,并将其添加到所有测试用例中套件。
  • 对于某些测试,我想在测试步骤中添加额外的标题,但我不想删除已经分配的标记标题。

我创建了这个脚本:

import groovy.json.JsonSlurper;
import com.eviware.soapui.support.types.StringToStringMap;

//Get through all the test steps in the project
testRunner.testCase.testSuite.project.testSuites.each {
    suite ->
        suite.getValue().testCases.each {
            q1 ->
                q1.getValue().testSteps.each {
                    it ->
                        if (it.getValue().config.type.equals("restrequest")) {
                            //Get the headers of the current teststep
                            def headers = it.getValue().getHttpRequest().getRequestHeaders()

                            //Append the new header to the existing list
                            headers.put("Header A", "Value A");
                            headers.put("Header B", "Value B");
                            headers.put("Header C", "Value C");
                            //Set the updated header list 
                            it.getValue().getHttpRequest().setRequestHeaders(headers)
                        }
                }
        }
}

此脚本将Headers更新为我想要的所有测试用例,但也将Headers添加到" Token"测试套件并打破它。

我想添加" IF"将检查的声明:如果测试套件名称不包含"令牌"添加额外的标头。如果它包含" Token"保持原状。我在项目中首先使用令牌测试套件,因此在自动调用它时(通过Bamboo)它会生成令牌,从而生成其他测试用例的标题。

我尝试了很多东西,但我的Groovy技能很业余,总是会导致错误。你能建议一个解决方案吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

就像你指出的那样,在你的情况下套件名称不是Token时会有一个if条件。

这是脚本,很少重构/ groovified:

import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep

//Define your suite name to ignore
def suiteToIgnore = 'Token'


//Get Project
def project = testRunner.testCase.testSuite.project

project.testSuiteList.each { suite ->
    if (suiteToIgnore != suite.name) {
        suite.testCaseList.each { kase ->
            kase.testStepList.each { step ->
                if (step instanceof RestTestRequestStep) {
                    //Get the headers of the current teststep
                    def headers = step.httpRequest.requestHeaders
                    //Append the new header to the existing list
                    headers.put("Header A", "Value A");
                    headers.put("Header B", "Value B");
                    headers.put("Header C", "Value C");
                    //Set the updated header list 
                    step.httpRequest.requestHeaders = headers
                }
            }
        }
    }
}