有没有办法改变vegeta Post请求负载测试中的json主体?
我想为每个请求发送一个在json主体中具有不同参数的请求。例如,如果我有
POST https://endpoint.com/createNew
@/targets/data.jsondata.json看起来像是
{
"id": 1234
}让攻击中的每个请求都有不同的请求数据的最佳方法是什么?
发布于 2018-10-16 17:43:12
我需要做一些类似的事情,并决定使用vegeta lib而不是cli来控制HTTP请求
因此您需要编写自己函数,它返回一个vegeta.Targeter
func NewCustomTargeter() vegeta.Targeter {
return func(tgt *vegeta.Target) error {
if tgt == nil {
return vegeta.ErrNilTarget
}
tgt.Method = "POST"
tgt.URL = "https://endpoint.com/createNew"
rand := generateFourDigitRandom()
payload := '{ "id":"`+rand+ `" } `
tgt.Body = []byte(payload)
return nil
}
}并在main函数中使用此函数,如下所示
targeter := NewCustomTargeter()
attacker := vegeta.NewAttacker()
var metrics vegeta.Metrics
for res := range attacker.Attack(targeter, rate, duration, "Load Test") {
metrics.Add(res)
}
metrics.Close()
fmt.Printf("%+v \n", metrics)发布于 2018-11-22 02:08:38
2018年7月10日,vegeta#PR300推出了-format=json选项。下面是vegeta README的描述:
格式使得与动态生成目标的程序的集成变得更容易。每个目标在其自己的行中是一个JSON对象。方法和url字段是必需的。如果存在,body字段必须采用base64编码。生成的JSON Schema详细定义了格式。
以及他们提供的示例:
jq -ncM '{method: "GET", url: "http://goku", body: "Punch!" | @base64, header: {"Content-Type": ["text/plain"]}}' |
vegeta attack -format=json -rate=100 | vegeta encode发布于 2017-04-17 13:12:53
如果您在targets文件夹下有多个文件,并且希望在负载测试中使用所有这些文件,我建议使用以下配置:

targets文件夹:
${__FileToString(${文件名},,)}

targets目录中选取下一个文件,并将其内容用作请求主体
https://stackoverflow.com/questions/43443586
复制相似问题