接口自动化框架之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);
}
}
}