RestAssured接口自动化从入门到框架搭建-6-RestAssured基本功能3-XML响应内容解析

本文介绍使用RestAssured框架进行XML格式响应内容的断言方法,包括单个XML数据的断言、多个验证点的一行代码写法、根据XPATH表达式查找值等,并提供实战案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面几个测试用例的响应内容都是JSON格式,现在来举例请求的响应内容是XML格式的数据如何解析,其实在Rest Assured中,JSPN和XML数据解析都是一样,通用的写法是xpath表示,具体我们来看两个XML响应的解析例子。

 

1.响应内容是单个XML数据

请求demo:http://www.thomas-bayer.com/sqlrest/CUSTOMER/10/

什么是xpath路径呢,不管在json还是xm都可以使用xpath路径,例如CUSTOMER.ID 就是一个xpath路径,下面我们代码中会用到,用来断言是不是等于10.

        /**
	 * 测试响应内容是单个xml数据
	 */
	@Test
	public void testSingleXMLContent() {
		given().
			get("http://www.thomas-bayer.com/sqlrest/CUSTOMER/10/").
		then().
			body("CUSTOMER.ID", equalTo("10")).
			log().all();
	}

这10要拿String类型去对比,如果是int类型就会匹配失败,所以我加上了“10”

再写一个用例,每个xml数据都去断言和校验。

        /**
	 * 测试响应内容是单个xml数据,写多个断言点
	 */
	@Test
	public void testSingleXMLContents() {
		given().
			get("http://www.thomas-bayer.com/sqlrest/CUSTOMER/10/").
		then().
			body("CUSTOMER.ID", equalTo("10")).
			body("CUSTOMER.FIRSTNAME", equalTo("Sue")).
			body("CUSTOMER.LASTNAME", equalTo("Fuller")).
			body("CUSTOMER.STREET", equalTo("135 Upland Pl.")).
			body("CUSTOMER.CITY", equalTo("Dallas")).
			log().all();
	}

这个断言检查点写法,我觉得实际工作中不怎么使用,除非是特别重要的数据。

 

2.多个验证点一行代码的写法

如果觉得上面多个body中校验点写法很啰嗦的话,其实还有一种方法可以简写成一行。看看下面例子。

        /**
	 * 多个测试点一行代码去校验
	 */
	@Test
	public void testCompleteTextinOneLine() {
		given().
			get("http://www.thomas-bayer.com/sqlrest/CUSTOMER/10/").
		then().
			body("CUSTOMER.text()", equalTo("10SueFuller135 Upland Pl.Dallas")).
			log().all();
	}

运行结果

[RemoteTestNG] detected TestNG version 6.14.3
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/xml
Date: Sun, 21 Jul 2019 07:19:58 GMT
Content-Length: 241

<CUSTOMER xmlns:xlink="http://www.w3.org/1999/xlink">
  <ID>10</ID>
  <FIRSTNAME>Sue</FIRSTNAME>
  <LASTNAME>Fuller</LASTNAME>
  <STREET>135 Upland Pl.</STREET>
  <CITY>Dallas</CITY>
</CUSTOMER>
PASSED: testCompleteTextinOneLine

 

3.根据XPATH表达式查找值

        /**
	 * find value by xpath
	 */
	@Test
	public void findValueByXpath() {
		given().
		get("http://www.thomas-bayer.com/sqlrest/CUSTOMER/10/").
	then().
		body(hasXPath("/CUSTOMER/FIRSTNAME"), containsString("Sue"));
	}
[RemoteTestNG] detected TestNG version 6.14.3
PASSED: findValueByXpath

 

4.再来一个xpath表达式使用场景

请求demo: http://www.thomas-bayer.com/sqlrest/INVOICE/

代码中使用XPATH定位表达式来确定/20/这个数据

下面代码来判断>20<, 这个20就是当前INVOICE节点的text的值。

        /**
	 * find value by xpath, eg2
	 */
	@Test
	public void findValueByXpath2() {
		given().
		get("http://www.thomas-bayer.com/sqlrest/INVOICE/").
	then().
		body(hasXPath("/INVOICEList/INVOICE[text()='20']")).
		log().all();
	}

当然这里使用了log().all()方法会把当前请求全部list内容都打印出来,上面判断条件只是,这里多响应内容中,有没有text()=20这条数据。

 

总结:

基于XML格式的响应还是比较少,现在基本上全部是JSON的格式。本篇了解一下,知道Rest Assured框架能够处理XML格式的响应就好。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值