【问题标题】:Vegeta Load Testing: different body for each POST request in the attackVegeta 负载测试:攻击中每个 POST 请求的不同主体
【发布时间】:2017-09-12 14:31:36
【问题描述】:

有没有办法改变 vegeta 中的 json 正文 在 vegeta 中发布请求负载测试。

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

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

data.json 看起来像

{
   "id": 1234
}

最好的方法是什么让我们对攻击中的每个请求都有不同的请求数据?

【问题讨论】:

    标签: performance-testing load-testing vegeta


    【解决方案1】:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

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

        1. Install Directory Listing Config插件使用JMeter插件管理器

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          相关资源
          最近更新 更多