(原创)工具无处不在
一说工具,所有人都自然而然的联想到自动化测试,其实不尽然 (写这文档,写完后,没提交成功,原来我断网了,害得我重写,运气真是差,一晚上3个多小时,全花在这文档上了)
测试过程中,不是所有工具,都用于自动化测试,不过他属于自动化测试体系持续集成过程中的一小步。在测试的过程中,不管是自动化,还是手工测试,一系列
工具的应用将大大提高测试效率,试想一下,如果您在几年的测试工作中,形成了一个由一堆小工具组成的百宝箱
,也许这些小工具,在以后的某个项目中,不能直接拿来就用,但我相信在这众多工具的使用中,内在的东西会为你以后的工作左右缝源。
上面啰嗦这么多,我们来看一个下面的场景下,我的做法,相信类似的场景你也会碰到,且听我慢慢道来
在MYPM的不断升级中,我们需要不断的发布补丁,如果只是修改个别BUG,补丁所涉及到的要更新的文件不会很多,手动写脚本来更新,也不要多长时间,但
是如果是一个里程碑的新版本发布,更新的文件都会上100,写脚本也是很麻烦的事且容易出错。
先来看,我们以前打补丁的方法,先和SVN同步,看哪些文件,要提交,然后把这些文件都拷出来,同时记下,这文件在MYPM部署后的所在目录,然后写脚本
去替换他,如替换时所在目录不存在,还要新建,以前MYPM免费版打补丁我都是手写,这次商业版,变更的文件太多,没办法手写;另外从成本角来说,要是只
有几个文件发生变更,写工具类就不合算。也许你会说,让用户装一个新版本就行了,是项目还行,我们是产品,让每一个客户去升级安装是很麻烦的事,我们宁愿麻烦我们,也不愿麻烦客户。
在看我下面的实现之前,我们可以总结出这样的结论经,只是要有规律的东西,在成本合算的前提下都可以用工具来实现,做到一次编写N次使用;同样也适用于软件测试,特别是在数据驱动的测试中。
我们来看一下一个linux下的MYPM补丁脚本片段
#!/bin/sh
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes
cp -f ./button.properties /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/button.properties
echo 1 replace button.properties success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/resource/webwork
cp -f ./testTaskManager.xml /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/resource/webwork/testTaskManager.xml
echo 2 replace testTaskManager.xml success
mkdir -p /home/mypmcc/sfckMypm/mypm203/gantt
cp -f ./jsgantt.css /home/mypmcc/sfckMypm/mypm203/gantt/jsgantt.css
这次我们升级时,更新的文件有110个,每个文件要3行脚本,一共要写330行本,这是个功夫活
我是懒人,这活是有规律可行的功夫活,我们完全可以把上面的两个步骤((1)找到哪些文件更新了,(2)把这些文件通过编写脚本去更新客户的mypm),用工具去实现
首先我们写了一个工具类,类名就叫chgChkTool,我们叫他变更检查工具,他的工作就是遍历,MYPM工程下所有文件,给他传入两个参数:一个是
上次打补丁的时间,另一个是MYPM安装目录,检查文件有没有更新时,拿这个时间来作对比。然后生成下面包含这个列表的chgFileList.txt文
件
mypmHome=/home/mypmcc/sfckMypm/mypm203
#配置文件
/src/button.properties
/src/resource/webwork/testTaskManager.xml
#公共JSP JS文件
/WebRoot/gantt/jsgantt.css
/WebRoot/gantt/jsgantt.js
/WebRoot/js/commonFunction_botm.js
/WebRoot/js/globalVariable.js
/WebRoot/jsp/analysisManager/analysisMain.jsp
......省去若干不一一列出,省得在这里占篇副
#测试需求管理
/WebRoot/jsp/outlineManager/contextMenu.js
/WebRoot/jsp/outlineManager/functionList.jsp
WebRoot/jsp/outlineManager/outLineBase.js
......省去若干不一一列出,省得在这里占篇副
#测试用例管理
/WebRoot/jsp/caseManager/batchAuditInitList.js
/WebRoot/jsp/caseManager/batchAuditList.jsp
/WebRoot/jsp/caseManager/caseBase.js
......省去若干
#BUG管理
/WebRoot/jsp/bugManager/assignPersion.js
/WebRoot/jsp/bugManager/baseFuncn.js
/WebRoot/jsp/bugManager/batchAssignBugList.jsp
/WebRoot/jsp/bugManager/batchBase.js
......省去若干不一一列出,省得在这里占篇副
#java 类文件
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl.class
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$1.class
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$2.class
/src/cn/com/mypm/outlineManager/service/OutLineManagerService.class
......省去若干不一一列出,省得在这里占篇副
下面是从chgFileList.txt生成脚本文件的GenePatchSrcTool 代码片段
public void writeScrpt(){
//读取变更清单文件
String fileName = getClass().getResource("/chgFileList.txt").toString();
fileName = fileName.substring(6, fileName.length());
//获取脚本文件目录,目录为变更清单文件目录下子目录,子目录为 patchs加当前日期
String scriptFilePath = fileName.replaceAll("chgFileList.txt", "patchs"+StringUtils.formatShortDate(new Date())+".bat");
scriptFilePath = scriptFilePath.substring(0,scriptFilePath.lastIndexOf("/"));
File scriptFile = new File(new File(scriptFilePath),"patchs"+StringUtils.formatShortDate(new Date())+".bat");
StringBuffer scriptSb = new StringBuffer("#!/bin/sh \n");
OutputStreamWriter scriptFileWrite = null;
String mypmHome = "";
String filePatch = "";
String currDir = "";
String currFileName = "";
try {
InputStreamReader read = new InputStreamReader(new FileInputStream( fileName), "UTF-8");
BufferedReader reader = new BufferedReader(read);
String line;
int i =1;
//循环读取chgFileList每一行,然后生成该文件所在目录,拷贝该文件,打出拷贝成功提示的脚本
while ((line = reader.readLine()) != null) {
if (!(line.trim()).startsWith("#") && !"".equals(line)) {
if(line.indexOf("mypmHome=")>0){ //含"mypmHome= 为MYPM安装目录
mypmHome = line.split("=")[1];
}else{
if(line.startsWith("/src")){以src打头,为类或配置文件 把SRC换为mypmHome+"/WEB-INF/classes"
filePatch = line.replaceFirst("/src", mypmHome+"/WEB-INF/classes");
currDir = filePatch.substring(0,filePatch.lastIndexOf("/"));
currFileName = filePatch.substring(filePatch.lastIndexOf("/")+1);
//生成创建目录脚本
scriptSb.append("mkdir " +currDir +" \n");
//生成拷贝文件脚本
scriptSb.append("copy " +currFileName +" "+filePatch +" /y \n");
//打出拷贝第i个文件成功提示
scriptSb.append("echo " +i +" replace " +currFileName +" success \n");
}else if(line.startsWith("/WebRoot")){ //以/WebRoot"打头,为JSP 或JS、
//CSS在页面文件 直接换mypmHome
filePatch = line.replaceFirst("/WebRoot", mypmHome);
currDir = filePatch.substring(0,filePatch.lastIndexOf("/"));
currFileName = filePatch.substring(filePatch.lastIndexOf("/")+1);
scriptSb.append("mkdir " +currDir +" \n");
scriptSb.append("cp " +currFileName +" "+filePatch +" /y \n");
scriptSb.append("echo " +i +" replace " +currFileName +" success \n");
}
i++;
}
}
}
read.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
//把缓存中的脚本写到文件中
scriptFileWrite = new OutputStreamWriter(new FileOutputStream(scriptFile), "utf-8");
scriptFileWrite.write(scriptSb.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(scriptFileWrite!=null)
try {
scriptFileWrite.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
下面我们来看一下,用这两个工具类生成的东东
chgChkTool 生成的 chgFileList.txt
mypmHome=/home/mypmcc/sfckMypm/mypm203
/src/button.properties
/src/resource/webwork/testTaskManager.xml
#JSP JS\u6587\u4ef6
/WebRoot/gantt/jsgantt.css
/WebRoot/gantt/jsgantt.js
/WebRoot/js/commonFunction_botm.js
/WebRoot/js/globalVariable.js
/WebRoot/jsp/analysisManager/analysisMain.jsp
/WebRoot/jsp/aboutMypm.jsp
/WebRoot/jsp/userManager/login.js
/WebRoot/jsp/userManager/login4Ce.js
/WebRoot/jsp/userManager/userList.jsp
/WebRoot/jsp/userManager/userManger.js
/WebRoot/jsp/taskManager/taskList.js
/WebRoot/jsp/singleTestTaskManager/flwSetList.js
/WebRoot/jsp/singleTestTaskManager/flwSetList.jsp
/WebRoot/jsp/singleTestTaskManager/swTestTaskList.js
/WebRoot/jsp/rolemanager/roleList.jsp
/WebRoot/jsp/common/main.js
/WebRoot/jsp/common/pageRefresher.jsp
/WebRoot/jsp/common/refresh.jsp
#\u6d4b\u8bd5\u5927\u521a
/WebRoot/jsp/outlineManager/contextMenu.js
/WebRoot/jsp/outlineManager/functionList.jsp
WebRoot/jsp/outlineManager/outLineBase.js
/WebRoot/jsp/outlineManager/outlineTree.jsp
/WebRoot/jsp/outlineManager/outTree.js
/WebRoot/jsp/outlineManager/testRequirementMain.jsp
#\u6d4b\u8bd5\u7528\u4f8b
/WebRoot/jsp/caseManager/batchAuditInitList.js
/WebRoot/jsp/caseManager/batchAuditList.jsp
/WebRoot/jsp/caseManager/caseBase.js
/WebRoot/jsp/caseManager/caseBatchBase.js
/WebRoot/jsp/caseManager/caseBoard.jsp
/WebRoot/jsp/caseManager/caseHistory.jsp
/WebRoot/jsp/caseManager/caseInitList.js
/WebRoot/jsp/caseManager/caseList.jsp
/WebRoot/jsp/caseManager/caseMgrMain.jsp
/WebRoot/jsp/caseManager/caseTree.js
/WebRoot/jsp/caseManager/caseTree.jsp
/WebRoot/jsp/caseManager/exeHistory.js
/WebRoot/jsp/caseManager/exeHistory.jsp
/WebRoot/jsp/caseManager/lastExeCase.js
/WebRoot/jsp/caseManager/lastExeCase.jsp
#BUG\u7ba1\u7406
/WebRoot/jsp/bugManager/assignPersion.js
/WebRoot/jsp/bugManager/baseFuncn.js
/WebRoot/jsp/bugManager/batchAssignBugList.jsp
/WebRoot/jsp/bugManager/batchBase.js
/WebRoot/jsp/bugManager/batchGrid.js
/WebRoot/jsp/bugManager/broMsg.js
/WebRoot/jsp/bugManager/bugBoard.jsp
/WebRoot/jsp/bugManager/bugHandling.js
/WebRoot/jsp/bugManager/bugMgrLeftTre.js
/WebRoot/jsp/bugManager/bugMgrLeftTre.jsp
/WebRoot/jsp/bugManager/bugMgrMain.jsp
/WebRoot/jsp/bugManager/bugMgrRight.js
/WebRoot/jsp/bugManager/bugMgrRight.jsp
/WebRoot/jsp/bugManager/bugMsgList.jsp
/WebRoot/jsp/bugManager/bugTree.js
/WebRoot/jsp/bugManager/bugTree.jsp
/WebRoot/jsp/bugManager/detail.jsp
/WebRoot/jsp/bugManager/edit.js
/WebRoot/jsp/bugManager/editBug.jsp
/WebRoot/jsp/bugManager/flowCtrl.js
/WebRoot/jsp/bugManager/grid.js
/WebRoot/jsp/bugManager/handBug.jsp
/WebRoot/jsp/bugManager/history.js
/WebRoot/jsp/bugManager/myAllBugbaseFuncn.js
/WebRoot/jsp/bugManager/myAllBugList.jsp
/WebRoot/jsp/bugManager/myBugList.jsp
/WebRoot/jsp/bugManager/relaBug.js
/WebRoot/jsp/bugManager/relaBugList.jsp
/WebRoot/jsp/bugManager/relaCase.js
/WebRoot/jsp/bugManager/relaCaseList.jsp
/WebRoot/jsp/bugManager/window.js
#\u7c7b\u6587\u4ef6
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl.class
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$1.class
/src/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$2.class
/src/cn/com/mypm/outlineManager/service/OutLineManagerService.class
/src/cn/com/mypm/outlineManager/service/impl/OutLineManagerServiceImpl.class
/src/cn/com/mypm/outlineManager/dto/OutLineManagerDto.class
/src/cn/com/mypm/outlineManager/blh/OutLineManagerBlh.class
/src/cn/com/mypm/object/mapping/OutlineInfo.hbm.xml
/src/cn/com/mypm/object/mapping/BugBaseInfo.hbm.xml
/src/cn/com/mypm/object/BugBaseInfo.class
/src/cn/com/mypm/object/OutlineInfo.class
/src/cn/com/mypm/object/TestCaseInfo.class
/src/cn/com/mypm/object/TestResult.class
/src/cn/com/mypm/impExpManager/service/ImpExpManagerService.class
/src/cn/com/mypm/impExpManager/service/impl/ImpExpManagerServiceImpl.class
/src/cn/com/mypm/impExpManager/dto/ExpBugInfo.class
/src/cn/com/mypm/impExpManager/blh/BugImpExpBlh.class
/src/cn/com/mypm/impExpManager/blh/BugImpExpBlh$1.class
/src/cn/com/mypm/impExpManager/blh/CaseImpExpBlh.class
/src/cn/com/mypm/impExpManager/blh/CaseImpExpBlh$1.class
/src/cn/com/mypm/framework/security/MenuServlet.class
/src/cn/com/mypm/common/blh/CommonBlh.class
/src/cn/com/mypm/caseManager/service/CaseManagerService.class
/src/cn/com/mypm/caseManager/service/impl/CaseManagerServiceImpl.class
/src/cn/com/mypm/caseManager/blh/CaseManagerBlh.class
/src/cn/com/mypm/bugManager/service/impl/BugManagerServiceImpl.class
/src/cn/com/mypm/bugManager/service/impl/BugCommonServiceImpl.class
/src/cn/com/mypm/bugManager/blh/RelaCaseBlh.class
/src/cn/com/mypm/bugManager/blh/BugManagerBlh.class
/src/cn/com/mypm/bugManager/blh/BugFlowControlBlh.class
/src/cn/com/mypm/bugManager/blh/BugFlowControlBlh$ListObjectComparator.class
3.GenePatchSrcTool 生成的补丁脚本内容
#!/bin/sh
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes
cp -f ./button.properties /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/button.properties
echo 1 replace button.properties success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/resource/webwork
cp -f ./testTaskManager.xml /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/resource/webwork/testTaskManager.xml
echo 2 replace testTaskManager.xml success
mkdir -p /home/mypmcc/sfckMypm/mypm203/gantt
cp -f ./jsgantt.css /home/mypmcc/sfckMypm/mypm203/gantt/jsgantt.css
echo 3 replace jsgantt.css success
mkdir -p /home/mypmcc/sfckMypm/mypm203/gantt
cp -f ./jsgantt.js /home/mypmcc/sfckMypm/mypm203/gantt/jsgantt.js
echo 4 replace jsgantt.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/js
cp -f ./commonFunction_botm.js /home/mypmcc/sfckMypm/mypm203/js/commonFunction_botm.js
echo 5 replace commonFunction_botm.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/js
cp -f ./globalVariable.js /home/mypmcc/sfckMypm/mypm203/js/globalVariable.js
echo 6 replace globalVariable.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/analysisManager
cp -f ./analysisMain.jsp /home/mypmcc/sfckMypm/mypm203/jsp/analysisManager/analysisMain.jsp
echo 7 replace analysisMain.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp
cp -f ./aboutMypm.jsp /home/mypmcc/sfckMypm/mypm203/jsp/aboutMypm.jsp
echo 8 replace aboutMypm.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/userManager
cp -f ./login.js /home/mypmcc/sfckMypm/mypm203/jsp/userManager/login.js
echo 9 replace login.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/userManager
cp -f ./login4Ce.js /home/mypmcc/sfckMypm/mypm203/jsp/userManager/login4Ce.js
echo 10 replace login4Ce.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/userManager
cp -f ./userList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/userManager/userList.jsp
echo 11 replace userList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/userManager
cp -f ./userManger.js /home/mypmcc/sfckMypm/mypm203/jsp/userManager/userManger.js
echo 12 replace userManger.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/taskManager
cp -f ./taskList.js /home/mypmcc/sfckMypm/mypm203/jsp/taskManager/taskList.js
echo 13 replace taskList.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager
cp -f ./flwSetList.js /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager/flwSetList.js
echo 14 replace flwSetList.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager
cp -f ./flwSetList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager/flwSetList.jsp
echo 15 replace flwSetList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager
cp -f ./swTestTaskList.js /home/mypmcc/sfckMypm/mypm203/jsp/singleTestTaskManager/swTestTaskList.js
echo 16 replace swTestTaskList.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/rolemanager
cp -f ./roleList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/rolemanager/roleList.jsp
echo 17 replace roleList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/common
cp -f ./main.js /home/mypmcc/sfckMypm/mypm203/jsp/common/main.js
echo 18 replace main.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/common
cp -f ./pageRefresher.jsp /home/mypmcc/sfckMypm/mypm203/jsp/common/pageRefresher.jsp
echo 19 replace pageRefresher.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/common
cp -f ./refresh.jsp /home/mypmcc/sfckMypm/mypm203/jsp/common/refresh.jsp
echo 20 replace refresh.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager
cp -f ./contextMenu.js /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager/contextMenu.js
echo 21 replace contextMenu.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager
cp -f ./functionList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager/functionList.jsp
echo 22 replace functionList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager
cp -f ./outlineTree.jsp /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager/outlineTree.jsp
echo 24 replace outlineTree.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager
cp -f ./outTree.js /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager/outTree.js
echo 25 replace outTree.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager
cp -f ./testRequirementMain.jsp /home/mypmcc/sfckMypm/mypm203/jsp/outlineManager/testRequirementMain.jsp
echo 26 replace testRequirementMain.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./batchAuditInitList.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/batchAuditInitList.js
echo 27 replace batchAuditInitList.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./batchAuditList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/batchAuditList.jsp
echo 28 replace batchAuditList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseBase.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseBase.js
echo 29 replace caseBase.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseBatchBase.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseBatchBase.js
echo 30 replace caseBatchBase.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseBoard.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseBoard.jsp
echo 31 replace caseBoard.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseHistory.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseHistory.jsp
echo 32 replace caseHistory.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseInitList.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseInitList.js
echo 33 replace caseInitList.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseList.jsp
echo 34 replace caseList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseMgrMain.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseMgrMain.jsp
echo 35 replace caseMgrMain.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseTree.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseTree.js
echo 36 replace caseTree.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./caseTree.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/caseTree.jsp
echo 37 replace caseTree.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./exeHistory.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/exeHistory.js
echo 38 replace exeHistory.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./exeHistory.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/exeHistory.jsp
echo 39 replace exeHistory.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./lastExeCase.js /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/lastExeCase.js
echo 40 replace lastExeCase.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/caseManager
cp -f ./lastExeCase.jsp /home/mypmcc/sfckMypm/mypm203/jsp/caseManager/lastExeCase.jsp
echo 41 replace lastExeCase.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./assignPersion.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/assignPersion.js
echo 42 replace assignPersion.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./baseFuncn.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/baseFuncn.js
echo 43 replace baseFuncn.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./batchAssignBugList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/batchAssignBugList.jsp
echo 44 replace batchAssignBugList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./batchBase.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/batchBase.js
echo 45 replace batchBase.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./batchGrid.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/batchGrid.js
echo 46 replace batchGrid.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./broMsg.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/broMsg.js
echo 47 replace broMsg.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugBoard.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugBoard.jsp
echo 48 replace bugBoard.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugHandling.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugHandling.js
echo 49 replace bugHandling.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMgrLeftTre.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMgrLeftTre.js
echo 50 replace bugMgrLeftTre.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMgrLeftTre.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMgrLeftTre.jsp
echo 51 replace bugMgrLeftTre.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMgrMain.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMgrMain.jsp
echo 52 replace bugMgrMain.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMgrRight.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMgrRight.js
echo 53 replace bugMgrRight.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMgrRight.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMgrRight.jsp
echo 54 replace bugMgrRight.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugMsgList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugMsgList.jsp
echo 55 replace bugMsgList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugTree.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugTree.js
echo 56 replace bugTree.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./bugTree.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/bugTree.jsp
echo 57 replace bugTree.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./detail.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/detail.jsp
echo 58 replace detail.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./edit.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/edit.js
echo 59 replace edit.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./editBug.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/editBug.jsp
echo 60 replace editBug.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./flowCtrl.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/flowCtrl.js
echo 61 replace flowCtrl.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./grid.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/grid.js
echo 62 replace grid.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./handBug.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/handBug.jsp
echo 63 replace handBug.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./history.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/history.js
echo 64 replace history.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./myAllBugbaseFuncn.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/myAllBugbaseFuncn.js
echo 65 replace myAllBugbaseFuncn.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./myAllBugList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/myAllBugList.jsp
echo 66 replace myAllBugList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./myBugList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/myBugList.jsp
echo 67 replace myBugList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./relaBug.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/relaBug.js
echo 68 replace relaBug.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./relaBugList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/relaBugList.jsp
echo 69 replace relaBugList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./relaCase.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/relaCase.js
echo 70 replace relaCase.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./relaCaseList.jsp /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/relaCaseList.jsp
echo 71 replace relaCaseList.jsp success
mkdir -p /home/mypmcc/sfckMypm/mypm203/jsp/bugManager
cp -f ./window.js /home/mypmcc/sfckMypm/mypm203/jsp/bugManager/window.js
echo 72 replace window.js success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl
cp -f ./TestTaskDetailServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl.class
echo 73 replace TestTaskDetailServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl
cp -f ./TestTaskDetailServiceImpl$1.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$1.class
echo 74 replace TestTaskDetailServiceImpl$1.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl
cp -f ./TestTaskDetailServiceImpl$2.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/testTaskManager/service/impl/TestTaskDetailServiceImpl$2.class
echo 75 replace TestTaskDetailServiceImpl$2.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/service
cp -f ./OutLineManagerService.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/service/OutLineManagerService.class
echo 76 replace OutLineManagerService.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/service/impl
cp -f ./OutLineManagerServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/service/impl/OutLineManagerServiceImpl.class
echo 77 replace OutLineManagerServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/dto
cp -f ./OutLineManagerDto.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/dto/OutLineManagerDto.class
echo 78 replace OutLineManagerDto.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/blh
cp -f ./OutLineManagerBlh.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/outlineManager/blh/OutLineManagerBlh.class
echo 79 replace OutLineManagerBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/mapping
cp -f ./OutlineInfo.hbm.xml /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/mapping/OutlineInfo.hbm.xml
echo 80 replace OutlineInfo.hbm.xml success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/mapping
cp -f ./BugBaseInfo.hbm.xml /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/mapping/BugBaseInfo.hbm.xml
echo 81 replace BugBaseInfo.hbm.xml success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object
cp -f ./BugBaseInfo.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/BugBaseInfo.class
echo 82 replace BugBaseInfo.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object
cp -f ./OutlineInfo.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/OutlineInfo.class
echo 83 replace OutlineInfo.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object
cp -f ./TestCaseInfo.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/TestCaseInfo.class
echo 84 replace TestCaseInfo.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object
cp -f ./TestResult.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/object/TestResult.class
echo 85 replace TestResult.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/service
cp -f ./ImpExpManagerService.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/service/ImpExpManagerService.class
echo 86 replace ImpExpManagerService.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/service/impl
cp -f ./ImpExpManagerServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/service/impl/ImpExpManagerServiceImpl.class
echo 87 replace ImpExpManagerServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/dto
cp -f ./ExpBugInfo.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/dto/ExpBugInfo.class
echo 88 replace ExpBugInfo.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh
cp -f ./BugImpExpBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh/BugImpExpBlh.class
echo 89 replace BugImpExpBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh
cp -f ./BugImpExpBlh$1.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh/BugImpExpBlh$1.class
echo 90 replace BugImpExpBlh$1.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh
cp -f ./CaseImpExpBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh/CaseImpExpBlh.class
echo 91 replace CaseImpExpBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh
cp -f ./CaseImpExpBlh$1.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/impExpManager/blh/CaseImpExpBlh$1.class
echo 92 replace CaseImpExpBlh$1.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/framework/security
cp -f ./MenuServlet.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/framework/security/MenuServlet.class
echo 93 replace MenuServlet.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/common/blh
cp -f ./CommonBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/common/blh/CommonBlh.class
echo 94 replace CommonBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/service
cp -f ./CaseManagerService.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/service/CaseManagerService.class
echo 95 replace CaseManagerService.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/service/impl
cp -f ./CaseManagerServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/service/impl/CaseManagerServiceImpl.class
echo 96 replace CaseManagerServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/blh
cp -f ./CaseManagerBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/caseManager/blh/CaseManagerBlh.class
echo 97 replace CaseManagerBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/service/impl
cp -f ./BugManagerServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/service/impl/BugManagerServiceImpl.class
echo 98 replace BugManagerServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/service/impl
cp -f ./BugCommonServiceImpl.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/service/impl/BugCommonServiceImpl.class
echo 99 replace BugCommonServiceImpl.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh
cp -f ./RelaCaseBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh/RelaCaseBlh.class
echo 100 replace RelaCaseBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh
cp -f ./BugManagerBlh.class /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh/BugManagerBlh.class
echo 101 replace BugManagerBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh
cp -f ./BugFlowControlBlh.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh/BugFlowControlBlh.class
echo 102 replace BugFlowControlBlh.class success
mkdir -p /home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh
cp -f ./BugFlowControlBlh$ListObjectComparator.class
/home/mypmcc/sfckMypm/mypm203/WEB-INF/classes/cn/com/mypm/bugManager/blh/BugFlowControlBlh$ListObjectComparator.class
echo 103 replace BugFlowControlBlh$ListObjectComparator.class success