当前位置: 首页 > 知识库问答 >
问题:

如何在SoapUI上下文中使用嵌套参数。展开表达式?

曾飞沉
2023-03-14

我的用例是,我想在多个SoapUI项目中对请求主体进行批量更新。

请求正文示例

{
 "name": "${#TestSuite#NameProperty}" 
 "id": "${#TestSuite#IdProperty}"
}

我想通过Groovy扩展属性${#TestSuite#NameProperty},并获取存储在TestSuite级别的值,然后根据需要对其进行修改。

假设我的测试用例中有50个测试步骤,我想从Groovy脚本中扩展每个步骤的请求。要展开特定的测试步骤,我将传递测试步骤的名称。例如:

expandedProperty = context.expand('${testStep1#Request}')

但是,如果我想迭代所有50个测试步骤,如何实现同样的效果?我尝试在上下文中使用嵌套参数。展开表达式,但它不起作用。例如:

currentTestStepName = "TestStep1"
expandedProperty = context.expand('${${currentTestStepName}#Request}')

这只返回了来自它正上方的测试步骤(我运行groovy脚本的位置)而不是“TestStep1”步骤的扩展请求。(这太疯狂了!)

还有上下文。expand似乎只在通过SoapUI工作区项目中的Groovy脚本执行时起作用。是否有和上下文类似的其他方式或方法。展开在无头执行期间,哪个可以展开诸如“${#TestSuite#NameProperty}”之类的属性?例如:在SoapUI中导入的groovy编译的jar文件。

提前感谢您的帮助!

共有1个答案

柳业
2023-03-14

您可以使用context.expand ('${${的当前TestStepName}#Request}')方式来获取它。

还有其他方法,不使用context.expand.

为了得到任何给定测试步骤的单个测试步骤请求:

这里用户将步骤名称传递给变量stepName

log.info context.testCase.testSteps[stepName].getPropertyValue('Request')

如果您想获得测试用例的所有请求,下面是使用以下脚本的简单方法。

/**
 * This script loops thru the tests steps of SOAP Request steps,
 * Adds the step name, and request to a map.
 * So, that one can query the map to get the request using step name any time later.
 */
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep
def requestsMap = [:]
context.testCase.testStepList.each { step ->
    log.info "Looking into soap request step: ${step.name}"
    if (step instanceof WsdlTestRequestStep) {
        log.info "Found a request step of required type "
        requestsMap[step.name] = context.expand(step.getPropertyValue('Request'))
    }
}
log.info requestsMap['TestStep1']

更新:如果您感兴趣的步骤是REST步骤,请使用下面的条件而不是上面的WsdlTestRequest estStep

if (step instanceof com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep) { //do the stuff }
 类似资料:
  • 问题内容: 如我们所知,通过使用方法将数组展平 那么如何将此数组展平到? 问题答案: 这是递归的一种替代方法,并且应接受任何深度级别,以避免堆栈溢出。

  • 在Javascript中调用顶级函数时,函数中的this关键字引用默认对象(如果在浏览器中,则为窗口)。我的理解是,这是作为方法调用函数的一种特殊情况,因为默认情况下,它是在窗口上调用的(如John Resig的书《JavaScript忍者的秘密》第49页所述)。实际上,下面代码中的两个调用是相同的。 到目前为止还不错...这是我不明白的部分: 当一个函数嵌套在另一个函数中并在未指定要调用的对象的

  • 正如标题所说,以下是一个输入示例: 当然,匹配的字符串将通过递归进行处理。 我希望第一个递归匹配: 之后的过程不用说。。。

  • 我在弄清楚如何从apache Olingo构建的uri中提取数据时遇到了问题。从$Expad中提取数据可以使用这种语法。 URI:OData/PropertyOrigin?$expand=Property1($select=field1);$expand=Property2($select=field1ofProperty2)) 但是,当我试图从第二个$Expand中获取数据时,我得到了一个对象空

  • 问题内容: 这是我的模型: User.java 我想建立一个这样的用户朋友表: users.jsf 由于用户很多,因此无法一次性转储用户表。 在这种情况下,数据表组件是理想的,因为它具有内置的分页支持。也是理想的,因为可以对列进行排序… 不幸的是,我无法通过Primefaces示例找到改变用户列行距的方法。 如何建立该数据表? 问题答案: 基于@Kerem的答案,这是我想出的解决方案: 为了使嵌套

  • 假设我们在JavaEE应用程序中有这些类,它们也是Hibernate实体: 在过去几年中,创建了一些Swing窗口,让配置器用户创建ad deploy DRools软件包规则,以自定义客户所需的工作流。这些窗口以某种方式将Swing组件转换为Drool Mvel文本,以避免配置程序用户编写原始代码。然后将这些规则保存并部署到BLOB字段中的DB表中,并在需要时执行。问题是,现在我们需要实现一个新的