package cn.baiweigang.qtaf.dispatch.testcase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import cn.baiweigang.qtaf.dispatch.DispatchConf;
import cn.baiweigang.qtaf.toolkit.util.CommUtils;
import cn.baiweigang.qtaf.toolkit.util.FileUtil;
import cn.baiweigang.qtaf.toolkit.util.LogUtil;
/**
* 根据java文件输出Xml文件
* @author @<a href='http://weibo.com/bwgang'>bwgang</a>(bwgang@163.com)<br/>
*
*/
public class CreateXmlFile {
private LogUtil log=LogUtil.getLogger(CreateXmlFile.class);//日志记录
private XmlSuite suite;
private String xmlFileFolder;
private String suiteName;
/**
* 构造函数
*/
public CreateXmlFile(){
suite=new XmlSuite();
setSuiteName("测试套件"+CommUtils.getRandomStr(5));
setXmlFileFolder(DispatchConf.SuitsXmlPath);
}
public String getXmlFilePath(){
if (suite.getTests().size()<1) {
log.error("未添加任何测试集,未生成xml文件");
return null;
}else{
return createXmlFile();
}
}
/**
* 添加java用例
* @param cls
*/
public void addJavaCase(Class<?> cls){
if (null==cls) return ;
String caseName=cls.getSimpleName();
addJavaCase(caseName, cls);
}
/**
* 添加java用例
* @param caseName 用例名称
* @param cls 类
*/
public void addJavaCase(String caseName,Class<?> cls) {
if (null==cls ) {
log.error("添加的java类为null,添加失败");
return;
}
if (null==caseName || caseName.length()<1) {
log.info("指定的测试集为空:"+caseName);
String nameTmp="未命名测试集"+CommUtils.getRandomStr(5);
log.info("使用默认测试集名称:"+nameTmp);
addClassToXmlTest(cls.getName(), nameTmp);
return;
}
addClassToXmlTest(cls.getName(), caseName);
}
/**
* 设置测试套名称
* @param suiteName
*/
public void setSuiteName(String suiteName) {
if (null!=suiteName && suiteName.length()>0) {
this.suiteName = suiteName;
}else{
log.info("设置的测试套件名称为空");
log.info("使用默认测试套名称:"+this.suiteName);
}
suite.setName(this.suiteName);
}
public void setXmlFileFolder(String xmlFileFolder) {
this.xmlFileFolder = xmlFileFolder;
}
private void addClassToXmlTest(String pkgAndClsName,String testName) {
XmlTest xmltest=new XmlTest();
XmlClass classe=new XmlClass(pkgAndClsName);
xmltest.setName(testName);
xmltest.setClasses(Arrays.asList(classe));
addTest(xmltest);
}
private void addTest(XmlTest test){
if (null==test){
log.error("测试集为null,添加失败");
return;
}
suite.addTest(test);
}
private String createXmlFile(){
List<String> arr=new ArrayList<String>();
String xml=this.suite.toXml();
String xx[]=xml.split("\n");
for (int i = 0; i < xx.length; i++) {
if (xx[i].indexOf("verbose")!=-1) {
String temp=xx[i].trim();
xx[i]=temp.substring(0, temp.indexOf("verbose")+12)+" preserve-order=\"true\" "
+temp.substring(temp.indexOf("verbose")+12, temp.length());
}
arr.add(xx[i]);
}
String xmlName = getXmlFileFolder()+getSuiteName()+".xml";
if (FileUtil.writeString(arr, xmlName, "UTF-8")){
log.info("生成Xml文件成功:"+xmlName);
return xmlName;
}else {
log.error("生成Xml文件失败:"+xmlName);
return null;
}
}
private String getSuiteName(){
return this.suiteName;
}
private String getXmlFileFolder() {
return xmlFileFolder;
}
}