【问题标题】:SoapUI - How to use Property Transfer with POST requestSoapUI - 如何使用带有 POST 请求的属性传输
【发布时间】:2014-03-06 17:46:08
【问题描述】:

我开始将 SoapUI 评估为我的测试套件,但属性转移这件事确实让我望而却步。我已经阅读了很多关于它的文章,但我无法找到一种方法使它适用于我的情况。

我的来源是一个 POST 请求。这个 POST 请求返回一个 JSON。我需要将此 JSON 的其中一个值传递给下一个测试。

我的回答是这样的:

<Response xmlns="https://localhost/authorize">
    <access_token>4a00c67e</access_token>
   <refresh_token></refresh_token>
   <scope>auth</scope>
   <token_type>online</token_type>
</Response>

我需要获取&lt;access_token&gt; 并将其作为参数传递给下一个测试。

我应该在 SOURCE 和 TARGET 框中写些什么才能让它发挥作用?为什么它如此复杂,为什么没有易于理解的教程? :(

【问题讨论】:

    标签: json post soapui


    【解决方案1】:

    补充阿布舍克所说的话。如果您只需要 access_token,您将使用以下 XPath:

    declare namespace var="https://localhost/authorize";
    //var:Response/var:access_token
    

    【讨论】:

    • 不需要声明命名空间。相反,我们可以使用 //*:access_token 如果soapUI 在命名空间丢失时抱怨。
    • 有趣,我不知道。感谢您的信息。
    【解决方案2】:

    在属性转移步骤中,您的来源将是您要从中获取数据的步骤,在源属性选择响应中。

    在源下方的空间中输入//access_token 这将提取access_token 的值并使其可用于传输。如果您不提供 xpath,soapUI 将提供整个响应 xml 以供传输。

    您的目标将是您要设置提取属性的步骤,在您的情况下为&lt;access_token&gt;。该属性将是您要为其设置提取值的属性。

    重要将您的财产转移步骤放在源步骤之后。 soapUI 中的执行是自上而下的,如果将属性转移放在源步骤之前,您将没有任何价值可转移。

    举个例子

    在此示例中,我有一个名为 SourceRequest 的测试请求,其响应将被传输到名为 aa 的测试套件级别属性。 正如你在这里看到的。我已经给我的财产转移一个名字PropertyTransferName(它可以是任何你想要的)。在源代码中,我提到了我的源请求和属性作为响应。因为我要将整个响应保存在测试套件级别的属性中,所以我提到了我的测试套件作为目标,并给出了我要转移到的属性的名称。

    在这种情况下,我可以通过提供您需要的 xpath 来解析我的源属性的响应。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,阿布舍克。但是,我只需要使用&lt;access_token&gt;,而不是整个响应。你知道怎么做吗?
    • 是的,就像我在我的帖子中提到的......在源下和目标上方的空间中放置 //access_token
    • 我不能让它只与 //access_token 一起工作,而它应该与 XPath 一起工作。不过,当我使用命名空间时,它就起作用了。
    • 试试 //*:access_token 这将使它在不指定命名空间的情况下工作。
    【解决方案3】:

    对于“源”x-path 使用:

    **//*[local-name()='access_token']**
    

    选择“传输文本内容

    选择“使用 XQuery

    这应该会从您的 access_token 节点中提取文本内容。

    【讨论】:

    • 几乎完美,我不得不使用 @Hina 答案中指出的 //*[local-name()='access_token'] 和 ResponseAsXml,但其他选项都是正确的,谢谢
    【解决方案4】:

    对我来说,最简单的方法是使用“属性:响应”和“路径语言:JSONPath”。

    然后对于我简单使用的源“$.access_token”

    对于目标,我在项目中定义了一个名为 access_token 的属性。

    【讨论】:

      【解决方案5】:

      要传输属性,重要的是要知道响应类型(从您传输值的位置)是 json 还是 xml。如果是json,如下截图:

      确保在传输属性窗口中将属性设置为“ResponseAsXml”,如下所示:

      否则“响应”将起到必要的作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多