• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • wrk — 小巧輕盈的 http 性能測試工具(2)

    發表于:2016-05-31來源:翱翔 Beta作者:欣雨小筑點擊數: 標簽:性能測試工具
    然后是所以線程總共平均每秒鐘完成168個請求. 每秒鐘讀取2.5兆數據量. 可以看到, 相對于專業性能 測試工具 . wrk 的統計信息是非常簡單的. 但是這些信息

      然后是所以線程總共平均每秒鐘完成168個請求. 每秒鐘讀取2.5兆數據量.

      可以看到, 相對于專業性能測試工具. wrk 的統計信息是非常簡單的. 但是這些信息基本上足夠我們判斷系統是否有問題了.

      wrk 默認超時時間是1秒. 這個有點短. 我一般設置為30秒. 這個看上去合理一點.如果這樣執行命令:

      /wrk -t12 -c100 -d30s -T30s http://www.baidu.com

      可以看到超時數就大大降低了, Socket errors 那行沒有了:

      Running 30s test @ http://www.baidu.com

      12 threadsand 100 connections

      ThreadStats Avg Stdev Max +/- Stdev

      Latency 1.16s 1.61s 14.42s 86.52%

      Req/Sec 22.59 19.31 108.00 70.98%

      4534 requestsin 30.10s, 67.25MB read

      Requests/sec: 150.61

      Transfer/sec: 2.23MB

    通過 -d 可以設置測試的持續時間. 一般只要不是太短都是可以的. 看你自己的忍耐程度了.
    時間越長樣本越準確. 如果想測試系統的持續抗壓能力, 采用 loadrunner 這樣的專業測試工具會更好一點.

      想看看響應時間的分布情況可以加上–latency參數:

      wrk -t12 -c100 -d30s -T30s --latencyhttp://www.baidu.com

      Running 30s test @ http://www.baidu.com

      12 threadsand 100 connections

      ThreadStats Avg Stdev Max +/- Stdev

      Latency 1.22s 1.88s 17.59s 89.70%

      Req/Sec 14.47 9.92 98.00 77.06%

      LatencyDistribution

      50% 522.18ms

      75% 1.17s

      90% 3.22s

      99% 8.87s

      3887 requestsin 30.09s, 57.82MB read

      Socketerrors: connect 0, read 2, write 0, timeout 0

      Requests/sec: 129.19

      Transfer/sec: 1.92MB

      可以看到50%在0.5秒以內, %75在1.2s 以內. 看上去還不錯.

      看到這里可能有人會說了, HTTP 請求不會總是這么簡單的, 通常我們會有 POST,GET 等多個 method, 會有 Header, 會有 body 等.

      在我第一次知道有 wrk 這個工具的時候他確實還不太完善, 要想測試一些復雜的請求還有點難度. 現在 wrk 支持 lua 腳本. 在這個腳本里你可以修改 method, header, body, 可以對 response 做一下自定義的分析. 因為是 lua 腳本, 其實這給了你無限的可能. 但是這樣一個強大的功能如果不謹慎使用, 會降低測試端的性能, 測試結果也受到影響.

      一般修改method, header, body不會影響測試端性能, 但是操作 request, response 就要格外謹慎了.

      我們通過一些測試場景在看看怎么使用 lua 腳本.

      POST + header + body.

      首先創建一個 post.lua 的文件:

      wrk.method = "POST"

      wrk.body = "foo=bar&baz=quux"

      wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

      就這三行就可以了, 當然 headers 可以加入任意多的內容.然后執行:

      wrk -t12 -c100 -d30s -T30s --script=post.lua --latencyhttp://www.baidu.com

      當然百度可能不接受這個 post 請求.

      對 wrk 對象的修改全局只會執行一次.通過 wrk 的源代碼可以看到 wrk 對象的源代碼有如下屬性:

      localwrk = {

      scheme = "http",

      host = "localhost",

      port = nil,

      method = "GET",

      path = "/",

      headers = {},

      body = nil,

      thread = nil,

      }

      schema, host, port, path 這些, 我們一般都是通過 wrk 命令行參數來指定.

      wrk 提供的幾個 lua 的 hook 函數:

      setup 函數

      這個函數在目標 IP 地址已經解析完, 并且所有 thread 已經生成, 但是還沒有開始時被調用. 每個線程執行一次這個函數.

      可以通過thread:get(name), thread:set(name, value)設置線程級別的變量.

      init 函數

      每次請求發送之前被調用.

      可以接受 wrk 命令行的額外參數. 通過 — 指定.

      delay函數這個函數返回一個數值, 在這次請求執行完以后延遲多長時間執行下一個請求. 可以對應 thinking time 的場景.

      request函數通過這個函數可以每次請求之前修改本次請求的屬性. 返回一個字符串. 這個函數要慎用, 會影響測試端性能.

      response函數每次請求返回以后被調用. 可以根據響應內容做特殊處理, 比如遇到特殊響應停止執行測試, 或輸出到控制臺等等.

    原文轉自: https://blog.satikey.com/p/5768/wrk-the-compact-and-lightweight-htt

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>