package cn.baiweigang.qtaf.ift.testcase.autocreate; import java.util.List; import cn.baiweigang.qtaf.dispatch.testcase.CreateXmlFile; import cn.baiweigang.qtaf.dispatch.testcase.SuperCase; import cn.baiweigang.qtaf.ift.IftConf; import cn.baiweigang.qtaf.ift.testcase.format.FormatCase; import cn.baiweigang.qtaf.toolkit.util.CompilerUtil; import cn.baiweigang.qtaf.toolkit.util.FileUtil; import cn.baiweigang.qtaf.toolkit.util.LogUtil; import cn.baiweigang.qtaf.toolkit.util.StringUtil; /** * 数据文件类型的测试用例 * @author @<a href='http://weibo.com/bwgang'>bwgang</a>(bwgang@163.com)<br/> * */ public class IftDataFileCase extends SuperCase{ private LogUtil log =LogUtil.getLogger(IftDataFileCase.class);//日志记录 //任务名称 private String taskName;//测试任务名称 //根据用例数据文件,创建java、xml文件相关配置信息 private String allReportPath ;// html、excel测试报告存储的上级目录 private String excelReportName;//excel格式测试报告的名称 private CreateJavaFile createJavaFile;//生成java文件 private CreateXmlFile createXmlFile;//生成xml文件 /** * 构造函数 */ public IftDataFileCase() { super(); createJavaFile = new CreateJavaFile(); createXmlFile = new CreateXmlFile(); setIftTaskName("未命名测试任务"); excelReportName="未命名接口测试"; } public List<String> getCaseList() { createXmlFile(); return this.xmlPathNameList; } /** * 添加用例 * @param casePath 用例路径 必填 * @param sheetName Excel的sheet表名 可选 * @param caseName 用例名称 必填 * @param cls 执行用例的类 必填 * @param method 类中的方法 必填 */ public void addCase(String casePath, String sheetName, String caseName, Class<?> cls,String method) { if (StringUtil.IsNullOrEmpty(casePath) || StringUtil.IsNullOrEmpty(caseName)) { return; }//任一项空值或长度小于1时,不做处理 JavaCaseInfo javaCaseInfo = new JavaCaseInfo(); //读取用例 FormatCase formatcase=new FormatCase(); formatcase.FormatCaseFromObj(casePath,sheetName); //存储用例实体列表信息 javaCaseInfo.setAllCase(formatcase.getTestCase()); //获取测试集名称作为输出的测试报告名称 this.excelReportName="测试报告_"+formatcase.getCasesetName(); //存储javaCaseInfo其余信息 javaCaseInfo.setPackageName(IftConf.PackageName); javaCaseInfo.setJavaFileName(caseName.replace(".", "_")); javaCaseInfo.setJavaSavePath(IftConf.JavaPath); javaCaseInfo.setCaseDataPathName(casePath); javaCaseInfo.setCaseDataSheetName(sheetName); javaCaseInfo.setExcelReportSheetName(sheetName); javaCaseInfo.setExcelReportName(this.excelReportName); javaCaseInfo.setExcelReportPath(getReportPath()); javaCaseInfo.setCls(cls); javaCaseInfo.setMethod(method); //创建java文件 失败则返回 if (!createJavaFile.creatJavaSrcFile(javaCaseInfo)){ return; } //编译java文件为class 失败则返回 if(!CompilerUtil.dynamicCompiler(javaCaseInfo.getJavaSavePath()+javaCaseInfo.getJavaFileName()+".java", IftConf.DistPath, IftConf.LibPath,IftConf.JarFile)){ return; } //添加到xmlSuite try { createXmlFile.addJavaCase(caseName.replace(".", "_"), Class.forName(javaCaseInfo.getPackageName()+"."+javaCaseInfo.getJavaFileName())); log.info("添加测试集:"+javaCaseInfo.getJavaFileName()+"成功"); } catch (ClassNotFoundException e) { log.error("添加测试集:"+javaCaseInfo.getJavaFileName()+"失败"); log.error(e.getMessage()); } } /** * 添加用例 * @param casePath 用例路径 必填 * @param caseName 用例名称 必填 * @param cls 执行用例的类 必填 * @param method 类中的方法 必填 */ public void addCase(String casePath, String caseName,Class<?> cls,String method) { addCase(casePath,"TestCase",caseName,cls,method); } /** * 设置任务名称 * @param setTaskName */ public void setIftTaskName(String setTaskName) { this.taskName =setTaskName; this.createXmlFile.setSuiteName(this.taskName); setReportPath(IftConf.ReportPath+this.taskName+"/");// 测试报告存储路径 this.excelReportName = this.taskName; } /** * 如果路径无效 则测试报告默认保存在 [qtaf/ift/report/任务名称 ]目录下 * @param reportPath */ public void setReportPath(String reportPath){ if (FileUtil.createDictory(reportPath)) { this.allReportPath=reportPath; //清空指定的测试报告目录 FileUtil.delFolder(getReportPath()); } } public String getReportPath(){ return this.allReportPath; } public String getExcelReportPath() { return getReportPath()+this.excelReportName+".xlsx"; } public String getHtmlReportPath() { return this.allReportPath+"html"; } public String getTaskName() { return taskName; } /** * 创建java、xml文件 更新xmlPathNameList列表 * @return boolean 设置成功返回true */ private boolean createXmlFile() { //创建java、xml文件 String xmlFilePath = createXmlFile.getXmlFilePath(); if (FileUtil.isExist(xmlFilePath)) { xmlPathNameList.add(xmlFilePath); log.info("添加xml文件成功:"+xmlFilePath); return true; }else{ log.error("添加xml文件失败:"+xmlFilePath); return false; } } }