Locust + Boomer In Docker

Locust + Boomer In Docker

背景

在壓測時,使用locust + boomer,需要配置python和go環(huán)境,稍微有點(diǎn)麻煩。

每次接口壓測,都需要手動編寫go腳本。

因此想做對boomer做一個封裝,可以快速的完成這些需求,需要支持單接口 + 動態(tài)讀取csv,curl命令

啟動Locust-master

# run locust master
docker run --name locust-master -it -d -p 8089:8089 -p 5557:5557 rikasai/locust-master:latest

Boomer

調(diào)試模式啟動boomer

$ docker run rikasai/boomer:latest --run-tasks worker -master-host=10.0.20.16 --url='http://httpbin.org/post' --method=POST --content-type="application/json"  --raw-data='{"ids": [123,234]}'
--verbose 1
2022/05/17 13:30:44 /usr/src/app/boomer_fasthttp.go:295: Fasthttp is running with these args:
method: POST
url: http://httpbin.org/post
timeout: 10s
post-file:
raw-data: {"ids": [123,234]}
replace-str-index:
json-value-type:
content-type: application/json
disable-keepalive: false
remove-json-string-backslash: true
verbose: true
2022/05/17 13:30:44 /go/pkg/mod/github.com/myzhan/boomer@v1.6.0/boomer.go:214: Running worker
2022/05/17 13:30:44 /usr/src/app/boomer_fasthttp.go:211: resp: {
  "args": {},
  "data": "{\"ids\": [123,234]}",
  "files": {},
  "form": {},
  "headers": {
    "Content-Length": "18",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "fasthttp",
    "X-Amzn-Trace-Id": "Root=1-6283a384-7d87389417a84df642d87a91"
  },
  "json": {
    "ids": [
      123,
      234
    ]
  },
  "url": "http://httpbin.org/post"
}

參數(shù)說明

docker run rikasai/boomer:latest, 啟動一個容器

--run-tasks worker,調(diào)試模式,固定寫法

-master-host=10.0.20.16,指定locust-master的ip

--url='http://httpbin.org/post',請求url

--method=POST,請求方法

--content-type="application/json"

--raw-data='{"ids": [123,234]}'

--verbose 1,打印響應(yīng)結(jié)果

locust worker模式啟動

get請求

# 10.0.20.16 is master ip addr
# 5557 is default port
docker run rikasai/boomer:latest -master-host=10.0.20.16 -master-port=5557 --url='http://httpbin.org/get?a=123' --method=GET

post請求

docker run rikasai/boomer:latest -master-host=10.0.20.16 --url='http://httpbin.org/post' --method=POST --content-type="application/json"  --raw-data='{"ids": [123,234]}'

指定請求頭

docker run rikasai/boomer:latest --run-tasks worker -master-host=10.0.20.16 --url='http://httpbin.org/post' --method=POST --content-type="application/json"  --raw-data='{"ids": [123,234]}'  --json-headers='{"User-Agent": "python-requests/2.22.0"}'

直接使用curl命令

docker run rikasai/boomer:latest --run-tasks worker -master-host=10.0.20.16 --curl="curl --location --request POST 'http://httpbin.org/post' \ --header 'Content-Type: application/json' \ --data-raw '{ "string": "hello,boomer" }'"

動態(tài)讀取csv

docker run -d --name boomer -v /root/data/data.csv:/app/data.csv rikasai/boomer:latest  -master-host=10.0.20.16 --url=http://httpbin.org/post  --method=POST --content-type="application/json"  --raw-data='{"a": "$a", "b": "$b"}'  --replace-str-index='{"$a":0,"$b":1,"$c":2}' --json-value-type "int" --verbose 1

參數(shù)說明

-d,后臺模式啟動容器

--name boomer,指定容器的名字叫boomer,可以隨意起,不重名就行

-v /root/data/data.csv:/app/data.csv,把宿主機(jī)的csv文件掛載到容器里,/root/data/data.csv是宿主機(jī)文件路徑,/app/data.csv是容器里固定路徑

--raw-data='{"a": "a", "b": "b"}',a是取變量a,b是取變量b

--replace-str-index='{"a":0,"b":1,"c":2}',把csv中每一行著的第0值賦給a,第1個值賦給b,第2個賦給c

--json-value-type "int" 指--raw-data中變量的值類型是int類型

/root/data/data.csv內(nèi)容是:

1,2,3
3,4,5
4,5,6
455,56,633

請求log

2022/05/17 14:37:56 /usr/src/app/boomer_fasthttp.go:211: resp: {
  "args": {},
  "data": "{\"a\":1,\"b\":2}",
  "files": {},
  "form": {},
  "headers": {
    "Content-Length": "13",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "fasthttp",
    "X-Amzn-Trace-Id": "Root=1-6283b344-2ec1715202778cff233df950"
  },
  "json": {
    "a": 1,
    "b": 2
  },
  "url": "http://httpbin.org/post"
}

2022/05/17 14:37:56 /usr/src/app/boomer_fasthttp.go:211: resp: {
  "args": {},
  "data": "{\"a\":4,\"b\":5}",
  "files": {},
  "form": {},
  "headers": {
    "Content-Length": "13",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "fasthttp",
    "X-Amzn-Trace-Id": "Root=1-6283b344-155b24075acdcb214e963d51"
  },
  "json": {
    "a": 4,
    "b": 5
  },
  "url": "http://httpbin.org/post"
}

--json-value-type說明

--raw-data='{"a": "$a", "b": "$b"}'

csv內(nèi)容是

1,2,3
3,4,5
4,5,6
455,56,633
  • --json-value-type=intArray,請求結(jié)果是

    {
        "a": [
            3
        ],
        "b": [
            4
        ]
    }
    
  • --json-value-type=string,請求結(jié)果是

    {
        "a": "3",
        "b": "4"
    }
    
  • --json-value-type=interface,請求結(jié)果是

    csv內(nèi)容是

    3,4,5
    aa,bb,cc
    

    先嘗試轉(zhuǎn)換成int類型,轉(zhuǎn)換成成功就是用int值,不成功就是用原始值

    3,4,5轉(zhuǎn)換成

    {
        "a": 3,
        "b": 4
    }
    

    aa,bb,cc轉(zhuǎn)換成int不成功,使用原始值

    {
        "a": "aa",
        "b": "bb"
    }
    
  • 不支持深層json,這里的$b是不支持的。

    {
        "a":{
              "b": "$b"
        }
    }
    

目前動態(tài)替換并不完美,只能是一層json和body。后續(xù)再優(yōu)化一波~

簡書已經(jīng)棄用
全面轉(zhuǎn)向公。眾。號,求關(guān)注一波,跟簡書同名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容