接口自动化框架之Fiddler一键上传接口信息

下面我们主要讲下fiddler+C#实现的一键上传到云扫描,接口fuzz,mock在fiddler上的应用 :

 

一键上传到云扫描:

fiddler选择请求,把request和response,header等上传到指定接口存入数据库,Jenkins构建接口框架工程再调用这些数据来发送请求和验证结果

如图:

1.实现服务端接口接收请求数据,存入数据库或者jenkins可扫描的文件区域

2.开发fiddler插件实现收集请求,发送请求

 

 关键代码-获取每个请求的请求url和请求结果:

FiddlerApplication.UI.mnuSessionContext.MenuItems.Add(0, this.hideURLMenu);        //将菜单项添加到右键菜单上

//获取所选请求的请求url和请求结果
Session[] selectSessions = FiddlerApplication.UI.GetSelectedSessions(); foreach (Session session in selectSessions) { request = session.fullUrl; response = session.GetResponseBodyAsString();
//upload request and response
}

 具体插件开发请看官网 api:

http://docs.telerik.com/fiddler/Extend-Fiddler/ExtendWithDotNet

 

 

 Fuzz、Mock:

 

Fuzz测试:

选择接口,fiddler解析参数,并赋不同的值(空,参数缺失,字符数字符号,超长等)给参数后发送请求,看是否有异常情况

看下图 对请求的page参数做fuzz:  发送的请求会在fiddler上实时生成结果,并在面板打印日志

 

具体日志结果

模糊测试开始:

[出错key]: page 参数设置为空
[URL出错啦]: http://bro.flyme.cn/static/card/get?page=&city=&language=zh_CN&locale=CN&os=23&mzos=6&screen_size=1440x2560&device_model=PRO6Plus&v=9.0.0&vc=9000000&firmware_type=normal

[Error]: 远程服务器返回错误: (420) 420。 [Result]:

 

[出错key]: page 参数设置为 sdfsdfsdfsdf
[URL出错啦]: http://bro.flyme.cn/static/card/get?page=sdfsdf&city=&language=zh_CN&locale=CN&os=23&mzos=6&screen_size=1440x2560&device_model=PRO6Plus&v=9.0.0&vc=9000000&firmware_type=normal

[Error]: 远程服务器返回错误: (420) 420。 [Result]:

 

[出错key]: page 参数设置为 123123
[URL出错啦]: http://bro.flyme.cn/static/card/get?page=123123&city=&language=zh_CN&locale=CN&os=23&mzos=6&screen_size=1440x2560&device_model=PRO6Plus&v=9.0.0&vc=9000000&firmware_type=normal
[Error]: 远程服务器返回错误: (420) 420。 [Result]:

[出错key]: page 丢失
[URL出错啦]: http://bro.flyme.cn/static/card/get?city=&language=zh_CN&locale=CN&os=23&mzos=6&screen_size=1440x2560&device_model=PRO6Plus&v=9.0.0&vc=9000000&firmware_type=normal
[Error]: 远程服务器返回错误: (420) 420。 [Result]:

 

Mock:

主要解析返回的json,对里面指定key的value进行改造成自己想要的值,用于测试页面是否能承载空值,超长字符,特殊字符,请求500,404等情况

 

 关键代码-替换json数据:

Regex reg = new Regex("(?<=\"name\":\")[^\",]*");
//在response之前回调方法
public void AutoTamperResponseBefore(Session oSession) {
        if (text.Trim() != "") {
            if (oSession.fullUrl.Contains(Constants.replaceRequest))
            {
                string re = reg.Replace(oSession.GetResponseBodyAsString(), text.Trim());
                oSession.utilSetResponseBody(re);
            }
           
        }
       
    }

 

posted @ 2017-03-22 13:28  q55091  阅读(862)  评论(3编辑  收藏  举报