【问题标题】:Property value not showing in SoapUI ResponseSoapUI 响应中未显示属性值
【发布时间】:2014-06-07 03:21:39
【问题描述】:

我对 groovy 和soapUI 比较陌生,但我正在尝试使用测试套件来检查一些请求/响应。我有三个测试用例。其中两个取决于我在第三个中设置的值。我的问题是,我无法在前两种情况下引用第三种情况的值。前两个测试基本上运行相同的请求,一个用数据填充整个表单,另一个只填充必需的部分,而 clientTID 是必需的部分之一(但我没有得到任何数据放入其中,所以我做了一个名为“TransID”的值来做到这一点)。因此,由于第三个测试用例的值,整个 testSuite 都失败了。我是这样写的:

TestCase1/TestCase2,测试请求:

<clientOrderRequest>
    <clientTID>${TransID}</clientTID>
    <transactionCount>5</transactionCount>
    <ClientInformation> unimportant information here </ClientInformation></clientOrderRequest>

TestCase3,Groovy 脚本:

testRunner.testCase.setPropertyValue("TransID", String.valueOf((int)Math.random()*1000000000))

当它运行时,我得到:

TestCase1/TestCase2,原始测试请求:

<clientOrderRequest>
    <clientTID></clientTID>
    <transactionCount>5</transactionCount>
    <ClientInformation> Unimportant information here </ClientInformation></clientOrderRequest>

我觉得我在这里缺少一些基本的东西,但是......我怎样才能让 clientID 中的字段显示出来?我尝试了bunch of different things,但还没有显示 transID 值。

【问题讨论】:

    标签: xml groovy soapui


    【解决方案1】:

    你有两个选择。

    一个(如果我把这个数字设为数字,那么会搞砸格式吗?):首先运行您的 TestCase3,然后在项目级别设置属性。

    testRunner.testCase.testSuite.project.setPropertyValue("TransID", '(int)Math.random()*1000000000'.toString())
    

    如果这是此测试用例唯一要做的事情,那么您甚至可以将上述代码放入测试套件 SetUp 脚本中(进行适当的编辑)。在您随后的测试用例中,您会将其称为${#Project#TransID}

    二:在您的两个测试用例中,您可以使用 Groovy 属性扩展。它看起来像:

    ${=testRunner.testCase.testSuite.getTestCaseByName('TestCase3').getPropertyValue('TransID')}
    

    【讨论】:

    【解决方案2】:

    ${TransID} 将引用名为 TransID 的全局属性。您需要引用一个 testCase 属性。尝试将其更改为以下内容:

    <clientOrderRequest>
        <clientTID>${#TestCase#TransID}</clientTID>
        <transactionCount>5</transactionCount>
        <ClientInformation> unimportant information here </ClientInformation>
    </clientOrderRequest>
    

    如果这不起作用。尝试使用全局属性。只需执行以下操作。

    1. 在首选项中创建一个名为 TransID 的全局属性
    2. 更改testRunner.testCase.setPropertyValue("TransID", String.valueOf((int)Math.random()*1000000000))SoapUI.getGlobalProperties().getProperty('TransID').setValue(String.valueOf((int)Math.random()*1000000000))
    3. 在您的两个测试用例中保留您的 ${TransID} 参考

    【讨论】:

    • 我试过了,好像不行。我认为#TestCase# 在包含变量的 testCase 中查找,因此它不会看到 TransID 值。
    • 等等,你有一个单独的 testCase 正在运行 groovy 脚本测试步骤?您不能引用不同 testCase 中的 testCase 属性。您有没有想过在 testCase1 和 testCase2 中使用 groovy 测试步骤(或者甚至将其作为设置脚本运行)?
    • 我不能。测试并行运行,并且 testcase1 和 2 需要 clientTID 字段中的相同值才能正确运行测试。因此,如果我将 TransID 值放入 Test1 或 Test2 中,其中一个仍然需要引用自身之外的属性。
    • 我在我的答案中添加了一个辅助选项,它应该适用于您的情况,因为它使用全局属性。
    猜你喜欢
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多