接口测试一工具,好不好用,用了就知道
二次开发 fiddlerscript 实现自己的 OnBeforeResponse,开启 fiddler 实时记录抓取指定数据包的请求和回应
static function OnBeforeResponse(oSession: Session) {
if (isautocap && oSession.HostnameIs(filterUrl)) {
if (oSession.responseCode != 200 || oSession.GetResponseBodyAsString().IndexOf("\"errno\":0") != 1){
record(oSession,filePath + "refuse.gor",8);
static function record(oSession:Session,fpath:String,op:int){
oSession.utilDecodeResponse();
var sBuilder = new StringBuilder();
sBuilder.Append("\n"+"Request id: 1 " + getmd5(oSession.url) +" "+ oSession.Timers.ClientBeginRequest.Ticks+" "+getmd5(oSession.PathAndQuery.split('?')[0])+"\n");
sBuilder.Append("Request protocol: " + oSession.isHTTPS+"\n");
sBuilder.Append("Request url: " + oSession.url+"\n");
sBuilder.Append("Request api: " + oSession.PathAndQuery.split('?')[0]+"\n");
从记录的文件中读取数据包原始的请求结构,经中间件处理后,调 requests 库发包
def send(url,method,payload,headers,**attrs):
if method == 'POST':
r = requests.post(url, data=payload, headers=headers,**attrs)
if method == 'GET':
r = requests.get(url, data=payload, headers=headers,**attrs)
return (r.status_code,r.json(),r.headers)
运行时获取包的 response 再经中间件 middleware 修正后续包的 request
def fifoprocess(queue,n):
while True:
try:
n-=1
j=n
str = queue.popleft()
(code,body, header)=process(str)
while(j>0):
queue.append(middleware.rule(str,body,header,queue.popleft()))
j-=1
fifoprocess(queue,n)
利用一个双向队列弹栈发包,修正后再入栈。该方法效率有待改善
middleware 具体算法需根据项目情况自己实现逻辑
def rule(str,body,header,pstr):
"""
url=str.split('Request ')[3].split("?")[0].split(" ")[1].replace("\n","")
if url=='www.3663.com/api/msg/send':
body=eval(body)
token=urllib.parse.quote(body["data"])
pstr,_=re.subn("content=(.*)&","content="+token+"&",pstr)
"""
return pstr
首次运行测试时会根据包返回与记录文件中原包返回做结构化对比,生成差异 white.txt,认为是一次 diff baseline
white.txt
www.xxxx.com/api/index/banner header.Transfer-Encoding
www.xxxx.com/api/room/get header.Content-Length
www.xxxx.com/api/room/init body.data.room_info.stream_status
www.xxxx.com/api/room/init body.data.anchor_info.uid
www.xxxx.com/api/room/init body.data.chat_info.url
www.xxxx.com/api/room/get header.Date
后续测试会根据本次包返回与上次包返回做对比,差异屏蔽掉白名单之后的 diff 作为测试结果供人工校验
也可手动删除 white.txt,连续 2 次测试来生成 baseline
实际测试人员只需确认记录的原包,生成的 white.txt,以及后需的 diff。无需用例无需手工重复执行,简化了其测试成本
同样利用记录文件,读取原包 request 结构自动遍历一些基本的 fuzz 测试 ,如缺参数,空值,无值,字符串裁减、扩展、异常值,超长,特殊值等。
也可自行添加 fuzzcase 如 xss 等
https://github.com/zhangzhao4444/httpapi
如有 bug 和好想法可及时联系我