RestAssured测试SOAP服务验证XML响应指定值code字段数量问题
RestAssured测试SOAP接口XML断言问题解决方案
问题1:xmlPath获取code字段返回拼接字符串而非数组
根因:XmlPath默认未指定完整层级时会将所有匹配节点的文本内容直接拼接,返回单个字符串而非列表。
解决方案:使用getList方法指定完整节点路径,同时指定返回值类型:
// 直接获取所有code节点的整数值列表 List<Integer> codeList = response.getBody().xmlPath().getList("Response.Result.code", Integer.class); // 此时codeList即为预期的[0,0,0],可直接断言大小和值 assertThat(codeList, hasSize(3)); assertThat(codeList, everyItem(is(0)));
问题2:count()函数的XPath断言失败
根因:hasXPath方法第一个参数仅支持传入XPath表达式返回待匹配值,不能直接在XPath中写判断逻辑,需要搭配Hamcrest匹配器做值校验。
解决方案:拆分XPath表达式和匹配逻辑,正确写法如下:
import static org.hamcrest.Matchers.equalTo; // 校验值为0的code节点数量为3 response.then().body(hasXPath("count(//code[text()='0'])", equalTo(3)));
补充说明
如果遇到命名空间干扰导致节点匹配失败,可以先关闭命名空间校验:
RestAssured.config = RestAssured.config().xmlConfig(xmlConfig().disableNamespaces());
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

