原文由花菜发表于TesterHome社区,点击原文链接可与作者间接交换。

背景

在压测时,应用locust + boomer,须要配置python和go环境,略微有点麻烦。每次接口压测,都须要手动编写go脚本。因而想做对boomer做一个封装,能够疾速的实现这些需要,须要反对单接口 + 动静读取csv,curl命令

启动Locust-master

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

Boomer

调试模式启动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 12022/05/17 13:30:44 /usr/src/app/boomer_fasthttp.go:295: Fasthttp is running with these args:method: POSTurl: http://httpbin.org/posttimeout: 10spost-file:raw-data: {"ids": [123,234]}replace-str-index:json-value-type:content-type: application/jsondisable-keepalive: falseremove-json-string-backslash: trueverbose: true2022/05/17 13:30:44 /go/pkg/mod/github.com/myzhan/boomer@v1.6.0/boomer.go:214: Running worker2022/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"}

参数阐明

docker run rikasai/boomer:latest, 启动一个容器

--run-tasks worker,调试模式,固定写法

-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,打印响应后果

locust worker模式启动

get申请

# 10.0.20.16 is master ip addr# 5557 is default portdocker 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" }'"

动静读取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

参数阐明

-d,后盾模式启动容器

--name boomer,指定容器的名字叫boomer,能够随便起,不重名就行

-v /root/data/data.csv:/app/data.csv,把宿主机的csv文件挂载到容器里,/root/data/data.csv是宿主机文件门路,/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内容是:

1,2,33,4,54,5,6455,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内容是

1,2,33,4,54,5,6455,56,633
  • --json-value-type=intArray,申请后果是

    {    "a": [        3    ],    "b": [        4    ]}
  • --json-value-type=string,申请后果是

    {    "a": "3",    "b": "4"}
  • --json-value-type=interface,申请后果是

    csv内容是

    3,4,5aa,bb,cc

    先尝试转换成int类型,转换成胜利就是用int值,不胜利就是用原始值

    3,4,5转换成

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

    aa,bb,cc转换成int不胜利,应用原始值

    {    "a": "aa",    "b": "bb"}
  • 不反对深层json,这里的$b是不反对的。

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

目前动静替换并不完满,只能是一层json和body。后续再优化一波~

原文由花菜发表于TesterHome社区,点击原文链接可与作者间接交换。