6

有没有办法在 vegeta.post 请求负载测试中更改 json 主体。

我想在每个请求的 json 正文中发送一个带有不同参数的请求。例如,如果我有

POST https://endpoint.com/createNew
@/targets/data.json

和 data.json 看起来像

{
   "id": 1234
}

最好的方法是什么,以便我们为攻击中的每个请求提供不同的请求数据?

4

3 回答 3

10

我需要做一些类似的事情,并决定为此使用 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
    }
}

并像这样在主函数中使用这个函数

    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-10-16T09:43:11.650 回答
2

2018 年 7 月 10 日,vegeta#PR300引入了该-format=json选项。这是vegeta README描述:

JSON 格式使得与动态生成目标的程序的集成更加容易。每个目标都是在其自己的行中的一个 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
于 2018-11-21T18:08:38.403 回答
-6

如果您在targets文件夹下有多个文件并且想在负载测试中使用它们,我建议您进行以下配置:

  1. 使用 JMeter Plugins Manager安装目录列表配置插件

    JMeter 目录列表配置安装

  2. 将其配置为指向您的targets文件夹:

    目录列表配置 - 配置

  3. 在您的HTTP 请求采样器中使用__FileToString()函数,例如:

    ${__FileToString(${filename},,)}
    

    在请求正文中使用文件

  4. 当您运行测试时,它将从targets目录中获取下一个文件并将其内容用作请求正文

    JMeter 目录列表配置在行动

于 2017-04-17T05:12:53.010 回答