check.go 3.3 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
		stepArr := utils.ReadCheckpointSteps(scriptFile)
20 21
		expectArr := utils.ReadExpect(scriptFile)
		logArr := utils.ReadLog(logFile)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
22

23
		ValidateTestCase(scriptFile, langType, stepArr, expectArr, logArr, report)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25 26
	}
}

27
func ValidateTestCase(scriptFile string, langType string,
28
	stepArr []string, expectArr [][]string, actualArr [][]string, report *model.TestReport) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
29

30
	stepLogs := make([]model.StepLog, 0)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
31

32
	caseResult := true
aaronchen2k2k's avatar
aaronchen2k2k 已提交
33

aaronchen2k2k's avatar
aaronchen2k2k 已提交
34
	indx := 0
35 36 37
	for _, step := range stepArr {
		stepResult := true

38 39 40
		var expectLines []string
		if len(expectArr) > indx {
			expectLines = expectArr[indx]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
41 42
		}

43 44 45
		var actualLines []string
		if len(actualArr) > indx {
			actualLines = actualArr[indx]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
46 47
		}

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
		checkpointLogs := make([]model.CheckPointLog, 0)

		indx2 := 0
		for _, expect := range expectLines {
			log := "N/A"
			if len(actualLines) > indx2 {
				log = actualLines[indx2]
			}

			pass := MatchString(expect, log, langType)
			if !pass {
				stepResult = false
			}

			cp := model.CheckPointLog{Numb: indx2 + 1, Status: pass, Expect: expect, Actual: log}
			checkpointLogs = append(checkpointLogs, cp)

			indx2++
		}

		step := model.StepLog{Numb: indx + 1, Name: step, Status: stepResult, CheckPoints: checkpointLogs}
		stepLogs = append(stepLogs, step)

		indx++
72 73
	}

74
	if !caseResult {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
75
		report.Fail = report.Fail + 1
76
	} else {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
77
		report.Pass = report.Pass + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
78
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
79
	report.Total = report.Total + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80

81
	cs := model.CaseLog{Path: scriptFile, Status: caseResult, Steps: stepLogs}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
82
	report.Cases = append(report.Cases, cs)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
83 84
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
85 86 87
func Print(report model.TestReport, workDir string) {
	startSec := time.Unix(report.StartTime, 0)
	endSec := time.Unix(report.EndTime, 0)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
88

89 90
	logs := make([]string, 0)

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

aaronchen2k2k's avatar
aaronchen2k2k 已提交
94 95
	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 已提交
96

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

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

103
		if len(cs.Steps) > 0 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104
			count := 0
105 106
			for _, step := range cs.Steps {
				if count > 0 { // 空行
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107 108
					PrintAndLog(&logs, "")
				}
109

110 111 112 113 114 115 116 117 118 119 120 121 122 123
				PrintAndLog(&logs, fmt.Sprintf("  Step %d %s: %t", step.Numb, step.Name, step.Status))

				count1 := 0
				for _, cp := range step.CheckPoints {
					if count1 > 0 { // 空行
						PrintAndLog(&logs, "")
					}

					PrintAndLog(&logs, fmt.Sprintf("    Checkpoint %d: %t", cp.Numb, cp.Status))
					PrintAndLog(&logs, fmt.Sprintf("      Expect %s", cp.Expect))
					PrintAndLog(&logs, fmt.Sprintf("      Actual %s", cp.Actual))

					count1++
				}
124

aaronchen2k2k's avatar
aaronchen2k2k 已提交
125 126 127 128
				count++
			}
		} else {
			PrintAndLog(&logs, "   No checkpoints")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
129
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
130
	}
131

aaronchen2k2k's avatar
aaronchen2k2k 已提交
132
	utils.WriteFile(workDir+"/logs/report.txt", strings.Join(logs, "\n"))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
133
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
134 135 136 137 138

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