离开游戏行业了,分享一个非常灵活好用游戏服务器压力测试工具,压测新手流程、活动、副本都用它,如果你有一定的编程基础,不妨试一试。
下载
访问 https://gitee.com/lutianming/supersheeps_extend/releases
下载最新版本的 zip 压缩包,解压并双击 exe 程序,默认启动单机模式
访问 web 后台
第一种:在 supersheeps 控制台输入 0,键入回车
第二种:浏览器访问 http://127.0.0.1:1080 或者 http://[::1]:1080
进入 web 后台 “用例管理”,在 “录制” 项点击 “开启”,此时已经准备好进行用例录制。(开始录制前记得删除旧的数据)
再将要录制的游戏客户端配置好代理方式,启动客户端进行操作录制,这里我用一个 python 脚本模拟此过程,录制一条 http 请求,获取百度首页。
import requests
if __name__ == "__main__":
proxyies = {'http':'http://127.0.0.1:1080', 'https':'http://127.0.0.1:1080'}
res = requests.get(url='http://www.baidu.com', proxies=proxyies)
print(res.status_code)
运行完上面的 python 脚本,就生成了一条默认用例,用例内容默认存储在 default.db 文件中
此时在 “录制” 项点击 “关闭”
在 web 后台 “任务管理”,我们如图配置任务信息,并点击 “添加”
在刚添加的任务点击 “开始” 执行任务,观察控制台日志输出,或者查看 log 目录下 task* 命名的日志文件。
不出意外任务会正确执行并自动结束
可以从任务列表末尾产看报表
任务结束自动保存报表到 report 目录,通过 web 后台 “测试报告” 可以查看历史报表
--http插件使用示例
local http_controller = require "http_plugin.controller"
local router = require "router"
function EventStart(task)
Log(LOG_NORMAL,"EventStart", task)
local paly_fast = false
local run_count = 1
local params = task.params
if params.PlayFast then paly_fast = true end
if params.RunCount then run_count = tonumber(params.RunCount) end
http_controller.init(router, paly_fast, run_count) --初始化,设置路由、播放模式、及执行次数
end
function EventConnectOpen(ip, port, protocol)
Log(LOG_DEBUG,"EventConnectOpen")
http_controller.connection_open(ip, port, protocol)
end
function EventConnectClose(ip, port, protocol)
Log(LOG_DEBUG,"EventConnectClose")
http_controller.connection_close(ip, port, protocol)
end
function EventConnectSend(ip, port, data, protocol)
Log(LOG_DEBUG,"EventConnectSend")
http_controller.connection_send(ip, port, data, protocol)
end
function EventConnectMade(hsock)
Log(LOG_DEBUG,"EventConnectMade")
http_controller.connection_made(hsock)
end
function EventConnectFailed(hsock, err)
Log(LOG_DEBUG,"EventConnectFailed")
http_controller.connection_failed(hsock)
end
function EventConnectClosed(hsock, err)
Log(LOG_DEBUG,"EventConnectClosed")
http_controller.connection_closed(hsock, err)
end
function EventConnectRecved(hsock, data)
Log(LOG_DEBUG,"EventConnectRecved data, len", #data)
--Log(3, "Tcp Socket Connect Recved:", #data)
http_controller.connection_recved(hsock, data)
end
function EventTimeOut()
--Log(LOG_DEBUG,"EventStart")
http_controller.timeout()
end
function EventStop(msg)
Log(LOG_FAULT,"EventStop:",msg)
end
--伪代码
EventStart() --开始
while(true){
EventTimeout()
if player_state != stop && event != NULL then
case event:
-- EventConnectOpen() ➡ pause
-- EventConnectMade() ➡ play
-- EventConnectFaild() ➡ stop
-- EventConnectSend() ➡ pause
-- EventConnectRecved() ➡ play
-- EventConnectClose() ➡ stop
-- EventConnectClosed() ➡ stop
end
}
EventStop() --结束
local router = {}
router["/"] = function(conn, req) --接口路由,即使不写该请求也会被默认处理
Log(LOG_NORMAL, "http请求:", req)
--PlayPause() --发送请求之后暂停执行,等待本次返回
--conn.ssl = true --启用ssl连接
conn.on_response = function(conn, res) --http接口返回回调
Log(LOG_NORMAL, "http 返回:", res.status_code, res.status)
--PlayNormal() --接收返回后继续执行
end
conn.on_ws_request = function(conn, message) --websocket发送回调
Log(LOG_NORMAL, "websocket 发送:", message)
return message
end
conn.on_ws_response = function(conn, message) --websocket接收回调
Log(LOG_NORMAL, "websocket 接收:", message)
end
conn.on_close = function(conn, err) --连接关闭回调函数
Log(LOG_NORMAL, "http关闭:", err)
end
end
-- router["*"] = function(http, req) --这个路由用于接收所有未知的接口,用户可以更加自由的组织自己的代码
-- print(req.uri)
-- end
return router