測试之路2——对照XML文件1

才来几天,老大又给了我一个新的任务。不像曾经的建100个任务project那么坑爹,却还是顿时让我感觉压力山大。

由于在这之前,我改了他写的例程,用于生成新的任务项目,事实上任务项目就是通过XML文件进行參数传递,底层早已经封装好了。可是问题出来了,你新建任务须要传过去一个XML文件,可是server端生成任务还会返回一个XML文件,而我对于server端并不了解,我仅仅知道server生成了一个XML文件,可是它生成的XML中的參数是否和我传过去的參数同样?

所以老大要我写一个方法,去比对这两份XML文件。(自己传到server和server生成并返回的)

以后我都会称自己传到server为源文件,server生成返回的为目标文件

这一下倒是难到了我,由于第一,我对xml文件不熟;第二,我没有考虑好怎样去对照xml文件。

首先,xml文件里都是以string字符串的形式写入,在java程序中,事实上就是对照string。可是我不知道该怎么去比对这两个字符串,是比对字符串长度?不可能,源文件的长度肯定小于目标文件,目标文件会生成相应的任务名称,id等參数,而这些在源文件里是缺省的。

这让我感到绝望,只是好在有万能的baidu:他告诉我,java中有非常多封装好的类,能够将xml文件直接进行转化,比方:DOM。

原来还能够这样,于是我又查了查Document类,略去基础的不说,直奔主题:

这个DOM类能够直接对xml文档操作,能够读取xml文件,并生成一个对象,这个对象就是xml文件的树形化(xml也是类似于树结构,dom相当于直接生成这个数结构),那么我就能够直接訪问这个对象,对这个对象进行操作,比方能够得到子节点,得到根文件夹……

那么怎么使用dom呢?直接上代码不解释:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;  //须要引入的包
@Override
public boolean compare(String sourcePath, String targetPath) {
<span style="white-space:pre">	</span>boolean result=false;
<span style="white-space:pre">	</span>File sourceFile = new File(sourcePath);
<span style="white-space:pre">	</span>File targetFile = new File(targetPath);
<span style="white-space:pre">	</span>Document sourceDoc = builder.parse(sourceFile);
<span style="white-space:pre">	</span>Document targetDoc = builder.parse(targetFile);
<span style="white-space:pre">	</span>simpleCompare(sourceDoc, targetDoc);
<span style="white-space:pre">	</span>try {
<span style="white-space:pre">	</span>Document sourceDoc = builder.parse(sourceFile);
<span style="white-space:pre">	</span>Document targetDoc = builder.parse(targetFile);

<span style="white-space:pre">	</span>// DebugUtil.formatXML(sourceDoc);
<span style="white-space:pre">	</span>simpleCompare(sourceDoc, targetDoc);//简单对照

<span style="white-space:pre">	</span>} catch (SAXException e) {
<span style="white-space:pre">	</span>e.printStackTrace();
<span style="white-space:pre">	</span>} catch (IOException e) {
<span style="white-space:pre">	</span>e.printStackTrace();
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>return result;
}

上面代码大概就这么个意思,compare是个构造方法:方法内创建格式工厂,读取xml文件的路径,然后去解析这个xml文件,返回得到的Document对象(是一个树形的数据结构)。

那么实际就是操作sourceDoc和targetDoc这两个Document对象就能够了。

剩下那不是非常easy?于是,我找到了Document的方法:getChildNodes(),返回全部孩子的节点,以链表的形式,我当然能够觉得链表的名字就是xml标签名字,值为xml标签的值,所以我就能够进行对照了。于是又是洋洋洒洒一段代码。

public boolean simpleCompare(Document sourceDoc,Document targetDoc){
//		Element sourceRoot = sourceDoc.getDocumentElement();  //得到源文件的根节点
		Element targetRoot = targetDoc.getDocumentElement();	//得到目标文件的根节点

//		HashSet<String> sourceSet =new HashSet<String>();  //创建哈希表
//		HashSet<String> targetSet =new HashSet<String>();
//		HashSet<String> sourceNames=getNodeNames(sourceRoot,sourceSet);   //一个创建哈希表函数
//		HashSet<String> targetNames=getNodeNames(targetRoot,targetSet);

		NodeList sourceNodes = sourceDoc.getChildNodes();	 //得到源文件的孩子,为了进行对照
		NodeList targetNodes = targetDoc.getChildNodes();	 

		int sourceLength = sourceNodes.getLength();
		int targetLength = targetNodes.getLength();
		int i = 0,j = 0;
		for (i = 0; i < sourceLength; i++) {
			String name = sourceNodes.item(i).getNodeName();
			String value = sourceNodes.item(i).getNodeValue();
			for (j = 0; j < targetLength; j++) {
				if (name.equals(targetNodes.item(j).getNodeName())) {
					if (value.equals(sourceNodes.item(j).getNodeValue())) {

					}
					else {
						return false;//假设值不正确,说明对照错误
					}
				}
			}
			if(j == targetLength){   //假设一直没有在目标文件里找到,说明对照错误
				return false;
			}
		}
		return true;
	}

本以为这样都就能够完毕对照的任务了,可是当我拿两份内容一样的xml文件去对照,console里返回的都是false,这让我变得非常忧伤。

至于为什么,肯定是哪里出现故障了,所以我要输出来看一看,究竟出了什么错。

时间: 2024-10-11 18:16:35

測试之路2——对照XML文件1的相关文章

测试之路3——对比XML文件2

距离上一篇对比xml文件隔了很久,并不代表一直做了那么久. 其实上一次对比xml文件一直出错,其实我忽略了一个很简单的问题:我从根目录下得到的所有孩子,是这个根下的,而xml文件的组织形式如下,孩子也有可能是其他的根: <streams> <stream id = "979" presetid = "-1"> <h264> <profile>High</profile> <par_y>-1<

测试之路2——对比XML文件1

才来几天,老大又给了我一个新的任务.不像以前的建100个任务工程那么坑爹,却还是顿时让我感觉压力山大. 因为在这之前,我改了他写的例程,用于生成新的任务项目,其实任务项目就是通过XML文件进行参数传递,底层早已经封装好了.但是问题出来了,你新建任务需要传过去一个XML文件,但是服务器端生成任务还会返回一个XML文件,而我对于服务器端并不了解,我只知道服务器生成了一个XML文件,但是它生成的XML中的参数是否和我传过去的参数相同? 所以老大要我写一个方法,去比对这两份XML文件.(自己传到服务器和

Android Gradle Plugin指南(四)——測试

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 5.Testing(測试) 构建一个測试程序已经被集成到应用项目中,没有必要再专门建立一个測试项目. 5.1 Basics and Configuration(基本知识和配置) 正如前面所提到的,紧邻main sourceSet的就是androidTest sourceSet,默认路径在src/androidTest/下. 在这个測试so

Mock+Proxy在SDK项目的自己主动化測试实战

项目背景 广告SDK项目是为应用程序APP开发者提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - 错误日志打点 - 反作弊 团队现状 在项目推进的过程中.逐渐暴露了一些问题: 1. 项目团队分为上海团队(服务端)和北京团队(client),因为信息同步,人力资源等其它原因.服务端与client的开发进度非常难保持同步,经常出现client等着和服务端联调的情况 2. 接口文档不稳定,理解有偏差

Maven项目中mvn clean后找不到測试类问题

在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.

Loopback測试软件AX1用户手冊 V3.1

点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip?的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip?评估板和TCP/IP协议连接,首先.TCP/IP协议发送可选的包或者文件到iinChip?评估板,其次.它检查返回的数据包或者文件,发送包或者文件.最后.測量发送和接收速度. AX1的功能例如以下: 測试TCP协议 測试UDP协议 2. 安装 你能够通过iinChip?评估板产品包里的CD或者wizne

机房收费系统——測试计划

測试计划(GB8567--88) 1引言 在项目基本编码工作完毕的就要进行測试.对于排除出错误和修复漏洞有重要作用. 1.1编写目的 測试的主要目的就是尽可能多的找到系统中的漏洞,而且设计出測试用例,对系统測试.目的及在于对測试的方法.測试流程,有一定大体上的掌控. 本文档的预期读者是測试人员. 系统測试在整个项目开发过程中.比例占到了40%~50%.基本上在项目进行编码的过程中就開始了測试,所以測试的好坏也影响了系统的功能实现情况. 1.2背景 说明: a.  測试计划所从属的软件系统的名称:

Activity生命周期方法的调用顺序project与測试日志

以下为測试activity的方法的运行顺序   project与測试资源地址 androidproject AndroidManifest.xml <? xml version="1.0" encoding="utf-8"? > <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finali

hadoop环境搭建与測试

搭建參看: http://blog.csdn.net/w13770269691/article/details/16883663/ 查看集群状态: [[email protected] bin]# hdfs dfsadmin -report Configured Capacity: 36729053184 (34.21 GB) Present Capacity: 13322559491 (12.41 GB) DFS Remaining: 13322240000 (12.41 GB) DFS Us