性能测试工具 Locust + Boomer In Docker

news2024/12/23 16:41:21

目录

前言:

背景

启动 Locust-master

Boomer

调试模式启动 boomer

locust worker 模式启动

get 请求

post 请求

指定请求头

直接使用 curl 命令

动态读取 csv

--json-value-type 说明


前言:

Locust 是一种开源的性能测试工具,可以帮助我们快速地进行网站、应用程序等的性能测试和压力测试。Boomer 是一种开源的自动化测试工具,可以帮助我们更加方便地进行测试和调试工作。在 Docker 中使用 Locust 和 Boomer 可以帮助我们更加方便地进行测试和调试工作,并且可以更加灵活地进行测试环境的搭建和部署。

背景

在压测时,使用 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/posturl',请求

 

--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。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【js小游戏案例】纯前端实现飞机大战,附带源码

技能: 使用html js css实现飞机大战小游戏 需求: 我军飞机左右移动,并且按空格 可以发射炮弹,敌方飞机从上往下飞,接触到我方炮弹 飞机被歼灭,我军接触到敌军飞机也将会被歼灭,我方飞机吃到道…

【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

文章目录 前言一、 整体1.命名空间:2构造函数:1普通构造2迭代器构造3初始化字符构造4拷贝构造: 3析构函数 二、成员函数实现1.大小1当前大小(size())2总体容量(capacity()) 2.返回头尾迭代器1begin()2end()…

改进的北方苍鹰算法优化BP神经网络---回归+分类两种案例

今天采用前作者自行改进的一个算法---融合正余弦和折射反向学习的北方苍鹰(SCNGO)优化算法优化BP神经网络。 文章一次性讲解两种案例,回归与分类。回归案例中,作者选用了一个经典的股票数据。分类案例中,选用的是公用的UCI数据集。 BP神经网络…

达芬奇密码

《达芬奇密码》是一款由德国人发明的桌游,游戏由2-4个人组成。每个玩家执有一定的数字牌,玩家需隐藏你的数字密码,猜透对手的密码,推测可能的答案,打败对手。 24 块塑料立牌,12 个黑色和12个白色。每块上数…

7-25作业

思维导图 QT窗口代码 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug()<< this->size();this->resize(1000,800);//设置宽高this->setFixedSize(1000,800);//固定宽高//窗口标题this->setWindowTitle("跟党走…

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…

LED芯片 VAS1260IB05E 带内部开关LED驱动器 汽车硬灯带灯条解决方案

VAS1260IB05E深力科LED芯片是一种连续模式电感降压转换器&#xff0c;设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作&#xff0c;并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路&#xff0c;该…

【Linux】进程通信 — 管道

文章目录 &#x1f4d6; 前言1. 通信背景1.1 进程通信的目的&#xff1a;1.2 管道的引入&#xff1a; 2. 匿名管道2.1 匿名管道的原理&#xff1a;2.2 匿名管道的创建&#xff1a;2.3 父子进程通信&#xff1a;2.3.1 read()阻塞等待 2.4 父进程给子进程派发任务&#xff1a;2.5…

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

写在前面 工作中遇到&#xff0c;简单整理人脸识别中&#xff0c;对于模糊程度较高的图像数据&#xff0c;识别率低&#xff0c;错误率高。虽然使用 AdaFace 模型&#xff0c;对低质量人脸表现尤为突出。但是还是需要对 模糊程度高的图像进行丢弃处理当前通过阈值分类&#xff…

8.python设计模式【组合模式】

内容&#xff1a;将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。角色&#xff1a; 抽象组建&#xff08;component&#xff09;叶子组建(Leaf)复合组建(Composite)客户端 (Client) UML 图 举个例子 需求&#xf…

Mysql-MHA高可用

MHA高可用配置及故障切换 一.MySQL MHA 1.什么是MHA &#xff08;&#xff11;&#xff09;MHA (Master High Availability) 是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 &#xff08;&#xff12;&#xff09;MHA的出现就是解决MySQL 单点的问题。 &#xff…

elementui el-table折叠表格,点击主表数据展开从表明细

用element-ui 的el-table实现&#xff1a;主表table可实现展开行显示关联的明细表table的列表数据&#xff0c;效果图如下 <el-tableref"tableData"v-loading"listLoading":data"tableData"row-key"id"borderstripehighlight-curr…

idea中设置maven本地仓库和自动下载依赖jar包

1.下载maven 地址&#xff1a;maven3.6.3 解压缩在D:\apache-maven-3.6.3-bin\apache-maven-3.6.3\目录下新建文件夹repository打开apache-maven-3.6.3-bin\apache-maven-3.6.3\conf文件中的settings.xml编辑&#xff1a;新增本地仓库路径 <localRepository>D:\apache-…

十二、数据结构——二叉树基本概念及特点

数据结构中的二叉树 目录 一、二叉树的基本概念 二、二叉树的特点 三、二叉树的分类 四、二叉树的存储结构 (一)、顺序存储 (二)、链式存储 一、二叉树的基本概念 二叉树是一种重要的数据结构&#xff0c;它是每个节点最多有两个子节点的树结构。在二叉树中&#xff0c;每个…

【源码解析】SpringBoot循环依赖源码解析II

前言 前面已经写过循环以来的分析&#xff0c;对循环依赖有一些了解&#xff0c;【源码解析】Spring循环依赖和三级缓存。简单回顾一下&#xff1a; Spring可以解决Autowired注入的循环依赖 Spring解决不了构造器注入的循环依赖 使用Aysnc注解会导致循环依赖。提前暴露的Bea…

Vue基础 --- 路由

1. 前端路由的概念与原理 1.1 什么是路由 路由&#xff08;英文&#xff1a;router&#xff09;就是对应关系。 1.2 SPA 与前端路由 SPA 指的是一个 web 网站只有唯一的一个 HTML 页面&#xff0c;所有组件的展示与切换都在这唯一的一个页面内完成。 此时&#xff0c;不同…

K8s卷存储详解(二)

K8s卷存储详解&#xff08;二&#xff09; 持久卷持久卷&#xff08;PV&#xff09;持久卷申领&#xff08;PVC&#xff09;存储类&#xff08;StorageClass&#xff09;存储制备器&#xff08;Provisioner&#xff09;PV和PVC的生命周期持久卷的类型CSI 卷快照CSI 卷克隆 投射…

《合成孔径雷达成像算法与实现》Figure2.14

%% 插值核 clc close all clear allN 40; x1 -4:1/N:4-1/N; hx sin(pi*x1)./(pi*x1); if x1 0hx 1; end figure plot(x1,hx,k) axis([-4 4,-0.4 1.2]) grid on arrow([-4,0],[4,0],Color,k,Linewidth,1); arrow([0,-0.4],[0,1.2],Color,k,Linewidth,1); %% 初始样本 x2 1…

第一章 函数的连续与间断与 无穷小量

文章目录 前言一、连续二、间断考点 识别间断点解题思路 三、无穷小量无穷小量的加减运算与比较无穷小的题型与解答 四、曲线的渐近线1、概念2、分类3、例题 前言 一、连续 二、间断 考点 识别间断点 解题思路 三、无穷小量 无穷小量的加减运算与比较 无穷小的题型与解答 四、曲…

高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理

在现代应用系统中&#xff0c;缓存是提高性能和减少数据库负载的重要手段之一。然而&#xff0c;缓存的数据在某些情况下可能会过期或者变得无效&#xff0c;因此需要及时进行清理。在复杂的应用系统中&#xff0c;可能有多个系统、多个模块产生缓存清理需求&#xff0c;而这些…