You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
6.1 KiB
243 lines
6.1 KiB
package http |
|
|
|
import ( |
|
"encoding/json" |
|
|
|
"go-common/app/admin/ep/melloi/model" |
|
"go-common/app/admin/ep/melloi/service" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/http/blademaster/binding" |
|
) |
|
|
|
//excute performTest |
|
func doPtest(c *bm.Context) { |
|
var ( |
|
script model.Script |
|
ptestParam model.DoPtestParam |
|
) |
|
userName := c.Request.Form.Get("userName") |
|
param := c.Request.Form.Get("param") |
|
resJtl := c.Request.Form.Get("resJtl") |
|
jmeterLog := c.Request.Form.Get("jmeterLog") |
|
cookie := c.Request.Header.Get("Cookie") |
|
if err := json.Unmarshal([]byte(param), &script); err != nil { |
|
log.Error("sorry,script err(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
log.Info("接口名:(%s),压测脚本路径:(%s)", script.TestName, script.SavePath) |
|
if script.Upload { |
|
testNames := service.QueryTestNamesByJmfile(script.SavePath) |
|
ptestParam = model.DoPtestParam{ |
|
TestNames: testNames, |
|
FileName: script.SavePath, |
|
LoadTime: 1800, |
|
UserName: userName, |
|
Upload: true, |
|
ProjectName: script.ProjectName, |
|
FileSplit: script.FileSplit, |
|
SplitNum: script.SplitNum, |
|
APIHeader: script.APIHeader, |
|
} |
|
} else { |
|
ptestParam = model.DoPtestParam{ |
|
TestNames: service.StringToSlice(script.TestName), |
|
FileName: script.SavePath, |
|
LoadTime: script.LoadTime, |
|
UserName: userName, |
|
URL: script.URL, |
|
FileSplit: script.FileSplit, |
|
SplitNum: script.SplitNum, |
|
APIHeader: script.APIHeader, |
|
} |
|
} |
|
ptestParam.Department = script.Department |
|
ptestParam.Project = script.Project |
|
ptestParam.APP = script.App |
|
ptestParam.Domain = script.Domain |
|
ptestParam.Cookie = cookie |
|
ptestParam.JmeterLog = jmeterLog |
|
ptestParam.ResJtl = resJtl |
|
ptestParam.ScriptID = script.ID |
|
ptestParam.UseBusinessStop = script.UseBusinessStop |
|
ptestParam.BusinessStopPercent = script.BusinessStopPercent |
|
ptestParam.Fusing = script.Fusing |
|
c.JSON(srv.DoPtest(c, ptestParam)) |
|
} |
|
|
|
//addPtest 加压 |
|
func addPtest(c *bm.Context) { |
|
var ptestAdd model.PtestAdd |
|
if err := c.BindWith(&ptestAdd, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
log.Info("AddPtest ----") |
|
c.JSON(nil, srv.AddPtest(c, ptestAdd)) |
|
} |
|
|
|
//stopPtest |
|
func stopPtest(c *bm.Context) { |
|
var ptestJob model.PtestJob |
|
if err := c.BindWith(&ptestJob, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(nil, srv.StopPtest(c, ptestJob)) |
|
} |
|
|
|
//stopAllPtest |
|
func stopAllPtest(c *bm.Context) { |
|
var allPtestStop model.AllPtestStop |
|
if err := c.BindWith(&allPtestStop, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(srv.QueryOrStopAllPtestByJobName(c, allPtestStop.ReportSuID, true, 3)) |
|
} |
|
|
|
//reducePtest |
|
func reducePtest(c *bm.Context) { |
|
var ( |
|
reducePtest model.ReducePtest |
|
resMap = make(map[string]interface{}) |
|
) |
|
if err := c.BindWith(&reducePtest, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
message, err := srv.ReducePtest(c, reducePtest) |
|
if err != nil { |
|
return |
|
} |
|
resMap["message"] = message |
|
c.JSON(resMap, err) |
|
} |
|
|
|
//queryAllJob |
|
func queryAllJob(c *bm.Context) { |
|
var ( |
|
ptestJob model.PtestJob |
|
resMap = make(map[string]interface{}) |
|
) |
|
if err := c.BindWith(&ptestJob, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
ptestJobs, err := srv.QueryOrStopAllPtestByJobName(c, ptestJob.ReportSuID, false, 3) |
|
if err != nil { |
|
log.Error("query ptestJob err", err) |
|
return |
|
} |
|
resMap["ptest_jobs"] = ptestJobs |
|
c.JSON(resMap, err) |
|
} |
|
|
|
//queryAllJobFree queryAll JobFree |
|
func queryAllJobFree(c *bm.Context) { |
|
var ( |
|
ptestJob model.PtestJob |
|
resMap = make(map[string]interface{}) |
|
) |
|
if err := c.BindWith(&ptestJob, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
ptestJobs, err := srv.QueryAllJobFree(c, &ptestJob) |
|
if err != nil { |
|
log.Error("query ptestJob err", err) |
|
return |
|
} |
|
resMap["ptest_jobs"] = ptestJobs |
|
c.JSON(resMap, err) |
|
} |
|
|
|
//doDebug |
|
func doDebug(c *bm.Context) { |
|
var script model.Script |
|
var ptestParam model.DoPtestParam |
|
param := c.Request.Form.Get("param") |
|
userName := c.Request.Form.Get("userName") |
|
if err := json.Unmarshal([]byte(param), &script); err != nil { |
|
log.Error("sorry,script err(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
log.Info("接口名:(%s),压测脚本路径:(%s)", script.TestName, script.SavePath) |
|
if script.Upload { |
|
ptestParam = model.DoPtestParam{ |
|
TestNames: service.QueryTestNamesByJmfile(script.SavePath), |
|
FileName: script.SavePath, |
|
LoadTime: 1800, |
|
UserName: userName, |
|
Upload: true, |
|
ProjectName: script.ProjectName, |
|
ResJtl: script.ResJtl, |
|
JmeterLog: script.JmeterLog, |
|
Department: script.Department, |
|
Project: script.Project, |
|
APP: script.App, |
|
ScriptID: script.ID, |
|
} |
|
} else { |
|
ptestParam = model.DoPtestParam{ |
|
TestNames: service.StringToSlice(script.TestName), |
|
FileName: script.SavePath, |
|
LoadTime: script.LoadTime, |
|
UserName: userName, |
|
ResJtl: script.ResJtl, |
|
JmeterLog: script.JmeterLog, |
|
Department: script.Department, |
|
Project: script.Project, |
|
APP: script.App, |
|
ScriptID: script.ID, |
|
Domain: script.Domain, |
|
} |
|
} |
|
c.JSON(srv.DoPtest(c, ptestParam)) |
|
} |
|
|
|
func doPtestByFile(c *bm.Context) { |
|
var script model.Script |
|
if err := c.BindWith(&script, binding.JSON); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
resJtl := script.ResJtl |
|
jmeterLog := script.JmeterLog |
|
script.ResJtl = "" |
|
script.JmeterLog = "" |
|
resp, err := srv.DoPtestByFile(c, script, resJtl, jmeterLog) |
|
if err != nil { |
|
c.JSON(err, nil) |
|
return |
|
} |
|
c.JSON(resp, err) |
|
} |
|
|
|
//excute batch ptest |
|
func doPtestBatch(c *bm.Context) { |
|
var PtestBatch model.PtestBatch |
|
if err := c.BindWith(&PtestBatch, binding.JSON); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
cookie := c.Request.Header.Get("Cookie") |
|
status, _ := srv.DoPtestArr(c, PtestBatch, cookie) |
|
var doPostMap = make(map[string]string) |
|
doPostMap["status"] = status |
|
c.JSON(doPostMap, nil) |
|
} |
|
|
|
//doPtestByScriptId |
|
func doPtestByScriptId(c *bm.Context) { |
|
var script model.Script |
|
if err := c.BindWith(&script, binding.Form); err != nil { |
|
c.JSON(nil, err) |
|
return |
|
} |
|
cookie := c.Request.Header.Get("Cookie") |
|
executor := c.Request.Form.Get("executor") |
|
c.JSON(srv.DoPtestByScriptId(c, &script, cookie, executor)) |
|
}
|
|
|