SoapUI - 如何使用POST请求使用Property Transfer

时间:2014-03-06 17:46:09

标签: json post soapui

我开始评估SoapUI作为我的测试套件,但Property Transfer的事情真的让我退缩了。我已经阅读了很多关于它的文章,但我无法找到一种方法让它在我的案例中发挥作用。

我的来源是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>

我需要获取<access_token>并将其作为参数传递给下一个测试。

我应该在SOURCE和TARGET框中写什么才能让它发挥作用?为什么它如此复杂以及为什么没有简单易懂的教程呢? :(

5 个答案:

答案 0 :(得分:8)

补充Abhishek所说的话。如果您只需要access_token,则可以使用以下XPath:

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

答案 1 :(得分:2)

在属性转移步骤中,源代码将是您希望获取数据的步骤,在源属性选择响应中。

在源//access_token下面的空格中,这将提取access_token的值并使其可用于传输。如果你不提供xpath,soapUI将提供整个响应xml进行传输。

您的目标将是您要在案例中设置提取属性<access_token>的步骤。该属性将是您要设置提取值的属性。

重要在源步骤之后放置属性转移步骤。 soapUI中的执行是自上而下的,如果在源步骤之前放置属性转移,则无法传输任何值。

举个例子 soapUI property transfer step

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

在这里我可以通过提供你需要做的xpath来解析我的source属性的响应。

希望这有帮助。

答案 2 :(得分:1)

对于&#34;来源&#34; x路径使用:

    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new List<Item>
            {
                new Item {Name = "A", IsSelected = true},
                new Item {Name = "B", IsSelected = false},
                new Item {Name = "C", IsSelected = true}
            };

            var list2 = new List<Item>
            {
                new Item {Name = "A", IsSelected = true},
                new Item {Name = "C", IsSelected = true},
                new Item {Name = "D", IsSelected = false}
            };

            var list3 = new List<Item>
            {
                new Item {Name = "B", IsSelected = true},
                new Item {Name = "E", IsSelected = false},
                new Item {Name = "F", IsSelected = false}
            };

            var itemContainer = new ItemContainer();
            itemContainer.items = list1.Concat(list2).Concat(list3)
                .Distinct()
                .OrderBy(item => item.Name)
                .ThenByDescending(item => item.IsSelected)
                .ToList();

            //new list of items will contain 7 items:
            // A,true
            // B,true
            // B,false
            // C,true
            // D,false
            // E,false
            // F,false
        }
    }

    public class Item
    {
        public string Name;
        public bool IsSelected;

        public override int GetHashCode()
        {
            return Name.GetHashCode() * IsSelected.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            var objItem = obj as Item;
            return objItem != null && objItem.Name == Name && objItem.IsSelected == IsSelected;
        }
    }

    public class ItemContainer
    {
        public string Name;
        public IList<Item> items;  //items with the same 'Name' (potentially)
    }

选择&#34; 转移文字内容&#34;

选择&#34; 使用XQuery &#34;

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

答案 3 :(得分:0)

对我来说,最简单的方法是使用“Property:Response”和“Path Language:JSONPath”。

然后对于我只使用“$ .access_token”

的来源

对于Target,我在Project中定义了一个名为access_token的属性。

答案 4 :(得分:-1)

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

enter image description here

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

enter image description here

否则“响应”将完成所需。