• 日常问题记录--使用fiddler自动响应jsonp结构的响应


    #问题表现#

    在使用fiddler做对请求做mock时,有时需要对jsonp格式响应进行映射;

    jsonp响应的特点为callback为一个随机字符串;

    使用普通的fiddler 做mock无法进行正常mock;

    #解决办法#

    1. 保留响应中的callback函数名;
    2. 替换响应内容;

    #实现#

    1. fiddler修改脚本,增加读取本地文件内容的函数;
    2. 修改OnBeforeResponse,替换响应内容;
    3. 下面代码快中OnBeforeResponse被注释的部分根据url中关键词进行替换;
    4. 注意本地文件的编码需要与请求的编码一致;
      static function readFile(filename)
        {
            var fso = new ActiveXObject( "Scripting.FileSystemObject");
            var f = fso.OpenTextFile(filename, 1);
            var s = "";
            while(!f.AtEndOfStream)
                s += f.ReadLine();
            f.Close();
            return s;
        }
    
        static function OnBeforeResponse(oSession: Session) {
            if (m_Hide304s && oSession.responseCode == 304) {
                oSession["ui-hide"] = "true";
            }
            
        /*    if(oSession.url.indexOf("RrjfGetJifenPointList") > 1){
                oSession.utilDecodeResponse();
                var body = oSession.GetResponseBodyAsString();
                var string = readFile("C:\Users\xxx\Desktop\aaabbb.txt");
                var index = body.indexOf('(');
                var b = body.slice(0, index);
                body = b + '('+ string + ')';
                oSession.utilSetResponseBody(body);
            }
          
            if(oSession.url.indexOf("RrjfGetAssistUserList") > 1){
                oSession.utilDecodeResponse();
                var body = oSession.GetResponseBodyAsString();
                var string = readFile("C:\Users\xxx\Desktop\aaabbb.txt");
                var index = body.indexOf('(');
                var b = body.slice(0, index);
                body = b + '('+ string + ')';
                oSession.utilSetResponseBody(body);
            }
    */ if(oSession.url.indexOf("CommonAppointSubmit") > 1){ oSession.utilDecodeResponse(); var body = oSession.GetResponseBodyAsString(); var string = readFile("C:\Users\xxx\Desktop\aaabbb.txt"); var index = body.indexOf('('); var b = body.slice(0, index); body = b + '('+ string + ');}catch(e){}'; oSession.utilSetResponseBody(body); }
    }

    #其他#

    1. fiddler使用微软的JScript,而JScript是可以对windows本地文件做读写,注意包括写操作;
    2. 后续想编写一个自己的fiddler插件,实现jsonp的mock,自动生成jmeter用例,上传指定url到扫描平台等功能,方便日常使用;
    不会炒菜的非专业测试人员
  • 相关阅读:
    面向使用的软件设计随笔04
    面向使用的软件设计随笔03
    面向使用的软件设计随笔02
    面向使用的软件设计随笔01
    阅读笔记16
    阅读笔记15
    阅读笔记14
    阅读笔记13
    如何在Mac OS X上安装 Ruby运行环境
    IOS开发隐藏键盘的4种方法
  • 原文地址:https://www.cnblogs.com/carterzhang/p/7694995.html
Copyright © 2020-2023  润新知