diff --git a/src/action/rerun.go b/src/action/rerun.go new file mode 100644 index 0000000000000000000000000000000000000000..aae3f4facfadd29932d6e7ea0734895d6f7f6f76 --- /dev/null +++ b/src/action/rerun.go @@ -0,0 +1,19 @@ +package action + +import ( + "github.com/easysoft/zentaoatf/src/biz" + "github.com/easysoft/zentaoatf/src/model" + . "github.com/easysoft/zentaoatf/src/utils" +) + +func Rerun(resultFile string) { + files, scriptDir, langType, _ := GetFailedFiles(resultFile) + + var report = model.TestReport{Path: scriptDir, Env: GetOs(), + Pass: 0, Fail: 0, Total: 0, Cases: make([]model.CaseLog, 0)} + + biz.ExeScripts(files, scriptDir, langType, &report) + + biz.CheckResults(files, scriptDir, langType, &report) + biz.Print(report, scriptDir) +} diff --git a/src/atf.go b/src/atf.go index 2001645bdd196e31e245096149e680a0ea734743..9cc4c2efc26834781808f3be8fec0927c8628353 100644 --- a/src/atf.go +++ b/src/atf.go @@ -14,6 +14,7 @@ func main() { var independentExpectFile bool var fromUrl string + var path string var files strSlice runSet := flag.NewFlagSet("atf run: \n Run test scripts in specified folder", flag.ContinueOnError) @@ -21,6 +22,9 @@ func main() { runSet.StringVar(&langType, "l", "", "Script Language like python, php etc.") runSet.Var(&files, "f", "Script files to run, no need langType if specified") + rerunSet := flag.NewFlagSet("atf rerun: \n Rerun failed test scripts in specified result", flag.ContinueOnError) + rerunSet.StringVar(&path, "p", "", "Test result file path") + genSet := flag.NewFlagSet("atf gen: \n Generate test scripts from zentao test cases", flag.ContinueOnError) genSet.StringVar(&fromUrl, "u", "", "Remote interface for test case export") genSet.StringVar(&langType, "l", "", "Script Language like python, php etc.") @@ -64,6 +68,15 @@ func main() { action.Run(scriptDir, files, langType) } } + case "rerun": + if err := rerunSet.Parse(os.Args[2:]); err == nil { + if path == "" { + rerunSet.Usage() + os.Exit(1) + } else { + action.Rerun(path) + } + } case "gen": if err := genSet.Parse(os.Args[2:]); err == nil { if fromUrl == "" || langType == "" { diff --git a/src/biz/report.go b/src/biz/report.go index b910d1a6ef95c939e6adcc030c4fdac5e7a4c492..ed1fb8bb573d85d3c2cd99b5dad47253361e2fda 100644 --- a/src/biz/report.go +++ b/src/biz/report.go @@ -57,5 +57,5 @@ func Print(report model.TestReport, workDir string) { } } - utils.WriteFile(workDir+"/logs/report.txt", strings.Join(logs, "\n")) + utils.WriteFile(workDir+"/logs/result-"+utils.DateTimeStrLong(time.Now())+".txt", strings.Join(logs, "\n")) } diff --git a/src/misc/enum.go b/src/misc/enum.go index 32d5d99ef239f9ee7295fc30e2c9255a90d54d86..b62d5e0d85d93184ac593e70864fadb0ee9484ec 100644 --- a/src/misc/enum.go +++ b/src/misc/enum.go @@ -33,7 +33,7 @@ func (c ResultStatus) String() string { case PASS: return "PASS" case FAIL: - return "FAILL" + return "FAIL" case SKIP: return "SKIP" } diff --git a/src/utils/date.go b/src/utils/date.go new file mode 100644 index 0000000000000000000000000000000000000000..35d09e44cb664286e3e2b7b896781c4bfe12f527 --- /dev/null +++ b/src/utils/date.go @@ -0,0 +1,21 @@ +package utils + +import ( + "time" +) + +func DateStr(tm time.Time) string { + return tm.Format("2006-01-02") +} + +func TimeStr(tm time.Time) string { + return tm.Format("15:04:05") +} + +func DateTimeStr(tm time.Time) string { + return tm.Format("2006-01-02 15:04:05") +} + +func DateTimeStrLong(tm time.Time) string { + return tm.Format("20060102150405") +} diff --git a/src/utils/file.go b/src/utils/file.go index 3c0bba25be8ef1292a56405b4d66f0af5b383ed0..c068c00ecfb7dadc0ceca296a9aa6f0359e834f3 100644 --- a/src/utils/file.go +++ b/src/utils/file.go @@ -96,6 +96,37 @@ func GetSpecifiedFiles(dirPth string, fileNames []string) (files []string, err e return ret, nil } +func GetFailedFiles(resultFile string) ([]string, string, string, error) { + ret := make([]string, 0) + dir := "" + extName := "" + + content := ReadFile(resultFile) + + reg := regexp.MustCompile(`\nFAIL\s([^\n]+)\n`) + arr := reg.FindAllStringSubmatch(content, -1) + + if len(arr) > 1 { + for _, file := range arr { + if len(file) == 1 { + continue + } + + caseFile := RemoveBlankLine(file[1]) + ret = append(ret, caseFile) + + if dir == "" { + dir = path.Dir(caseFile) + } + if extName == "" { + extName = strings.TrimLeft(path.Ext(caseFile), ".") + } + } + } + + return ret, dir, extName, nil +} + func MkDir(dir string) { if !CheckFileIsExist(dir) { os.Mkdir(dir, os.ModePerm)