使用loadrunner进行压力测试——post请求
上一篇 / 下一篇 2014-09-17 16:29:25 / 个人分类:loadrunner
注意,在某些破解版的软件中如果更改了runtime_setting可能导致响应时间曲线无法绘制,原因不详
如:
web_submit_data("create",//事务名 "Action=http://bizhi.sogou.com/diy/", //请求域名 "Method=POST", //请求类型为post "RecContentType=application/json", //返回格式为json "Referer=http://bizhi.sogou.com/diy?wp_id=8743", "Snapshot=t4.inf", "Mode=HTML", ITEMDATA, //下面编辑post请求的数据 "Name=img", "Value=http://dl.bizhi.sogou.com/images/2012/05/3/8743.jpg", ENDITEM, //数据的name、value及结束符 "Name=left", "Value=60", ENDITEM, //第二条数据的name、value及结束符 "Name=top", "Value=30", ENDITEM, "Name=width", "Value=720", ENDITEM, "Name=height", "Value=450", ENDITEM, "Name=model", "Value=5/5s", ENDITEM, "Name=x", "Value=1", ENDITEM, "Name=y", "Value=1", ENDITEM, "Name=ofc", "Value=1", ENDITEM, "Name=wp_id", "Value=8743", ENDITEM, "Name=mat", "Value=ms", ENDITEM, "Name=curMode", "Value=normal", ENDITEM, LAST); |
2. 如果要发送的请求的数据值需要变化,那么需要将请求中的值参数化,,如果是根据上一条请求的返回值来确定请求中的数据值,那么需要对上一条请求的返回值进行解析
如:
web_submit_data("create", "Action=http://bizhi.sogou.com/diy/", "Method=POST", "RecContentType=application/json", "Referer=http://bizhi.sogou.com/diy?wp_id=8743", "Snapshot=t4.inf", "Mode=HTML", ITEMDATA, "Name=img", "Value=http://dl.bizhi.sogou.com/images/2012/05/3/8743.jpg", ENDITEM, "Name=left", "Value=60", ENDITEM, "Name=top", "Value=30", ENDITEM, "Name=width", "Value=720", ENDITEM, "Name=height", "Value=450", ENDITEM, "Name=model", "Value=5/5s", ENDITEM, "Name=x", "Value=1", ENDITEM, "Name=y", "Value=1", ENDITEM, "Name=ofc", "Value=1", ENDITEM, "Name=wp_id", "Value=8743", ENDITEM, "Name=mat", "Value=ms", ENDITEM, "Name=curMode", "Value=normal", ENDITEM, LAST);//请求1 lr_set_debug_message( 16 | 2,0 ); lr_save_string((char*)strtok(lr_eval_string("{Output}"),","),"temp");//获得请求1的返回数据 //lr_output_message("bian:%s",lr_eval_string("{temp}")); lr_save_string((char*)strtok(NULL,","),"diyid_temp");//解析返回数据 //lr_output_message("bian2:%s",lr_eval_string("{diyid_temp}")); lr_save_string((char*)strtok(lr_eval_string("{diyid_temp}"),":"),"temp");//解析返回数据 //lr_output_message("bian:%s",lr_eval_string("{temp}")); lr_save_string((char*)strtok(NULL,":"),"diyid_temp");//解析返回数据 //lr_output_message("bian2:%s",lr_eval_string("{diyid_temp}")); diyid_str=(char*)strtok(lr_eval_string("{diyid_temp}"),"}"); lr_save_string((char*)strtok(lr_eval_string("{diyid_temp}"),"}"),"diyid");//解析返回数据 //lr_output_message("bian:%s",lr_eval_string("{diyid}")); strcat(test, diyid_str); //lr_output_message("%s",test); lr_save_string(CMd5(test),"md5");//计算md5 //lr_output_message("bianmd5:%s",lr_eval_string("{md5}")); web_submit_data("postname", "Action=http://bizhi.sogou.com/orderpay/", "Method=POST", "RecContentType=textml", "Mode=HTML", ITEMDATA, "Name=goods_action","Value=goods_detail",ENDITEM, "Name=goods_addr","Value=656",ENDITEM, "Name=md5str","Value={md5}",ENDITEM,//根据参数构造请求 "Name=diy_id","Value={diyid}",ENDITEM,//根据参数构造请求 "Name=goods_info","Value=448_1",ENDITEM, "Name=from","Value=diy",ENDITEM, "Name=Accept","Value=text/plain",ENDITEM, LAST); |
3. 另附,计算md5,需要添加md5的头文件,并别忘了在gloab.h中include md5.h
#ifndef MD5_H #define MD5_H #ifdef __alpha typedef unsigned int uint32; #else typedef unsigned long uint32; #endif struct MD5Context { uint32 buf[4]; uint32 bits[2]; unsigned char in[64]; }; extern void MD5Init(); extern void MD5Update(); extern void MD5Final(); extern void MD5Transform(); typedef struct MD5Context MD5_CTX; #endif #ifdef sgi #define HIGHFIRST #endif #ifdef sun #define HIGHFIRST #endif #ifndef HIGHFIRST #define byteReverse(buf, len) /* Nothing */ #else void byteReverse(buf, longs)unsigned char *buf; unsigned longs; { uint32 t; do { t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |((unsigned) buf[1] << 8 | buf[0]); *(uint32 *) buf = t; buf += 4; } while (--longs); } #endif void MD5Init(ctx)struct MD5Context *ctx; { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; } void MD5Update(ctx, buf, len) struct MD5Context *ctx; unsigned char *buf; unsigned len; { uint32 t; t = ctx->bits[0]; if ((ctx->bits[0] = t + ((uint32) len << 3)) < t) ctx->bits[1]++; ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; if (t) { unsigned char *p = (unsigned char *) ctx->in + t; t = 64 - t; if (len < t) { memcpy(p, buf, len); return; } memcpy(p, buf, t); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); buf += t; len -= t; } while (len >= 64) { memcpy(ctx->in, buf, 64); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); buf += 64; len -= 64; } memcpy(ctx->in, buf, len); } void MD5Final(digest, ctx) unsigned char digest[16]; struct MD5Context *ctx; { unsigned count; unsigned char *p; count = (ctx->bits[0] >> 3) & 0x3F; p = ctx->in + count; *p++ = 0x80; count = 64 - 1 - count; if (count < 8) { memset(p, 0, count); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); memset(ctx->in, 0, 56); } else { memset(p, 0, count - 8); } byteReverse(ctx->in, 14); ((uint32 *) ctx->in)[14] = ctx->bits[0]; ((uint32 *) ctx->in)[15] = ctx->bits[1]; MD5Transform(ctx->buf, (uint32 *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset(ctx, 0, sizeof(ctx)); } #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) #define MD5STEP(f, w, x, y, z, data, s) ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) void MD5Transform(buf, in) uint32 buf[4]; uint32 in[16]; { register uint32 a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } char* CMd5(const char* s) { struct MD5Context md5c; unsigned char ss[16]; char subStr[3],resStr[33]; int i; MD5Init( &md5c ); MD5Update( &md5c, s, strlen(s) ); MD5Final( ss, &md5c ); strcpy(resStr,""); for( i=0; i<16; i++ ) { sprintf(subStr, "%02x", ss[i] ); itoa(ss[i],subStr,16); if (strlen(subStr)==1) { strcat(resStr,"0"); } strcat(resStr,subStr); } strcat(resStr,"\0"); return resStr; } |
4. 如果一个action中有两个请求,那么压测是看到的响应时间曲线是两个请求综合的响应时间,如果要区分每个请求的响应时间,可加入请求开始/结束标记
lr_start_transaction(“create”);//插入结束标记,从此结束计时 lr_end_transaction(“create”, LR_AUTO);//插入结束标记,从此结束计时 |
相关阅读:
- LoadRunner java vuser设置 (zm51testing, 2014-8-06)
- LoadRunner监控Linux (zaza9084, 2014-8-07)
- 通过LoadRunner - Analyze详细分析页面元素请求 (zaza9084, 2014-8-12)
- LoadRunner穿越防火墙测试 (zaza9084, 2014-8-15)
- LoadRunner穿越防火墙测试 (zm51testing, 2014-8-18)
- LoadRunner同一个脚本运行两次结果相差很大的原因 (zaza9084, 2014-8-20)
- 使用LoadRunner进行服务器性能测试 (zaza9084, 2014-8-26)
- 一台服务器多个tomcat运行的性能测试脚本 (amo666, 2014-9-10)
- LoadRunner启动自带例子Web Tours报错 (zaza9084, 2014-9-12)
- LoadRunner之调用远程负载 (zaza9084, 2014-9-17)
TAG: LoadRunner loadrunner
我的栏目
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 16962
- 日志数: 2
- 建立时间: 2014-09-16
- 更新时间: 2015-12-22