在测试步骤定义中定义外化的groovy文件

时间:2017-07-05 07:31:19

标签: soapui

我希望将我的常规脚本外部化为文件。而不是

<con:testStep type="groovy" name="Init" id="ba3d9999-6cf7-4697-ac71-2472a61f16fc">
    <con:settings/>
    <con:config>
        <script>log.info "[ isr::CallbackController::Init ] "</script>
    </con:config>
</con:testStep>

我更喜欢这样的事情:

<con:testStep type="groovy" name="Init" id="ba3d9999-6cf7-4697-ac71-2472a61f16fc">
    <con:settings/>
    <con:config>
        <script file="path/to/my.groovy"/>
    </con:config>
</con:testStep>

1 个答案:

答案 0 :(得分:2)

我认为SOAPUI目前不支持,也许您可​​以向它添加功能请求:)。

但与此同时,以下棘手的解决方法可能对您有用。

我的目的是创建一个groovy脚本testStep,它从文件中读取你的脚本,动态创建一个groovy testStep,用文件内容设置脚本,执行这个新的动态创建的testStep,最后删除它以便它可以多次运行。请参阅以下脚本:

import com.eviware.soapui.impl.wsdl.teststeps.registry.GroovyScriptStepFactory

// read the file with your script
File f = new File('path/to/my.groovy')

def tc = testRunner.testCase
// create a empty groovy testStep in the current testCase
def groovyTS = tc.addTestStep( GroovyScriptStepFactory.GROOVY_TYPE, "Groovy testStep dinamic" )

// set the file script as a content
groovyTS.properties["script"].value = f.text

// run the the created testStep with your script
groovyTS.run(testRunner,context)

// once runned delete it
tc.removeTestStep(groovyTS)

正如@Rao在评论中注意到的,也许这是一种简单的方法,只需在 groovy脚本testStep 中使用evaluate

evaluate(new File('path/to/my.groovy'))

首先,我避免使用此选项来考虑上下文变量的可能问题,例如testRunnercontextlog ...我使用选项创建 groovy testStep < / em>使它尽可能与SOAPUI方式相似。但是,使用evaluate似乎是一个非常好且更容易的解决方法。