关于Boomer对象一些设计上的疑惑
Weiney opened this issue · 8 comments
关于Boomer对象一些设计上的疑惑
目前Boomer启动压测任务的话有三种方式:
- 使用默认的defaultBoomer对象
- 通过NewBoomer创建DistributedMode模式的Boomer对象
- 通过NewStandaloneBoomer创建StandaloneMode模式的Boomer对象
主流的使用方式是直接使用defaultBoomer来启动Boomer
目前遇到的问题在于:
defaultBoomer对象只对外提供了三个方法: Run、RecordSuccess、RecordFailure。我没有办法新增我自定义拓展的Output接口
如果我想新增自定义的Output接口的话我只能通过NewXXXBoomer新建一个Boomer对象。这么一来的话我就无法使用Boomer的默认启动参数(legacy.go),因为相关参数已经在构造函数被拿走了,重复获取会Panic。于此同时Boomer将这几个参数设置为私有变量外部也无法获取到,如果要解决这个我只能重新定义不冲突的参数。
重新定义参数会与当前现有的压测平台不兼容,导致Slave节点无法注册到Master节点(因为平台默认启动参数的原因,你懂的)
我这边解决这个问题也不算繁琐,但是我在思考是不是咱们框架也有需要完善的地方?比如说能不能优化下NewBoomer和NewStandaloneBoomer的实现,在保证支持默认快速启动方式的同时,尽量将新建的Boomer对象与defaultBoomer的实现看齐。
附上部分我的伪代码:
func main() {
// 调试模式用standAlone模式启动
var customerBoomer *boomer.Boomer
if config.Mode == "debug" {
customerBoomer = boomer.NewStandaloneBoomer(10, 10)
} else {
customerBoomer = boomer.NewBoomer(*masterHost, *masterPort)
}
// 注册生成Tasks
boomerTasks := register.TaskRegister(customerBoomer)
// 启动Boomer
customerBoomer.Run(boomerTasks...)
}
我生成自己的Boomer对象的原因是想通过注入的方式来管理Boomer对象,我想让所有的测试用例在上报数据的时候都使用我提供的Boomer对象,这样方便管理,同时我可以方便的在一个入口切换不同的启动模式。如果使用defaultBoomer的话切换模式时记录数据会有异常。
但愿你能理解我的描述并且清楚我的意图,可以讨论一下,如果有需要我也可以尝试贡献代码,虽然我有点菜
- Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。
- 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。
Boomer是否支持csv文件的读取并传入参数?
@wangchaosheng 不支持的
Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。
- 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。
所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬
目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用
@wangchaosheng 不支持的
大佬请问关于CSV的解析及使用有思路么,如果不支持CSV怎么切换请求数据呢
Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。
- 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。
所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬
目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用
Hello,你们用boomer做压测是怎么切换数据源的呢
Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。
- 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。
所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬
目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用Hello,你们用boomer做压测是怎么切换数据源的呢
目前我这边是通过读取配置中心配置动态注册Task
@wangchaosheng 不支持的
大佬请问关于CSV的解析及使用有思路么,如果不支持CSV怎么切换请求数据呢
为什么一定要用 CSV 来切换请求数据?Boomer 本身并不关心压测数据,本质上只是一个 goroutine 管理。需要在 Task 里做你的压测逻辑。例如 https://github.com/myzhan/boomer/pull/78/files