httpbot
github.com/pojol/httpb…

写在前面,这个框架能为你做什么
前后分离
在我们的开发过程中,后端会提供非常多的API以供客户端(前端)调用,如果没有自测的工具,依赖客户端测试那么效率显然很慢
可复用
在开发过程中编写的测试,通常是比较不太那么乐意的,通过这个工具我们能把开发过程中的测试用例尽可能的复用起来,比如集成到 CI 中实现 API测试
,或者实现压力测试
,在不同的场合调用不同的测试策略(如在 邮件服务CI 中执行特定的 邮件测试流程 等等
可注入
在测试过程中我们能在用例中注入 不同的参数
, 也可以注入 断言
用于检测测试的结果
多种驱动模型
在这个框架中,我们可以一次性的发起若干机器人进行测试,也可以设定为 每秒发起若干个机器人,设置工厂的生存周期等,同时我们也可以针对单个机器人进行测试 (通过设置 factory 的metadata 传递到策略中
报表
通过框架整合的测试报表,我们能简单的看到各个测试中的参数,例如qps 等,同时一旦有错误也会用 红色
日志显著标记起来 (factory 中也可以设置发现错误立即停止(或继续执行
特性
可复用
的 HTTP 请求动作,在定义完 HTTP 请求之后,我们可以在任意的策略中复用这个定义(可以通过注入改变请求参数
- 逻辑
可编排
,我们可以将测试编排到各个不同的策略中,然后针对具体的场景进行各自的测试。
- 提供工厂方法,让用户可以采用
多种驱动模型
进行测试,以达到在不同的场景可以进行各自的测试。(C->S的自测,集成在CI步骤中进行API测试,压力测试 等等...
组件
- 预制阶段
- Metadata 元数据,用于保存 Bot 在整个生命周期中使用的变量。
- Card HTTP 请求的包装
- 编排阶段
- Timeline 驱动逻辑执行顺序的时间轴
- Step 用于封装Bot的不同行为。 在这一阶段,您可以注入
参数
和 断言
来控制行为逻辑并检测对与错
- Strategy 提供Bot的创建方法,以及行为编排(主要是整合Step
- 驱动阶段
快速开始
bf, _ := factory.Create(
factory.WithCreateNum(0),
factory.WithLifeTime(time.Minute),
factory.WithRunMode(factory.FactoryModeStatic),
factory.WithMatchUrl([]string{
"/v1/login/guest",
"/v1/base/account.info"
}),
)
defer bf.Close()
bf.Append("default strategy", func(url string, client *http.Client) *httpbot.Bot {
md, err := rprefab.NewBotData()
if err != nil {
panic(err)
}
bot := httpbot.New(md,
client,
httpbot.WithName("default bot"))
defaultStep := prefab.NewStep()
guestLoginCard := prefab.NewGuestLoginCard(md)
guestLoginCard.Base.InjectAssert("token assert", func() error {
return assert.NotEqual(md.Token, "")
})
defaultStep.AddCard(guestLoginCard)
bot.Timeline.AddStep(step)
return bot
})
bf.Run()
输出预览
/v1/login/guest Req count 1 Consume 26ms Succ rate 1/1 0kb / 0kb
+---------------------------------------------------------------------------------------+
Req url Req count Average time Succ rate
/v1/login/guest 1 26ms 1/1 0kb / 0kb
+---------------------------------------------------------------------------------------+
robot : 1 req count : 1 duration : 1s qps : 1 errors : 0
/v1/base/account.info not match
coverage 1 / 2