POST Api 的 Vegeta 负载测试
Posted
技术标签:
【中文标题】POST Api 的 Vegeta 负载测试【英文标题】:Vegeta load test for POST Api 【发布时间】:2016-06-29 14:24:22 【问题描述】:我想使用 vegeta 测试一些 POST API,但 post 有效负载未正确发送。
vegeta 命令:
vegeta attack -targets=tmp -rate=1 -duration=1s | tee results.bin | vegeta report
tmp 文件:
POST http://server-ip/api/salon
@saloninfo.json
saloninfo.json 文件:
"salon_id" : "562737c1ff567dbd5574c814"
基本上,有效负载会变空。
有人可以检查一下,我可能缺少什么。
【问题讨论】:
【参考方案1】:我相信这应该可以解决问题:
POST http://server-ip/api/salon
Content-Type: application/json
@saloninfo.json
【讨论】:
【参考方案2】:在这里提到另一种方式。如果您熟悉golang
import (
"os"
"time"
"net/http"
vegeta "github.com/tsenart/vegeta/lib"
)
func customTargeter() vegeta.Targeter
return func(tgt *vegeta.Target) error
if tgt == nil
return vegeta.ErrNilTarget
tgt.Method = "POST"
tgt.URL = "http://server-ip/api/salon" // your url here
payload := `
"salon_id" : "562737c1ff567dbd5574c814"
` // you can make this salon_id dynamic too, using random or uuid
tgt.Body = []byte(payload)
header := http.Header
header.Add("Accept", "application/json")
header.Add("Content-Type", "application/json")
tgt.Header = header
return nil
func main()
rate := vegeta.RateFreq: 1, Per: time.Second // change the rate here
duration := 1 * time.Minute // change the duration here
targeter := customTargeter()
attacker := vegeta.NewAttacker()
var metrics vegeta.Metrics
for res := range attacker.Attack(targeter, rate, duration, "Whatever name")
metrics.Add(res)
metrics.Close()
reporter := vegeta.NewTextReporter(&metrics)
reporter(os.Stdout)
我在这里所做的是,为攻击者对象提供速率、持续时间和目标函数。使用以下命令运行脚本:
go run name_of_the_file.go
NewTextReporter
用于在终端本身打印结果。 vegeta
库中还有其他类型的记者。根据需要使用它们。
【讨论】:
如果我想动态生成不同的有效载荷,这种方法非常方便/有用。【参考方案3】:我相信这是因为您需要设置content type: application/json
。
不幸的是,文档和 github 问题间接地提到了它,但没有指明它应该在哪里,无论是作为 json 的标头还是在像 Curl 这样的 vegeta 命令中。仍然在这里寻找答案。
【讨论】:
以上是关于POST Api 的 Vegeta 负载测试的主要内容,如果未能解决你的问题,请参考以下文章
使用 vs2008 进行负载测试,如何从被测系统获取统计信息?