使用fiddler修改url返回结果[包括callback结果]
测试场景
举一个实际测试过程中会遇到的例子来说,如:暴风影音官网,头部菜单‘看过’列表,如下所示,在影片名称超长的情况下,页面显示是否会错乱。
产品定的规则是:10字之内显示全称,大于10个字则截断显示以…代替。
测试方法
一般情况下,我们可以轻松找到各种长短的影片名称,但是超长的名称而且还是有特定字数的(边界值测试法)或许一时半会儿想不到,这时我们就要借助fiddler这一强大的工具来帮助我们简化这个过程,方法很多种,我们一一来看:
AutoResponder->bpafter手动实时更改
步骤
-
启动fiddler ,开启抓包;
-
浏览器请求暴风影音官网 www.baofeng.com,成功登录用户;
-
在fiddler工具左侧面板找到看到列表的url请求,鼠标左键将其拖拽至右侧AutoResponder面板中,此时在下方rule列表中新增了一行规则;
-
在下方的Rule Editor第二行,点击右侧下拉三角按钮,在下拉框中选择bpafter,点击右侧Save按钮,此时设置完成。
-
返回浏览器刷新当前页面,点击fiddler,查看抓到的‘看过列表’请求,接口的正常请求结果已返回,但被fiddler拦截,并未返回给浏览器;
-
此时,光标移入结果区,修改返回结果中某一个影片名称为超长,如下图所示,点击上方的绿色按钮run to completion,此时fiddler将修改后的结果返回给浏览器;
-
此时查看页面显示,已为我们修改后的名称了
说明
1.确保AutoResponder面板中选择了’Enable rules‘(使此规则可用)、‘Unmatched requests passthrough’(使不符合规则的依然能按正常请求顺利进行),且新加规则前的复选框是勾选状态
2.rule规则中手动拖拽的默认是完全匹配,在url前有‘EXACT:’,如果是要模糊匹配,去掉此前缀,且修改url;
3.也可以直接fiddler左下角的命令行使用bpafter命令来操作~
优点
每次请求都可以设置不同的返回结果
缺点
一般前端js对于接口的响应都会有超时处理,修改的时间超过了预设的超时时间,前端则视为未响应来处理,这样我们就看不到想要的效果了
AutoResponder->一次性手动预设结果
步骤
-
启动fiddler ,开启抓包;
-
浏览器请求暴风影音官网 www.baofeng.com,成功登录用户;浏览器请求暴风影音官网 www.baofeng.com,成功登录用户;
-
在fiddler工具左侧面板找到看到列表的url请求,鼠标左键将其拖拽至右侧AutoResponder面板中,此时在下方rule列表中新增了一行;
-
此时右击此规则,在弹出的右键菜单中点击在下方的Edit Response此时弹出窗口,如下,fiddler已自动将正常结果也保存了下来
5.在窗口中修改要返回的结果,点击Save;
6.返回浏览器刷新当前页面,此时查看页面显示,已为我们修改后的名称了
说明
1.确保AutoResponder面板中选择了’Enable rules‘(使此规则可用)、‘Unmatched requests passthrough’(使不符合规则的依然能按正常请求顺利进行),且新加规则前的复选框是勾选状态
2.rule规则中手动拖拽的默认是完全匹配,在url前有‘EXACT:’,如果是要模糊匹配,去掉此前缀,且修改url;
优点
设置成功后,且勾选状态下,每次请求都立马自动返回已设定的结果;
缺点
如果接口是jsonp形式的,此方法无效,因为要返回请求参数中所带的动态参数callback,而我们全是写死的
Fiddler Script脚本编写
步骤
1.打开fiddler的CustomRules.js脚本文件(一般情况下位置为C:\Documents and Settings[your user]\My Documents\Fiddler2\Scripts\CustomRules.js)建议下载FiddlerScriptEditor直接在fiddler面板中编辑,相当方便。
2.找到OnBeforeResponse方法,修改其为如下代码:
static function OnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
if (oSession.fullUrl.Contains("http://www.baofeng.net/history/?a=list&page=1&pagesize="))
{
oSession.utilDecodeResponse();//这句加上吧,据说是预防乱码的,可我还没遇到过
var responseStringOriginal = oSession.GetResponseBodyAsString();
var regex = /"title":"(.*?)",/i;
responseStringOriginal = responseStringOriginal.replace(regex, '"title":"一二三四五六七八九十好开心呀",');
oSession.utilSetResponseBody(responseStringOriginal);
}
}
3.点击左上角的’Save’按钮保存脚本(注意Ctrl+S在此处不生效)
4.刷新页面,查看结果,已为我们修改后的了,且按需求截断显示了,哦耶!!
说明
1.如果需要调试,可以用FiddlerObject.alert(变量名)或MessageBox.Show(变量名)来弹窗显示结果
2.我上边使用的是正则匹配,如果修改的是固定的字符串,如将结果中"pid":“2"修改为"name”:2,可以直接一条语句就够了oSession.utilReplaceOnceInResponse(’“pid”:“2”’,’“name”:2’,0)
优点
可以轻松修改带有动态参数值的返回结果,非常灵活方便
缺点
需要有一些编程基础,但其实并不难
其它方法
其实还有很多方法可以实现,我习惯用这几种,方便且容易,如果大家有好的方法也可以留言,大家互相学习。
**PS:第一次写博客,各位多担待!3Q**