当前位置: 首页 > news >正文

【locust】使用locust + boomer实现对接口的压测

目录

背景

环境安装

脚本编写

master

slave节点(golang/boomer)

问题

 资料获取方法


背景

很早之前,考虑单机执行能力,使用locust做过公司短信网关的压测工作,后来发现了一个golang版本的locust,性能是python版本的5到10倍以上,但是一直没有机会使用。

最近公司想做一个性能测试平台,技术选型要求和开发的语言一致,即golang,所以我想到了boomer,本文为boomer的使用记录。

环境安装

开发环境安装
Python 3.7
locust 0.11.0pip install locustio
golang
boomergo get github.com/myzhan/boomer

:最新版本的boomer兼容了goczmq,需要将locust升级到较高版本才能完成兼容。

脚本编写

master

这部分的代码不重要,只要能启动就行。

from locust import Locust, TaskSet, taskclass MyTaskSet(TaskSet):@task(20)def hello(self):passclass Dummy(Locust):task_set = MyTaskSet

slave节点(golang/boomer)

package mainimport ("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"] = 15info["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


 资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

http://www.lryc.cn/news/115052.html

相关文章:

  • 亿欧智库:2023中国宠物行业新趋势洞察报告(附下载)
  • 时序数据库 TDengine 与 WhaleStudio 完成相互兼容性测试认证
  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发
  • 负载均衡–HAProxy安装及搭建tidb数据库负载服务
  • Django各种缓存的配置
  • 实现跨域的几种方式
  • OpenCV: 对“google::protobuf::internal::Release_CompareAndSwap”的未定义
  • 无涯教程-Perl - References(引用)
  • 马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能
  • uni-app:实现点击按钮出现底部弹窗(uni.showActionSheet+自定义)
  • flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent
  • 了解以太网通信中的九阳神功 - SOME/IP协议
  • redis List类型命令
  • 【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)
  • 【计算机网络】网络层协议 -- ICMP协议
  • 机器学习---facebook的案例学习
  • OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)
  • ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?
  • PostgreSQL 使用SQL
  • Shell编程基础(十四)文本三剑客(grep)
  • Linux root用户执行修改密码命令,提示 Permission denied
  • Java面向对象学习第三部分
  • python+vue生成条形码码并展示
  • 在线高精地图生成算法调研
  • 【干货】商城系统的重要功能特性介绍
  • MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项
  • LeetCode 130. 被围绕的区域
  • python中2等于2.0吗,python中【1:2】
  • 【2023年11月第四版教材】《第2章-信息技术发展(第一部分)》
  • 【CSS】说说对BFC的理解