moco XML接口例子:https://blog.csdn.net/weixin_36558635/article/details/107388732
创建XML脚本
<shopping>
<category type="groceries">
<item>
<name>Chocolate</name>
<price>10</price>
</item>
<item>
<name>Coffee</name>
<price>20</price>
</item>
</category>
<category type="supplies">
<item>
<name>Paper</name>
<price>5</price>
</item>
<item quantity="4">
<name>Pens</name>
<price>15</price>
</item>
</category>
<category type="present">
<item when="Aug 10">
<name>Kathryn's Birthday</name>
<price>200</price>
</item>
</category>
</shopping>
XML断言及取值
package Takming.com;
import io.restassured.path.xml.element.Node;
import io.restassured.response.Response;
import org.junit.Test;
import java.util.List;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static io.restassured.RestAssured.*;
import static io.restassured.matcher.RestAssuredMatchers.*;
public class Get_XmlBody {
public Response get_Xml(){
Response Xmlpath= when().get("http://localhost:8886/XML/demo");
return Xmlpath;
}
//取值部分
@Test
public void Xml(){
//使用节点数组索引获取商品名称
String name= get_Xml().xmlPath().get("shopping.category.item[0].name");
//使用getList()方法获取所有的商品名称
List<String> list=get_Xml().xmlPath().getList("shopping.category.item.name");
//使用getList()方法取出所有商品的价格
List<String> list1=get_Xml().xmlPath().getList("shopping.category.item.price");
System.out.println(list1);
}
@Test
public void Xml_size(){
//使用函数获取商品;Eg:size()
int item= get_Xml().xmlPath().get("shopping.category.item.size()");
System.out.println(item);
}
@Test
public void Xml_Node(){
//获取category标签数据
Node category=get_Xml().xmlPath().get("shopping.category[0]");
//用category节点标签获取所有商品详情
List<Node> list = get_Xml().xmlPath().getList("shopping.category");
System.out.println(list);
}
@Test
public void Xml_type(){
//使用标签的type获取商品的详情
List<String> type1 = get_Xml().xmlPath()
.getList(
"shopping.category.findAll{it.@type == 'groceries'}");
//使用函数size()
int typeint=get_Xml().xmlPath().get("shopping.category.findAll{it.@type=='groceries'}.size()");
System.out.println(typeint);
}
@Test
public void Xml_price(){
//xml使用findAll()方法获取区间价格商品
List<Node> itemp=get_Xml().xmlPath()
.getList("shopping.category.item.findAll{item -> " +
"def price=item.price.toFloat();price>=10&&price<=20}");
System.out.println(itemp);
}
@Test
public void Xml_path(){
//XML深度取值取值可以使用**代替路径
int price= get_Xml().xmlPath().getInt("**.find{it.name=='Chocolate'}.price");
System.out.println(price);
}
//断言部分
@Test
public void Assertion_xml(){
//使用节点数组索引获取商品名称进行断言
get_Xml().then().log().all().body("shopping.category.item[0].name",equalTo("Chocolate"))
.body("shopping.category.item[0].price",equalTo("10"));
//对所有商品名称节点进行断言时先将所有的商品放到一个List里,然后使用Junit中AsserThat()方法断言
List<String>List=get_Xml().xmlPath().getList("shopping.category.item.name");
assertThat(List,hasItems("Chocolate", "Coffee", "Paper", "Kathryn's Birthday"));
System.out.println(List);
// .body("shopping.category.item.name",hasItems("Chocolate"," Coffee","Kathryn's Birthday"));
}
@Test
public void xml_price(){
//xml用节点方式取出的值为String类型,所以equalTo()方法断言时必须加上是String类型 Eg:
get_Xml().then().log().all().body("shopping.category.item[0].price",equalTo("10"));
List<String> list=get_Xml().xmlPath().getList("shopping.category.item.price");
assertThat(list,hasItems("10", "20", "5", "15", "200"));
System.out.println(list);
}
}