check.go 2.8 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3 4
package biz

import (
	"fmt"
5 6
	"github.com/easysoft/zentaoatf/src/model"
	"github.com/easysoft/zentaoatf/src/utils"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	"strings"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	"time"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9 10
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
func CheckResults(dir string, langType string, report *model.TestReport) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12 13 14
	fmt.Printf("\n=== Begin to analyse test result ===\n\n")

	scriptFiles, _ := utils.GetAllFiles(dir, langType)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
15

aaronchen2k2k's avatar
aaronchen2k2k 已提交
16
	for _, scriptFile := range scriptFiles {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17
		logFile := utils.ScriptToLogName(dir, scriptFile)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
18 19 20 21 22 23 24

		expectContent := utils.ReadExpect(scriptFile)
		logContent := utils.ReadFile(logFile)

		expectContent = strings.Trim(expectContent, "\n")
		logContent = strings.Trim(logContent, "\n")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
25
		Compare(scriptFile, langType, expectContent, logContent, report)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
26 27 28
	}
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
29
func Compare(scriptFile string, langType string, expectContent string, logContent string, report *model.TestReport) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
30 31 32
	expectArr := strings.Split(expectContent, "\n")
	logArr := strings.Split(logContent, "\n")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
33
	checkpoints := make([]model.CheckPointLog, 0)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
34 35

	result := true
aaronchen2k2k's avatar
aaronchen2k2k 已提交
36

aaronchen2k2k's avatar
aaronchen2k2k 已提交
37 38
	indx := 0
	for _, line := range expectArr {
39 40 41 42 43
		line = strings.TrimSpace(line)
		if line == "#" || line == "" {
			continue
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
44
		log := "N/A"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
45 46
		if len(logArr) > indx {
			log = logArr[indx]
47
			log = strings.TrimSpace(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
48 49
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
50
		pass := MatchString(line, log, langType)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
51

aaronchen2k2k's avatar
aaronchen2k2k 已提交
52 53 54 55
		if !pass {
			result = false
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
56
		cp := model.CheckPointLog{Numb: indx + 1, Status: result, Expect: line, Actual: log}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
57
		checkpoints = append(checkpoints, cp)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
58 59

		indx++
60 61 62
	}

	if !result {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
63
		report.Fail = report.Fail + 1
64
	} else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
65
		report.Pass = report.Pass + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
66
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
67
	report.Total = report.Total + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68

aaronchen2k2k's avatar
aaronchen2k2k 已提交
69 70
	cs := model.CaseLog{Path: scriptFile, Status: result, CheckPoints: checkpoints}
	report.Cases = append(report.Cases, cs)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
71 72
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
73 74 75
func Print(report model.TestReport, workDir string) {
	startSec := time.Unix(report.StartTime, 0)
	endSec := time.Unix(report.EndTime, 0)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
76

77 78
	logs := make([]string, 0)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
79 80 81
	PrintAndLog(&logs, fmt.Sprintf("Run scripts in folder \"%s\" on %s OS\n",
		report.Path, report.Env))

aaronchen2k2k's avatar
aaronchen2k2k 已提交
82 83
	PrintAndLog(&logs, fmt.Sprintf("From %s to %s, duration %d sec",
		startSec.Format("2006-01-02 15:04:05"), endSec.Format("2006-01-02 15:04:05"), report.Duration))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
84

aaronchen2k2k's avatar
aaronchen2k2k 已提交
85 86
	PrintAndLog(&logs, fmt.Sprintf("Total: %d, Fail: %d, Pass: %d",
		report.Total, report.Pass, report.Fail))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
87

aaronchen2k2k's avatar
aaronchen2k2k 已提交
88 89
	for _, cs := range report.Cases {
		PrintAndLog(&logs, fmt.Sprintf("\n%s: %t", cs.Path, cs.Status))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
90

aaronchen2k2k's avatar
aaronchen2k2k 已提交
91 92 93 94 95 96
		if len(cs.CheckPoints) > 0 {
			count := 0
			for _, cp := range cs.CheckPoints {
				if count > 0 {
					PrintAndLog(&logs, "")
				}
97

aaronchen2k2k's avatar
aaronchen2k2k 已提交
98 99 100
				PrintAndLog(&logs, fmt.Sprintf("   Line %d: %t", cp.Numb, cp.Status))
				PrintAndLog(&logs, fmt.Sprintf("   Expect %s", cp.Expect))
				PrintAndLog(&logs, fmt.Sprintf("   Actual %s", cp.Actual))
101

aaronchen2k2k's avatar
aaronchen2k2k 已提交
102 103 104 105
				count++
			}
		} else {
			PrintAndLog(&logs, "   No checkpoints")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
106
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107
	}
108

aaronchen2k2k's avatar
aaronchen2k2k 已提交
109
	utils.WriteFile(workDir+"/logs/report.txt", strings.Join(logs, "\n"))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
110
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
111 112 113 114 115

func PrintAndLog(logs *[]string, str string) {
	*logs = append(*logs, str)
	fmt.Println(str)
}