【locust】使用locust + boomer实现对接口的压测
1.【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor2.【Python】万字长文,Locust 性能测试指北3.【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析4.【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?5.【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
6.【locust】使用locust + boomer实现对接口的压测
7.【性能测试】关于系统用户数,并发用户数,在线用户数,吞吐量8.【JMeter】 使用Synchronizing Timer设置请求集合点,实现绝对并发9.【Jmeter】压测mysql数据库中间件mycat10.【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解背景
很早之前,考虑单机执行能力,使用locust做过公司短信网关的压测工作,后来发现了一个golang版本的locust,性能是python版本的5到10倍以上,但是一直没有机会使用。
最近公司想做一个性能测试平台,技术选型要求和开发的语言一致,即golang,所以我想到了boomer,本文为boomer的使用记录。
环境安装
开发环境 | 安装 |
---|---|
Python 3.7 | 略 |
locust 0.11.0 | pip install locustio |
golang | 略 |
boomer | go get github.com/myzhan/boomer |
注:最新版本的boomer兼容了goczmq,需要将locust升级到较高版本才能完成兼容。
脚本编写
master
这部分的代码不重要,只要能启动就行。
from locust import Locust, TaskSet, task
class MyTaskSet(TaskSet):
@task(20)
def hello(self):
pass
class Dummy(Locust):
task_set = MyTaskSet
slave节点(golang/boomer)
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
"github.com/myzhan/boomer"
)
func getDemo() {
start := time.Now()
resp, err := http.Get("http://httpbin.org/get?name=Detector")
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
fmt.Println(resp.Status)
elapsed := time.Since(start)
if resp.Status == "200 OK" {
boomer.RecordSuccess("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), int64(10))
} else {
boomer.RecordFailure("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), "sostreq not equal")
}
}
func postDemo() {
start := time.Now()
info := make(map[string]interface{})
info["name"] = "Detector"
info["age"] = 15
info["loc"] = "深圳"
// 将map解析未[]byte类型
bytesData, _ := json.Marshal(info)
// 将解析之后的数据转为*Reader类型
reader := bytes.NewReader(bytesData)
resp, _ := http.Post("http://httpbin.org/post",
"application/json",
reader)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
elapsed := time.Since(start)
if resp.Status == "200 OK" {
boomer.RecordSuccess("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), int64(10))
} else {
boomer.RecordFailure("http", "sostreq", elapsed.Nanoseconds()/int64(time.Millisecond), "sostreq not equal")
}
}
func main() {
task1 := &boomer.Task{
Name: "sostreq",
// The weight is used to distribute goroutines over multiple tasks.
Weight: 20,
Fn: getDemo,
}
task2 := &boomer.Task{
Name: "sostreq",
// The weight is used to distribute goroutines over multiple tasks.
Weight: 10,
Fn: postDemo,
}
boomer.Run(task1, task2)
}
实际效果如下:
问题
Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH
文中可能存在描述不正确,欢迎大神们指正补充!
感谢阅读,如果觉得对你有帮助,就在右下角点个赞吧,感谢!
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
合集:
性能测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)