在上篇文章https://mp.csdn.net/editor/html/109625777中,我们已经实现了参数化,但是并没有实现数据和脚本的分离不利于维护,因此这篇就是为了实现数据和脚本分离的,不多说,直接上代码
一、文件数据提供程序接口
/**
* 文件数据提供程序接口
*/
public interface IData {
public Object[][] getData(String caseName,String dataFile);
public Object[][] getData(String caseName,String dataFile,int startRowNum);
public Object[][] getData(String caseName,String dataFile,int beginNum,int endNum);
}
二、数据提供者实现类
public class DataproviderImpl implements IData {
//数据文件存放的路径
protected String defaultPath="resources/testdata/data/";
//起始的数据记录
protected int start=1;
//最大数据记录
protected int max=Integer.MAX_VALUE;
protected List<Object[]>data=new ArrayList<Object[]>();
/**
* 从文件获取数据
* @param caseName 数据集名称
* @param dataFile 文件数据
* @return
*/
@Override
public Object[][] getData(String caseName, String dataFile) {
generateData(caseName,dataFile);
return generateArrayData();
}
/**
* 从文件中获取数据
* @param caseName 数据集名称
* @param dataFile 数据文件
* @param startRowNum 起始的数据记录,默认为1
* @return
*/
@Override
public Object[][] getData(String caseName, String dataFile, int startRowNum) {
start=startRowNum;
return getData(caseName,dataFile);
}
/**
* @param caseName 数据集名称
* @param dataFile 数据文件
* @param startRowNum 起始的数据记录,默认为1
* @param length 获取数据的长度,默认为全部,包括起始数据
* @return
*/
@Override
public Object[][] getData(String caseName, String dataFile, int startRowNum, int length) {
max=startRowNum+length;
return getData(caseName,dataFile,startRowNum);
}
/**
* 具体的文件驱动需要重写这个方法
* @param caseName
* @param dataFile
*/
protected void generateData(String caseName,String dataFile){}
/**
* 读取数据
* @return
*/
protected Object[][]generateArrayData(){
int i=0;
Object[][]o=new Object[data.size()][];
for (Object[] oo : data) {
o[i++]=oo;
}
data.clear();
return o;
}
public String getDefaultPath() {
return defaultPath;
}
public void setDefaultPath(String defaultPath) {
this.defaultPath = defaultPath;
}
}
三、xml文件数据提供类
public class XmlDataProvider extends DataproviderImpl {
//用例节点标签
private static final String CASENODETAG = "case";
//行节点标签
private static final String ROWNODETAG = "row";
//数据节点标签
private static final String DATANODETAG = "data";
//类型节点标签
private static final String TYPETAG = "type";
//值节点标签
private static final String VALUETAG = "value";
//分割
private static final String SPLITTAG = "split";
/**
* 重写方法generateData
*
* @param caseName 测试用例文件名
* @par