搜索
简帛阁>技术文章>loadrunner 脚本开发-url解码

loadrunner 脚本开发-url解码

url解码

by:授客 QQ1033553122

 

脚本结构如下:

 

 


 

 

Action.c中的代码如下:

 

int htoi(char *s)

{

    int value = 0;

    int c = 0;

 

 

    c = ((unsigned char *)s)[0];

 

    if (isupper(c))

    {

        c = tolower(c);

    }

 

    value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;

 

    c = ((unsigned char *)s)[1];

    if (isupper(c))

    {

        c = tolower(c);

 

    }

 

    value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;

 

    return (value);

}

 

void url_decode(char *str, int len)

{

    char *dest = str;

    char *data = str;

    char *dst = NULL;

 

    dest = (char*)malloc(len + 1);

    dst = dest;

 

    while (len--) 

    {

        if (*data == '+')

        {

            *dest = ' ';

        } 

        else if (*data == '%' && len >= 2 &&

                 isxdigit((int) *(data + 1)) &&

                 isxdigit((int) *(data + 2)))   

        {

            #ifndef CHARSET_EBCDIC

               *dest = (char)htoi(data + 1);  

            #else

                *dest = os_toebcdic[(char) htoi(data + 1)];

            #endif

 

            data += 2;

            len -= 2;

        }

        else

        {

            *dest = *data;

        }

 

        data++;

        dest++;

    }

    *dest = '\0';

 

    lr_output_message(dst);

    free(dest);

    dest = NULL;

    dst = NULL;

}

 

 

const unsigned char os_toebcdic[256] = {

        0x00,   0x01,   0x02,   0x03,   0x37,   0x2d,   0x2e,   0x2f,  

        0x16,   0x05,   0x15,   0x0b,   0x0c,   0x0d,   0x0e,   0x0f,  

        0x10,   0x11,   0x12,   0x13,   0x3c,   0x3d,   0x32,   0x26,  

        0x18,   0x19,   0x3f,   0x27,   0x1c,   0x1d,   0x1e,   0x1f,  

        0x40,   0x5a,   0x7f,   0x7b,   0x5b,   0x6c,   0x50,   0x7d,  

        0x4d,   0x5d,   0x5c,   0x4e,   0x6b,   0x60,   0x4b,   0x61,  

        0xf0,   0xf1,   0xf2,   0xf3,   0xf4,   0xf5,   0xf6,   0xf7,  

        0xf8,   0xf9,   0x7a,   0x5e,   0x4c,   0x7e,   0x6e,   0x6f,  

        0x7c,   0xc1,   0xc2,   0xc3,   0xc4,   0xc5,   0xc6,   0xc7,  

        0xc8,   0xc9,   0xd1,   0xd2,   0xd3,   0xd4,   0xd5,   0xd6,  

        0xd7,   0xd8,   0xd9,   0xe2,   0xe3,   0xe4,   0xe5,   0xe6,  

        0xe7,   0xe8,   0xe9,   0xad,   0xe0,   0xbd,   0x5f,   0x6d,  

        0x79,   0x81,   0x82,   0x83,   0x84,   0x85,   0x86,   0x87,  

        0x88,   0x89,   0x91,   0x92,   0x93,   0x94,   0x95,   0x96,  

        0x97,   0x98,   0x99,   0xa2,   0xa3,   0xa4,   0xa5,   0xa6,  

        0xa7,   0xa8,   0xa9,   0xc0,   0x4f,   0xd0,   0xa1,   0x07,  

        0x20,   0x21,   0x22,   0x23,   0x24,   0x04,   0x06,   0x08,  

        0x28,   0x29,   0x2a,   0x2b,   0x2c,   0x09,   0x0a,   0x14,  

        0x30,   0x31,   0x25,   0x33,   0x34,   0x35,   0x36,   0x17,  

        0x38,   0x39,   0x3a,   0x3b,   0x1a,   0x1b,   0x3e,   0xff,  

        0x41,   0xaa,   0x4a,   0xb1,   0x9f,   0xb2,   0x6a,   0xb5,  

        0xbb,   0xb4,   0x9a,   0x8a,   0xb0,   0xca,   0xaf,   0xbc,  

        0x90,   0x8f,   0xea,   0xfa,   0xbe,   0xa0,   0xb6,   0xb3,  

        0x9d,   0xda,   0x9b,   0x8b,   0xb7,   0xb8,   0xb9,   0xab,  

        0x64,   0x65,   0x62,   0x66,   0x63,   0x67,   0x9e,   0x68,  

        0x74,   0x71,   0x72,   0x73,   0x78,   0x75,   0x76,   0x77,  

        0xac,   0x69,   0xed,   0xee,   0xeb,   0xef,   0xec,   0xbf,  

        0x80,   0xfd,   0xfe,   0xfb,   0xfc,   0xba,   0xae,   0x59,  

        0x44,   0x45,   0x42,   0x46,   0x43,   0x47,   0x9c,   0x48,  

        0x54,   0x51,   0x52,   0x53,   0x58,   0x55,   0x56,   0x57,  

        0x8c,   0x49,   0xcd,   0xce,   0xcb,   0xcf,   0xcc,   0xe1,  

        0x70,   0xdd,   0xde,   0xdb,   0xdc,   0x8d,   0x8e,   0xdf    / ................   */

};

 

Action()

{

    int len = 0;

 

    char * Params="{"dataList":[{"accountId":"10002","customerScore":0,"isCommnet":0,"isDated":0,"";

    len = strlen(Params);

    url_decode(Params,len);

    return 0;

}

 

输出结果:

 

 


 

可将输出结果同在线解码工具的输出做对比

http://tool.chinaz.com/Tools/URLEncode.aspx

 

 

 

注意:以上脚本仅适用于不含中文字符的url解码,中文解码存在以下问题

 

Action(){//建立一个ftp对象FTPmyftp0;//建立FTP连接并登录ftp_logon_ex(myftp,ftpLogon,URLftp://1921681112,LAST);//插入
脚本开发从文件读取数据并参数化直接上代码:char*testfn(){intcount,total0;//charbuffer[1000];char*bufferNULL;intfilelenth0;
脚本开发从文件读取数据并参数化by:授客QQ:1033553122直接上代码:char*testfn(){intcount,total0;//charbuffer[1000];char*bufferN
1LoadRunner录制脚本时为什么不弹出IE浏览器?当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。启动浏览器,打开Internet
1、脚本编码格式优化Loadrunner在录制脚本前,需查看服务器访问网址编码格式,在确定网页格式后,在RecordingOptions中进行相应的设置。如图:注意:设置编码格式是为了防止录制脚本过程
众所周知,LR的各种浏览器不能正常弹出,以及脚本中的手工转译一直是困扰着广大性能测试工程师的一大问题。我在做一个HTTP接口性能测试时,需要上报大量的json数据,这时使用LR进行脚本编写后然后自己手
脚本完善包括但不限于:1、参数化2、插入事务3、插入检查点4、设置关联5、插入注释接下来逐个进行说明:1、参数化:详情请参考本站https://wwwcnblogscom/apple2016/p/14
本文主要介绍使用LoadRunner手工编写WindowsSocket协议测试脚本的方法。通过LoadRunner编写WindowsSocket协议测试脚本,总体说来,比较简单。就像把大象放进冰箱一样
LoadRunner安装完成之后,肯定就迫不及待的想要上手试用了。下面就是讲一下LR脚本录制的流程和基本的设置。1、先放一张脚本录制以及运行的流程图2、脚本录制步骤1)以管理员身份打开LR软件,如下图
1脚本录制的基本原则充分考虑脚本的执行效率性能测试脚本关注的是如何模拟用户的真实行为。因此,用于测试的脚本应该接近用户的真正操作。这就要求录制后的脚本在修改的过程中不要增加过多内容,尤其不能降低其效率