holmos.webtest.junitextentions.parameters.filepathanalysis.analysisimp.LocalFilePathAnalysisRobot Maven / Gradle / Ivy
package holmos.webtest.junitextentions.parameters.filepathanalysis.analysisimp;
import holmos.webtest.constvalue.ConfigConstValue;
import holmos.webtest.exceptions.HolmosFailedError;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
/**
* 框架默认的参数源文件的位置获取器,此获取器获取了和当前测试类在同一个目录下的指定名字的文件,用此做法是为了方便以后扩展;
* 此文件路径获取器是获取本机参数源文件的信息,以后可以扩展,比如远程主机上的参数源文件,比如按照一定规则配置的数据库中存储;
* 的文件信息,按照一定规则存储在文件中的文件路径信息等等
* 其中包含两种级别:
* 如果在测试类所在的目录里面找到了指定名字的参数源文件,那么用此文件
* 如果用户传进来的文件名字就是文件的绝对路径,那么即返回此路径即可
*
* @author 吴银龙([email protected])
* */
public class LocalFilePathAnalysisRobot implements FilePathAnalysisRotot{
/*指示是否用包路径的变量*/
private boolean usePackagePath;
/*框架设置的前缀*/
private String prefixPath;
/**
* 默认的构造函数:
* 加上包路径
* 没有特定的前缀设置
* */
public LocalFilePathAnalysisRobot(){
this(true,null);
}
public LocalFilePathAnalysisRobot(boolean usePackagePath,String prefixPath){
this.usePackagePath=usePackagePath;
this.prefixPath=prefixPath;
}
/**
* 根据Holmos框架的配置和给定的测试类还有数据源文件的名字获取数据源文件的定位
* @param fileName 数据源文件的名字
* @param testClass 测试类
* @return 获取到的数据源文件的定位
* */
public URI getFilePath(String fileName, Class> testClass) {
if(fileName.contains(":"))
try {
return new URI(fileName);
} catch (URISyntaxException e1) {}
String fullFileName=makeFullFileName(fileName,testClass);
File dataSourceFile=new File(fullFileName);
if(!dataSourceFile.exists()){
throw new HolmosFailedError("无法找到参数数据源文件"+fullFileName);
}
return dataSourceFile.toURI();
}
/**
* 获取数据源文件的全名,就是由packagePath和prefixPath作用之后的全名
* @param fileName 数据源文件的名字(注解中的)
* @param testClass 测试类
* @return 数据源文件的全名
* */
private String makeFullFileName(String fileName, Class> testClass) {
String pathWithPackage=fileName;
if(usePackagePath && !fileName.startsWith("/")){
pathWithPackage=getPackagePath(fileName,testClass);
}
if(fileName.startsWith("/")){
pathWithPackage=fileName.substring(1);
}
if(prefixPath!=null&&prefixPath.trim()!=null){
pathWithPackage=prefixPath+"/"+pathWithPackage;
}
return System.getProperty("user.dir").replace('\\', '/')+ConfigConstValue.CURRENTWORKTOPACKAGEPATH+pathWithPackage.replace(".", "/")+'/'+fileName;
}
/**
* 加上包路径
* @param fileName 数据源文件的名字(注解中的)
* @param testClass 测试类
* @return 加上包路径的文件名字
* */
private String getPackagePath(String fileName, Class> testClass) {
if(testClass.getName().lastIndexOf('.')<0)
//在没有包路径的情况下
return fileName;
String packagePath=testClass.getPackage().getName();
return packagePath;
}
}