我开始评估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框中写什么才能让它发挥作用?为什么它如此复杂以及为什么没有简单易懂的教程呢? :(
答案 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中的执行是自上而下的,如果在源步骤之前放置属性转移,则无法传输任何值。
举个例子
在这个例子中,我有一个名为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,如下面的截图:
确保在传输属性窗口中将属性设置为“ResponseAsXml”,如下所示:
否则“响应”将完成所需。