参考# Pulsar升级自动化:一键搞定集群升级与测试 本代码目前支持pulsar升级和测试发送是否正常。工具是copy了helm的一些代码,再加入了一些使用逻辑,来完成类似的功能。 执行的流程如下:
- 执行pulsar的程序安装
- 等待所有的pod完成功能
- 获取token和ip,触发测试。
- 打印测试报告的记录。 这里我使用的命令行是:go-example-cli
|
|
输出结果如下:
这里注意一下,我的test-case是一个测试puslar的springboot服务
测试代码如下:
这里解释一下Install命令是如何实现的
首先再root.go中有如下代码:
newInstallCmd就是实现的install命令,接下来查看一下install.go中的实现
注意这里实例化了event,我来讲解一下event这个包,我再event中有三个文件
event.go 顶级定义事件类
接下来进行实现event的installevent.go
注意是triggerTest触发测试的定义再test_client.go
注意再FinishInstall中,需要调用这个client来进行测试,这个client其实就是上面的test_client.go中实现的。
测试框架
可以看一下参考文档,最核心的是定义Event和JobDefine,来对任务进行管理
查看一下实现的类图
gradle文件如下所示:
其实最好的进步就是,自己操作!!!
这里涉及到了一个知识点模板方法
在这个项目中,主要通过 AbstractJobDefine
抽象类实现了模板方法设计模式。让我来分析一下实现原理:
- 抽象基类设计:
|
|
- 具体实现类示例:
|
|
模板方法模式的核心原理:
-
算法骨架:
AbstractJobDefine
定义了测试任务的基本流程start()
方法作为模板方法,规定了整体执行顺序
-
可变部分:
run()
作为抽象方法,强制子类实现具体测试逻辑beforeRun()
和afterRun()
作为钩子方法,子类可选择性重写
-
不变部分:
- 异常处理机制
- 测试流程的整体框架
- 基础属性的管理
-
扩展机制:
- 新增测试类型只需继承
AbstractJobDefine
- 实现必要的抽象方法
- 可选择性重写钩子方法
- 新增测试类型只需继承
这种设计的优势:
- 代码复用:共同的逻辑在抽象类中实现
- 扩展性强:易于添加新的测试类型
- 维护性好:核心流程集中管理
- 结构清晰:测试逻辑统一规范
使用示例:
|
|
这种设计让整个测试框架更加灵活和可维护,同时保证了测试执行的一致性。这里感谢一下crossoverjie大佬的分享。