代码拉取完成,页面将自动刷新
Gobot是一个功能强大的有状态API测试机器人。它提供图形界面进行测试场景的搭建,可以方便的进行测试脚本编写、单步调试和压力测试,并可以在测试过程的每个阶段之间共享和存储状态。
行为树
控制机器人的运行逻辑,使用脚本
控制节点的具体行为(比如发起一次http请求预制
模版节点,在编辑器中直接使用预制过的节点(可通过标签筛选'curl post /bot.run -d '{"Name":"某个机器人"}'
驱动一个阻塞式的机器人,通过这种方式可以方便的集成进CI
中的测试流程压力测试
(可以在配置页设置不同的并发策略报告
查看通过内置的模块+脚本可以使我们拥有丰富的逻辑表达能力,也可以使用全局的(单个bot)meta 结构来维护 bot 的各种状态变更
--[[
每个节点都拥有一个独立属于自己的 .lua 脚本,当节点被执行到的时候会调用 dostring 加载并运行这个脚本
]]--
-- 用户可以在脚本中加载自己想要使用的 “模块”
-- document https://pojol.gitee.io/gobot/#/zh-cn/script/meta
local http = require("http")
-- 定义一些逻辑所需的结构
req = {
body = {}, -- post body
timeout = "10s", -- http timeout
headers = {}, -- http headers
}
-- 当脚本成功加载后,会调用这个 execute 函数
function execute()
-- 用户可以在这里自行定义节点的执行逻辑(例如发送一次http请求
res, err = http.post("url", req)
-- todo
-- 返回值
-- state 状态码
-- res 显示在 Response 面板的信息
return state.Succ, res
end
Module | interface | Description |
---|---|---|
base64 |
encode decode
|
Provides base64 encoding/decoding functionality. |
http |
post get put
|
Support HTTP connection. |
tcp |
dail close write read
|
Support TCP connection. |
websocket |
dail close write read
|
Support WebSocket connection. |
protobuf |
marshal unmarshal
|
Provides Protobuf operations. |
mongoDB |
insert find update delete ... |
Provides MongoDB operations. |
json |
encode decode
|
Offers JSON functionalities. |
md5 | sum |
Calculates MD5 hashes. |
utils |
uuid random
|
Generates random values, UUIDs. |
... | More modules available. |
示例 message.lua 位于 script/ 用户可以参考里面的实现,更改自己项目中的协议包解析方式
-- message.lua
function TCPUnpackMsg(msglen, buf, errmsg)
if errmsg ~= "nil" then
return 0, ""
end
local msg = message.new(buf, ByteOrder, 0)
local msgTy = msg:readi1()
local msgCustom = msg:readi2()
local msgId = msg:readi2()
local msgbody = msg:readBytes(msglen-(2+1+2+2), -1)
return msgId, msgbody
end
function TCPPackMsg(msgid, msgbody)
local msglen = #msgbody+2+1+2+2
local msg = message.new("", ByteOrder, msglen)
msg:writei2(msglen)
msg:writei1(1)
msg:writei2(0)
msg:writei2(msgid)
msg:writeBytes(msgbody)
return msg:pack()
end
-- use
--------------------------------------------------------
-- 使用 proto.marshal 序列化
-- 使用 TCPPackMsg 组装 TCP 报文
local reqbody, errmsg = proto.marshal("HelloReq", json.encode({
Message = "hello",
}))
ret = conn.write(TCPPackMsg(1002, reqbody))
--------------------------------------------------------
-- 2 是 message length 的设计字节长度,conn会首先尝试读取指定的字节数用于解析报文大小
-- 通过 msgid 解析协议报文内容
-- TCPUnpackMsg 用户可以自行定义,不一定按 msgid, msgbody 的形式返回,也可以是 msghead, msgbody 看用户的报文结构设计
msgid, msgbody = TCPUnpackMsg(conn.read(2))
if msgid == 1002 then
body = proto.unmarshal("HelloRes", msgbody)
end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型