关于docker:Locust-Boomer-In-Docker

66次阅读

共计 4062 个字符,预计需要花费 11 分钟才能阅读完成。

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

背景

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

调试模式启动 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"
}

参数阐明

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 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"}'"

动静读取 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,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 内容是

1,2,3
3,4,5
4,5,6
455,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,5
    aa,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 社区,点击原文链接可与作者间接交换。

正文完
 0