myzhan / boomer

A better load generator for locust, written in golang.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于Boomer对象一些设计上的疑惑

Weiney opened this issue · 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的话切换模式时记录数据会有异常。

但愿你能理解我的描述并且清楚我的意图,可以讨论一下,如果有需要我也可以尝试贡献代码,虽然我有点菜

  1. Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。
  2. 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。

Boomer是否支持csv文件的读取并传入参数?

@wangchaosheng 不支持的

  1. Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。

    1. 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。

所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬

目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用

@wangchaosheng 不支持的

大佬请问关于CSV的解析及使用有思路么,如果不支持CSV怎么切换请求数据呢

  1. Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。

    1. 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。

所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬

目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用

Hello,你们用boomer做压测是怎么切换数据源的呢

  1. Boomer 是一个 library,不应该设置启动参数的,需要让调用方来传入。这个是之前考虑不周的地方,挪到 legacy 也是为了日后删除考虑。目前未删除是为了保持兼容。

    1. 当前的压测平台不兼容,这个不是阻塞项哈,平台应该要支持自定义启动参数。

所以意思是说内部的defaultBoomer并不是推荐使用方式对么?最优雅的方式还是NewBoomer对象的话那我这边就没什么问题了,辛苦大佬
目前旧的项目是基于Boomer做的扩展开发,用例和Boomer耦合的过于紧密,目前正着手改造,把Boomer当作纯Library使用

Hello,你们用boomer做压测是怎么切换数据源的呢

目前我这边是通过读取配置中心配置动态注册Task

@wangchaosheng 不支持的

大佬请问关于CSV的解析及使用有思路么,如果不支持CSV怎么切换请求数据呢

为什么一定要用 CSV 来切换请求数据?Boomer 本身并不关心压测数据,本质上只是一个 goroutine 管理。需要在 Task 里做你的压测逻辑。例如 https://github.com/myzhan/boomer/pull/78/files