背景
很早之前,考慮單機執行能力,使用locust做過公司短信網關的壓測工作,后來發現了一個golang版本的locust,性能是python版本的5到10倍以上,但是一直沒有機會使用。
最近公司想做一個性能測試平台,技術選型要求和開發的語言一致,即golang,所以我想到了boomer,本文為boomer的使用記錄。
環境安裝
開發環境 | 安裝 |
---|---|
Python 3.7 | 略 |
locust 0.11.0 | pip install locustio |
golang | 略 |
boomer | go get github.com/myzhan/boomer |
注:最新版本的boomer兼容了goczmq,需要將locust升級到較高版本才能完成兼容。
腳本編寫
master
這部分的代碼不重要,只要能啟動就行。
from locust import Locust, TaskSet, task
class MyTaskSet(TaskSet):
@task(20)
def hello(self):
pass
class Dummy(Locust):
task_set = MyTaskSet
slave節點(golang/boomer)
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
"github.com/myzhan/boomer"
)
func getDemo() {
start := time.Now()
resp, err := http.Get("http://httpbin.org/get?name=Detector")
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
fmt.Println(resp.Status)
elapsed := time.Since(start)
if resp.Status == "200 OK" {
boomer.RecordSuccess("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), int64(10))
} else {
boomer.RecordFailure("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), "sostreq not equal")
}
}
func postDemo() {
start := time.Now()
info := make(map[string]interface{})
info["name"] = "Detector"
info["age"] = 15
info["loc"] = "深圳"
// 將map解析未[]byte類型
bytesData, _ := json.Marshal(info)
// 將解析之后的數據轉為*Reader類型
reader := bytes.NewReader(bytesData)
resp, _ := http.Post("http://httpbin.org/post",
"application/json",
reader)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
elapsed := time.Since(start)
if resp.Status == "200 OK" {
boomer.RecordSuccess("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), int64(10))
} else {
boomer.RecordFailure("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), "sostreq not equal")
}
}
func main() {
task1 := &boomer.Task{
Name: "sostreq",
// The weight is used to distribute goroutines over multiple tasks.
Weight: 20,
Fn: getDemo,
}
task2 := &boomer.Task{
Name: "sostreq",
// The weight is used to distribute goroutines over multiple tasks.
Weight: 10,
Fn: postDemo,
}
boomer.Run(task1, task2)
}
實際效果如下:
問題
Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH