[开源] 一个可以进行逻辑编排的 HTTP 测试机器人框架

835 阅读3分钟

httpbot

github.com/pojol/httpb…

httpbot.png

写在前面,这个框架能为你做什么

  1. 前后分离 在我们的开发过程中,后端会提供非常多的API以供客户端(前端)调用,如果没有自测的工具,依赖客户端测试那么效率显然很慢
  2. 可复用 在开发过程中编写的测试,通常是比较不太那么乐意的,通过这个工具我们能把开发过程中的测试用例尽可能的复用起来,比如集成到 CI 中实现 API测试,或者实现压力测试,在不同的场合调用不同的测试策略(如在 邮件服务CI 中执行特定的 邮件测试流程 等等
  3. 可注入 在测试过程中我们能在用例中注入 不同的参数, 也可以注入 断言 用于检测测试的结果
  4. 多种驱动模型 在这个框架中,我们可以一次性的发起若干机器人进行测试,也可以设定为 每秒发起若干个机器人,设置工厂的生存周期等,同时我们也可以针对单个机器人进行测试 (通过设置 factory 的metadata 传递到策略中
  5. 报表 通过框架整合的测试报表,我们能简单的看到各个测试中的参数,例如qps 等,同时一旦有错误也会用 红色 日志显著标记起来 (factory 中也可以设置发现错误立即停止(或继续执行

特性

  • 可复用的 HTTP 请求动作,在定义完 HTTP 请求之后,我们可以在任意的策略中复用这个定义(可以通过注入改变请求参数
  • 逻辑可编排,我们可以将测试编排到各个不同的策略中,然后针对具体的场景进行各自的测试。
  • 提供工厂方法,让用户可以采用多种驱动模型进行测试,以达到在不同的场景可以进行各自的测试。(C->S的自测,集成在CI步骤中进行API测试,压力测试 等等...

组件

  • 预制阶段
    • Metadata 元数据,用于保存 Bot 在整个生命周期中使用的变量。
    • Card HTTP 请求的包装
  • 编排阶段
    • Timeline 驱动逻辑执行顺序的时间轴
    • Step 用于封装Bot的不同行为。 在这一阶段,您可以注入 参数断言 来控制行为逻辑并检测对与错
    • Strategy 提供Bot的创建方法,以及行为编排(主要是整合Step
  • 驱动阶段
    • Factory 用于批量创建Bot

快速开始


bf, _ := factory.Create(
	factory.WithCreateNum(0),	// run all strategy
	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