项目封装了新的SDK,需要对SDK进行测试,API没有变更。
设计一自动化CASE:
- 通过openapi的方式调用YAPI上接口测试用例,返回结果A;
- 引入SDK,编写单元测试代码,通过SDK调用接口,返回结果B;
- 对结果(xml/Json)进行排序后断言。
因为整个环境只有SDK是新的,所以完成以上CASE,基本可以找出SDK中存在的Bug。
但是返回结果中xml和Json的属性顺序不一定相对,所以用基本的equals可能会存在判断不准确的情况,需要提前对结果进行自然排序,排序后进行比较即可。
一、Json排序
fastjson,使用SerializerFeature.MapSortField参数,可以达到目的。
@Slf4j
二、xml排序
xml比较复杂,这里只讨论POJO<->xml的形式。
对于比较POJO形式的xml根据node名称进行自然排序即可,使用XSLT进行sort即可。
@Slf4j
对应的xsl文件。
<
手工调整xml中结点位置,对于生成的结果文件进行比较,完全一致。
三、XML排序 - 续
好悲剧啊,接口返回的xml信息太复杂了,以至于XSLT模板比较难配置,该方案最终折戟。这里还是把即将删除的代码记录一下。
@Scan
XSLT增加结点过滤。
<
四、XMLUnit
终极方案,XMLUnit,不多解释了。
https://www.xmlunit.org/
https://github.com/xmlunit/xmlunit
http://xmlunit.sourceforge.net/userguide/XMLUnit-Java.pdf
探究 XMLUnit
XMLUnit: 验证比较XML文件的工具
五、FastJson最终处理
实在是写不动了,还是贴代码了。
对于Json中也需要对部分字段进行忽略,可以使用filter进行过滤。
public