本文共 2315 字,大约阅读时间需要 7 分钟。
前面几个测试用例的响应内容都是JSON格式,现在来举例请求的响应内容是XML格式的数据如何解析,其实在Rest Assured中,JSPN和XML数据解析都是一样,通用的写法是xpath表示,具体我们来看两个XML响应的解析例子。
1.响应内容是单个XML数据
请求demo:
什么是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.3HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: application/xmlDate: Sun, 21 Jul 2019 07:19:58 GMTContent-Length: 241PASSED: testCompleteTextinOneLine 10 Sue Fuller 135 Upland Pl. Dallas
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.3PASSED: findValueByXpath
4.再来一个xpath表达式使用场景
请求demo:
代码中使用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格式的响应就好。
转载地址:http://xjows.baihongyu.com/