提交 f85103c1 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

submit test results to zendao server

上级 2ec6d995
package model package model
import (
"github.com/easysoft/zentaoatf/src/utils/const"
)
type Product struct { type Product struct {
Id int Id int
Code string Code string
...@@ -66,7 +62,7 @@ type CaseLog struct { ...@@ -66,7 +62,7 @@ type CaseLog struct {
Id int Id int
IdInTask int IdInTask int
Path string Path string
Status constant.ResultStatus Status string
Steps []StepLog Steps []StepLog
} }
...@@ -83,3 +79,11 @@ type CheckPointLog struct { ...@@ -83,3 +79,11 @@ type CheckPointLog struct {
Actual string Actual string
Status bool Status bool
} }
type CaseResult struct {
Case string
Version string
Steps map[string]string
Reals map[string]string
}
...@@ -47,11 +47,47 @@ func Get(url string, params map[string]string) (string, bool) { ...@@ -47,11 +47,47 @@ func Get(url string, params map[string]string) (string, bool) {
return string(bodyStr), true return string(bodyStr), true
} else { // 嵌套结构 } else { // 嵌套结构
dataStr := bodyJson.Data dataStr := bodyJson.Data
return dataStr, status == "success" return dataStr, status == "pass"
} }
} }
func Post(url string, params map[string]string) (string, bool) { func PostJson(url string, params map[string]interface{}) (string, bool) {
client := &http.Client{}
bytesData, _ := json.Marshal(params)
req, err := http.NewRequest("POST", url, strings.NewReader(string(bytesData)))
if err != nil {
return "", false
}
//req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("cookie", vari.SessionVar+"="+vari.SessionId)
resp, err := client.Do(req)
if err != nil {
return "", false
}
bodyStr, _ := ioutil.ReadAll(resp.Body)
println(string(bodyStr))
var bodyJson model.ZentaoResponse
json.Unmarshal(bodyStr, &bodyJson)
defer resp.Body.Close()
status := bodyJson.Status
if status == "" { // 非嵌套结构
return string(bodyStr), true
} else { // 嵌套结构
dataStr := bodyJson.Data
return dataStr, status == "pass"
}
}
func PostStr(url string, params map[string]string) (string, bool) {
client := &http.Client{} client := &http.Client{}
paramStr := "" paramStr := ""
...@@ -90,6 +126,6 @@ func Post(url string, params map[string]string) (string, bool) { ...@@ -90,6 +126,6 @@ func Post(url string, params map[string]string) (string, bool) {
return string(bodyStr), true return string(bodyStr), true
} else { // 嵌套结构 } else { // 嵌套结构
dataStr := bodyJson.Data dataStr := bodyJson.Data
return dataStr, status == "success" return dataStr, status == "pass"
} }
} }
...@@ -37,9 +37,9 @@ func LoadTestResults(assert string) []string { ...@@ -37,9 +37,9 @@ func LoadTestResults(assert string) []string {
return ret return ret
} }
func GetTestResult(assert string, date string) []string { func GetTestResultForDisplay(assert string, date string) []string {
mode, name := GetRunModeAndName(assert) mode, name := GetRunModeAndName(assert)
resultPath := vari.Prefer.WorkDir + constant.LogDir + logFolder(mode, name, date) + string(os.PathSeparator) + "result.txt" resultPath := vari.Prefer.WorkDir + constant.LogDir + LogFolder(mode, name, date) + string(os.PathSeparator) + "result.txt"
arr := make([]string, 0) arr := make([]string, 0)
content := fileUtils.ReadFile(resultPath) content := fileUtils.ReadFile(resultPath)
...@@ -62,7 +62,7 @@ func GetTestResult(assert string, date string) []string { ...@@ -62,7 +62,7 @@ func GetTestResult(assert string, date string) []string {
func GetCheckpointsResult(assert string, date string, caseLine string) string { func GetCheckpointsResult(assert string, date string, caseLine string) string {
mode, name := GetRunModeAndName(assert) mode, name := GetRunModeAndName(assert)
resultPath := vari.Prefer.WorkDir + constant.LogDir + logFolder(mode, name, date) + string(os.PathSeparator) + "result.txt" resultPath := vari.Prefer.WorkDir + constant.LogDir + LogFolder(mode, name, date) + string(os.PathSeparator) + "result.txt"
content := fileUtils.ReadFile(resultPath) content := fileUtils.ReadFile(resultPath)
...@@ -101,9 +101,9 @@ func GetLogFileByCase(assert string, date string, file string) string { ...@@ -101,9 +101,9 @@ func GetLogFileByCase(assert string, date string, file string) string {
ext := path.Ext(file) ext := path.Ext(file)
logName := strings.Replace(commonUtils.Base(file), ext, ".log", -1) logName := strings.Replace(commonUtils.Base(file), ext, ".log", -1)
return vari.Prefer.WorkDir + constant.LogDir + logFolder(mode, name, date) + string(os.PathSeparator) + logName return vari.Prefer.WorkDir + constant.LogDir + LogFolder(mode, name, date) + string(os.PathSeparator) + logName
} }
func logFolder(mode string, name string, date string) string { func LogFolder(mode string, name string, date string) string {
return fmt.Sprintf("%s-%s-%s", mode, name, date) return fmt.Sprintf("%s-%s-%s", mode, name, date)
} }
...@@ -34,10 +34,10 @@ func ValidateTestCase(scriptFile string, langType string, ...@@ -34,10 +34,10 @@ func ValidateTestCase(scriptFile string, langType string,
caseId, caseIdInTask := zentaoUtils.GetCaseIds(scriptFile) caseId, caseIdInTask := zentaoUtils.GetCaseIds(scriptFile)
stepLogs := make([]model.StepLog, 0) stepLogs := make([]model.StepLog, 0)
caseResult := constant.PASS caseResult := constant.PASS.String()
if skip { if skip {
caseResult = constant.SKIP caseResult = constant.SKIP.String()
} else { } else {
indx := 0 indx := 0
for _, step := range checkpointStepArr { // iterate by checkpoints for _, step := range checkpointStepArr { // iterate by checkpoints
...@@ -62,18 +62,18 @@ func ValidateTestCase(scriptFile string, langType string, ...@@ -62,18 +62,18 @@ func ValidateTestCase(scriptFile string, langType string,
stepLog := model.StepLog{Id: stepId, Name: step, Status: stepResult, CheckPoints: checkpointLogs} stepLog := model.StepLog{Id: stepId, Name: step, Status: stepResult, CheckPoints: checkpointLogs}
stepLogs = append(stepLogs, stepLog) stepLogs = append(stepLogs, stepLog)
if !stepResult { if !stepResult {
caseResult = constant.FAIL caseResult = constant.FAIL.String()
} }
indx++ indx++
} }
} }
if caseResult == constant.FAIL { if caseResult == constant.FAIL.String() {
report.Fail = report.Fail + 1 report.Fail = report.Fail + 1
} else if caseResult == constant.PASS { } else if caseResult == constant.PASS.String() {
report.Pass = report.Pass + 1 report.Pass = report.Pass + 1
} else if caseResult == constant.SKIP { } else if caseResult == constant.SKIP.String() {
report.Skip = report.Skip + 1 report.Skip = report.Skip + 1
} }
report.Total = report.Total + 1 report.Total = report.Total + 1
......
package testingService package testingService
import ( import (
"encoding/json"
"fmt" "fmt"
"github.com/easysoft/zentaoatf/src/model" "github.com/easysoft/zentaoatf/src/model"
"github.com/easysoft/zentaoatf/src/utils/common" "github.com/easysoft/zentaoatf/src/utils/common"
...@@ -32,7 +33,7 @@ func Print(report model.TestReport, workDir string) { ...@@ -32,7 +33,7 @@ func Print(report model.TestReport, workDir string) {
for _, cs := range report.Cases { for _, cs := range report.Cases {
str := "\n %s %d-%d: %s" str := "\n %s %d-%d: %s"
status := cs.Status.String() status := cs.Status
statusColor := logUtils.ColoredStatus(status) statusColor := logUtils.ColoredStatus(status)
logs = append(logs, fmt.Sprintf(str, status, cs.Id, cs.IdInTask, cs.Path)) logs = append(logs, fmt.Sprintf(str, status, cs.Id, cs.IdInTask, cs.Path))
...@@ -78,4 +79,7 @@ func Print(report model.TestReport, workDir string) { ...@@ -78,4 +79,7 @@ func Print(report model.TestReport, workDir string) {
} }
fileUtils.WriteFile(workDir+constant.LogDir+vari.RunDir+"result.txt", strings.Join(logs, "\n")) fileUtils.WriteFile(workDir+constant.LogDir+vari.RunDir+"result.txt", strings.Join(logs, "\n"))
json, _ := json.Marshal(report)
fileUtils.WriteFile(workDir+constant.LogDir+vari.RunDir+"result.json", string(json))
} }
package testingService package testingService
import ( import (
httpClient "github.com/easysoft/zentaoatf/src/service/client"
"github.com/easysoft/zentaoatf/src/utils/common"
config2 "github.com/easysoft/zentaoatf/src/utils/config" config2 "github.com/easysoft/zentaoatf/src/utils/config"
constant "github.com/easysoft/zentaoatf/src/utils/const"
print2 "github.com/easysoft/zentaoatf/src/utils/print"
) )
func GetZentaoSettings() { func GetZentaoSettings() {
...@@ -14,14 +10,14 @@ func GetZentaoSettings() { ...@@ -14,14 +10,14 @@ func GetZentaoSettings() {
entityType := config.EntityType entityType := config.EntityType
entityVal := config.EntityVal entityVal := config.EntityVal
requestObj := make(map[string]string) requestObj := make(map[string]interface{})
requestObj["entityType"] = entityType requestObj["entityType"] = entityType
requestObj["entityVal"] = entityVal requestObj["entityVal"] = entityVal
url := config.Url //url := config.Url
url = commonUtils.UpdateUrl(url) //url = commonUtils.UpdateUrl(url)
_, _ = httpClient.Post(url+constant.UrlZentaoSettings, requestObj) //_, _ = httpClient.PostJson(url+constant.UrlZentaoSettings, requestObj)
print2.PrintToCmd(url + constant.UrlZentaoSettings) //print2.PrintToCmd(url + constant.UrlZentaoSettings)
//if err == nil { //if err == nil {
// if pass { // if pass {
......
...@@ -2,56 +2,76 @@ package testingService ...@@ -2,56 +2,76 @@ package testingService
import ( import (
"encoding/json" "encoding/json"
"fmt"
"github.com/easysoft/zentaoatf/src/model"
httpClient "github.com/easysoft/zentaoatf/src/service/client" httpClient "github.com/easysoft/zentaoatf/src/service/client"
"github.com/easysoft/zentaoatf/src/utils/common" scriptService "github.com/easysoft/zentaoatf/src/service/script"
config2 "github.com/easysoft/zentaoatf/src/utils/config" configUtils "github.com/easysoft/zentaoatf/src/utils/config"
constant "github.com/easysoft/zentaoatf/src/utils/const" constant "github.com/easysoft/zentaoatf/src/utils/const"
print2 "github.com/easysoft/zentaoatf/src/utils/print" fileUtils "github.com/easysoft/zentaoatf/src/utils/file"
"path" printUtils "github.com/easysoft/zentaoatf/src/utils/print"
"github.com/easysoft/zentaoatf/src/utils/vari"
"os"
"strconv" "strconv"
"strings" "strings"
) )
func SubmitResult(caseList []string) { func SubmitResult(assert string, date string) {
config := config2.ReadCurrConfig() conf := configUtils.ReadCurrConfig()
entityType := config.EntityType report := GetTestTestReportForSubmit(assert, date)
entityVal := config.EntityVal
for _, cs := range report.Cases {
requestObj := make(map[string]string) id := cs.Id
requestObj["entityType"] = entityType runId := cs.IdInTask
requestObj["entityVal"] = entityVal
var uri string
cases := make(map[int]bool) if runId != 0 { // exe case
for _, str := range caseList { uri = fmt.Sprintf("testtask-runCase-%d-%d-1.json", runId, id)
arr := strings.Split(str, " ") } else { // exe task
var status bool uri = fmt.Sprintf("testtask-runCase-%d.json", runId)
str := strings.ToLower(strings.TrimSpace(arr[0]))
if str == "pass" {
status = true
} else {
status = false
} }
caseStr := commonUtils.Base(strings.TrimSpace(arr[1])) requestObj := map[string]string{"case": strconv.Itoa(id), "version": "0"}
name := strings.Replace(caseStr, path.Ext(caseStr), "", -1)
caseIdStr := strings.Split(name, "-")[1]
caseId, _ := strconv.Atoi(caseIdStr)
cases[caseId] = status for _, step := range cs.Steps {
var stepStatus string
if step.Status {
stepStatus = constant.PASS.String()
} else {
stepStatus = constant.FAIL.String()
}
stepResults := ""
for _, checkpoint := range step.CheckPoints {
stepResults += checkpoint.Actual // strconv.FormatBool(checkpoint.Status) + ": " + checkpoint.Actual
}
requestObj["steps["+strconv.Itoa(step.Id)+"]"] = stepStatus
requestObj["reals["+strconv.Itoa(step.Id)+"]"] = stepResults
}
reqStr, _ := json.Marshal(requestObj)
printUtils.PrintToCmd(string(reqStr))
url := conf.Url + uri
_, ok := httpClient.PostStr(url, requestObj)
if ok {
printUtils.PrintToCmd(fmt.Sprintf("success to submit the results for case %d", id))
}
} }
//requestObj["cases"] = cases }
func GetTestTestReportForSubmit(assert string, date string) model.TestReport {
mode, name := scriptService.GetRunModeAndName(assert)
resultPath := vari.Prefer.WorkDir + constant.LogDir + scriptService.LogFolder(mode, name, date) +
string(os.PathSeparator) + "result.json"
reqStr, _ := json.Marshal(requestObj) content := fileUtils.ReadFile(resultPath)
print2.PrintToCmd(string(reqStr)) content = strings.Replace(content, "\n", "", -1)
url := config.Url var report model.TestReport
url = commonUtils.UpdateUrl(url) json.Unmarshal([]byte(content), &report)
_, _ = httpClient.Post(url+constant.UrlSubmitResult, requestObj)
//if err == nil { return report
// if pass {
// utils.PrintToCmd("success to submit the results")
// }
//}
} }
...@@ -16,7 +16,7 @@ func Login(baseUrl string, account string, password string) { ...@@ -16,7 +16,7 @@ func Login(baseUrl string, account string, password string) {
params["account"] = account params["account"] = account
params["password"] = password params["password"] = password
_, ok := client.Post(url, params) _, ok := client.PostStr(url, params)
if ok { if ok {
fmt.Println("succes to login") fmt.Println("succes to login")
} else { } else {
......
...@@ -63,7 +63,7 @@ func ListCaseByTask(baseUrl string, taskId string) []model.TestCase { ...@@ -63,7 +63,7 @@ func ListCaseByTask(baseUrl string, taskId string) []model.TestCase {
func GetCaseById(baseUrl string, caseId string) model.TestCase { func GetCaseById(baseUrl string, caseId string) model.TestCase {
params := [][]string{{"caseID", caseId}} params := [][]string{{"caseID", caseId}}
url := baseUrl + zentaoUtils.GenSuperApiUri("testcase", "getById", params) url := baseUrl + zentaoUtils.GenSuperApiUri("testcase", "getById", params)
dataStr, ok := client.Post(url, nil) dataStr, ok := client.PostStr(url, nil)
if ok { if ok {
var tc model.TestCase var tc model.TestCase
......
package main
func main() {
}
package main
import (
testingService "github.com/easysoft/zentaoatf/src/service/testing"
zentaoService "github.com/easysoft/zentaoatf/src/service/zentao"
)
func main() {
zentaoService.Login("http://ztpmp.ngtesting.org/", "admin", "P2ssw0rd")
testingService.SubmitResult("scripts/all.suite", "2019-08-14T125610")
}
...@@ -65,7 +65,7 @@ func selectResultEvent(g *gocui.Gui, v *gocui.View) error { ...@@ -65,7 +65,7 @@ func selectResultEvent(g *gocui.Gui, v *gocui.View) error {
line, _ := GetSelectedLine(v, ".*") line, _ := GetSelectedLine(v, ".*")
CurrResult = line CurrResult = line
content := scriptService.GetTestResult(CurrAsset, line) content := scriptService.GetTestResultForDisplay(CurrAsset, line)
panelCaseList, _ := g.View("panelCaseList") panelCaseList, _ := g.View("panelCaseList")
panelCaseList.Clear() panelCaseList.Clear()
...@@ -107,9 +107,7 @@ func clearPanelCaseResult() { ...@@ -107,9 +107,7 @@ func clearPanelCaseResult() {
} }
func toUploadResult(g *gocui.Gui, v *gocui.View) error { func toUploadResult(g *gocui.Gui, v *gocui.View) error {
caseList := scriptService.GetTestResult(CurrAsset, CurrResult) testingService.SubmitResult(CurrAsset, CurrResult)
testingService.SubmitResult(caseList)
return nil return nil
} }
......
...@@ -41,17 +41,21 @@ const ( ...@@ -41,17 +41,21 @@ const (
PASS ResultStatus = iota PASS ResultStatus = iota
FAIL FAIL
SKIP SKIP
BLOCKED
) )
func (c ResultStatus) String() string { func (c ResultStatus) String() string {
switch c { switch c {
case PASS: case PASS:
return "PASS" return "pass"
case FAIL: case FAIL:
return "FAIL" return "fail"
case SKIP: case SKIP:
return "SKIP" return "n/a"
case BLOCKED:
return "blocked"
} }
return "UNKNOWN" return "UNKNOWN"
} }
......
...@@ -28,6 +28,10 @@ func PrintSample() { ...@@ -28,6 +28,10 @@ func PrintSample() {
} }
func PrintToSide(msg string) { func PrintToSide(msg string) {
if !vari.RunFromCui {
fmt.Println(msg)
return
}
slideView, _ := vari.Cui.View("side") slideView, _ := vari.Cui.View("side")
slideView.Clear() slideView.Clear()
...@@ -35,6 +39,10 @@ func PrintToSide(msg string) { ...@@ -35,6 +39,10 @@ func PrintToSide(msg string) {
} }
func PrintToMainNoScroll(msg string) { func PrintToMainNoScroll(msg string) {
if !vari.RunFromCui {
fmt.Println(msg)
return
}
mainView, _ := vari.Cui.View("main") mainView, _ := vari.Cui.View("main")
mainView.Clear() mainView.Clear()
...@@ -42,6 +50,10 @@ func PrintToMainNoScroll(msg string) { ...@@ -42,6 +50,10 @@ func PrintToMainNoScroll(msg string) {
} }
func PrintToCmd(msg string) { func PrintToCmd(msg string) {
if !vari.RunFromCui {
fmt.Println(msg)
return
}
cmdView, _ := vari.Cui.View("cmd") cmdView, _ := vari.Cui.View("cmd")
_, _ = fmt.Fprintln(cmdView, msg) _, _ = fmt.Fprintln(cmdView, msg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册