由于go语言自带多线程处理,所以性能测试的目标如果是中间件的话,可以使用此测试桩模拟Server
package main
import (
"encoding/json"
"fmt"
"net/http"
"time"
"strconv"
"log"
)
var count int
func main() {
fmt.Println("This is use for test!")
http.HandleFunc("/login", loginTask)
err := http.ListenAndServe(":8000", nil)
if err != nil {
fmt.Println("ListenAndServe error: ", err.Error())
}
}
type BaseJsonBean struct {
Code int `json:"code"`
Data interface{} `json:"data"`
Message string `json:"message"`
}
func NewBaseJsonBean() *BaseJsonBean {
return &BaseJsonBean{}
}
func checkError(e error) {
if e != nil{
fmt.Println(e)
}
}
func loginTask(w http.ResponseWriter, req *http.Request) {
count++
log.Println("count:",count)
req.ParseForm()
param_userName, found1 := req.Form["userName"]
param_password, found2 := req.Form["passWord"]
param_sleepTime,found3 := req.Form["sleepTime"]
param_filldata,found4 := req.Form["filldata"]
if !(found1 && found2 && found3 && found4) {
fmt.Fprint(w, "param error")
return
}
result := NewBaseJsonBean()
userName := param_userName[0]
password := param_password[0]
sleepTime := param_sleepTime[0]
filldata := param_filldata[0]
rs := []rune(filldata)
filldataReturn := string(rs[0:1000])
sleepTimeInt, inputErr := strconv.Atoi(sleepTime)
checkError(inputErr)
time.Sleep(time.Duration(sleepTimeInt) * time.Second)
if userName == "123" && password == "123" {
result.Code = 100
result.Message = "200 OK" + filldataReturn
} else {
result.Code = 101
result.Message = "403"
}
bytes, _ := json.Marshal(result)
fmt.Fprint(w, string(bytes))
}