【问题标题】:soapUI: property not used in property expansion in a test casesoapUI:测试用例中未用于属性扩展的属性
【发布时间】:2011-03-17 15:27:15
【问题描述】:

我正在使用soapUI 3.6.1,我想测试一个具有如下测试结构的SOAP接口:

MyWorkspace
    MyProject
        TestSuite
            TestCase Single
                TestStep 1
            TestCase Loop
                Properties #1
                Groovy #1
                Run TestCase Single
                Properties #2
                Groovy #2
                Run TestCase Single

TestCase Single 包含一堆应使用相同帐户 ID 执行的请求。 TestCase Loop 应该使用不同的帐户 ID 调用 TestCase SingleProperties * 应该更改帐户 ID。

MyProject 有一个属性 accountId 设置为值 1234。这应该作为测试用例的单个测试的默认值,即 TestCase Single

Properties #1Properties #2 使用不同的值指定了 accountId

目的是允许TestStep 1 单独执行或作为TestCase Loop 的一部分执行。

TestStep 1 有一个共同的 SOAP 主体,其中以下是发送到 Web 服务的参数:

     <accId>${='${#accountId}' != '' ? '${#accountId}' : ${#Project#accountId}}</accId>

Groovy #1Groovy #2 看起来像这样:

log.info('Using account ' + (context.expand('${#accountId}') != '' ? context.expand('${#accountId}') : context.expand('${#Project#accountId}')));

我现在的问题是 Groovy 脚本写入了正确的 accountId 值(即循环内的值),但 TestStep 1 始终使用项目中的值。我希望TestStep 1 使用循环的值。

出于调试目的,我还将以下内容放入TestStep 1

<!--
{#Project#accountId}: ${#Project#accountId}
{#TestSuite#accountId}: ${#TestSuite#accountId}
{#TestRunContext#accountId}: ${#TestRunContext#accountId}
{#TestRun#accountId}: ${#TestRun#accountId}
{#TestCase#accountId}: ${#TestCase#accountId}
{#TestStep#accountId}: ${#TestStep#accountId}
{#MockService#accountId}: ${#MockService#accountId}
{#Global#accountId}: ${#Global#accountId}
{#System#accountId}: ${#System#accountId}
{#Env#accountId}: ${#Env#accountId}
{#accountId}: ${#accountId}
context.accountId: ${=context.accountId}
modelItem.accountId: ${=modelItem.accountId}
request.accountId: ${=request.accountId}
context.expand(): ${=context.expand('${#accountId}')}
-->

我用 Wireshark 跟踪了网络流量,发现只有 ${#Project#accountId} 返回了一个值。

我在这里做错了什么?我如何需要对&lt;accId&gt;-元素进行编码才能将正确的值发送到远程主机?

【问题讨论】:

    标签: properties soapui expansion


    【解决方案1】:

    现在我重新审视了这个问题,我认为我找到了最好的解决方案,尽管我不明白为什么我最初的尝试没有奏效。

    我把结构改成了这样:

    MyWorkspace
        MyProject
            TestSuite
                TestCase Single
                    TestStep 1
                TestCase Loop
                    Groovy #1
                    Run TestCase Single
                    Groovy #2
                    Run TestCase Single
    

    换句话说,我摆脱了Properties 并将逻辑移至Groovies

    context.getTestCase().getTestSuite().setPropertyValue("accountId_loop", "1720");
    

    以及TestStep 1中的相应行:

         <accId>${='${#TestSuite#accountId_loop}' != '' ? '${#TestSuite#accountId_loop}' : ${#MyProject#accountId}}</accId>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      相关资源
      最近更新 更多