竟然要帮测试写loadrunner的脚本,也不好意思让别人来干,只好自己上咯。
借了本书,看了下,写了一天,完成了。特意记录下几个注意点。
1:基本情况
对我来说,loadrunner脚本编程=loadrunner系统函数调用+基本C编程。前者实现了网络相关应用以及一些基本系统功能,如类似printf功能。
所有函数我就都加在Action函数里面。其实实际上,loadrunner会有一个Action.c 文件在本地,可以直接编辑。
可以在代码里面直接加事务范围或者同步点。
通过设置Iterations来实现反复调用或者Concurrent来并发执行。
2:重要函数
参考下面代码,实现了:设置事务,get操作,post操作,并得到了每次连接的返回数据指针(preturn )
lr_start_transaction("uploading");
web_reg_save_param("preuploadcontents", "LB=", "RB=", "SEARCH=BODY", LAST);
sprintf(szURL,"URL=http://xxx.xx.xxx.xxx:8080/rest?appkey=testkey&method=ps.preupload&token=%s&appsig=8aae40dc374ea0367cf25f86fcdef9f8",token);
web_url("rest",
szURL,
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
preturn = lr_eval_string("{preuploadcontents}");
rc = atoi(&preturn[14]);
lr_output_message("preload rc = %d", rc);
if(rc != 0)
{
goto END;
}
memcpy(transid, preturn+25, 36);
//lr_output_message("transid = %s", transid);
web_reg_save_param("loadcontents", "LB=", "RB=", "SEARCH=BODY", LAST);
sprintf(sttoken,"Value=%s", token);
sprintf(sttransid,"Value=%s", transid);
// sprintf(stname,"Value=G://sb_facebook//%s.jpg", lr_eval_string("{filename}"));
sprintf(stname,"Value=G://sb_facebook//%s//%s.jpg", lr_eval_string("{logID}"), lr_eval_string("{filename}"));
lr_output_message("stname = %s", stname);
web_submit_data("upload",
"Action=http://xxx.xx.xxx.xxx:8080/rest?",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/html",
"Referer=http://localhost:8080/Demo/upload/uploadDemo02.html",
"Snapshot=t2.inf",
"Mode=HTTP",
ITEMDATA,
"Name=appkey", "Value=testkey", ENDITEM,
"Name=method", "Value=ps.upload", ENDITEM,
"Name=token", sttoken, ENDITEM,
"Name=tranid", sttransid, ENDITEM,
"Name=appsig", "Value=8aae40dc374ea0367cf25f86fcdef9f8", ENDITEM,
"Name=file1", stname, "File=Yes", ENDITEM,
LAST);
preturn = lr_eval_string("{loadcontents}");
rc = atoi(&preturn[14]);
lr_output_message("upload rc = %d", rc);
if(rc != 0)
{
goto END;
}
END:
lr_end_transaction("uploading", LR_AUTO);
另外,有点要注意:
如果下载的是文本文件(XML),其大小应该是iflen = strlen(lr_eval_string("{fcontents}")); //试验过
如果下载的是raw数据,其大小应该是iflen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //据说,我没试验
3:设置参数
这个是重点了。
参数文件其实就是本地的dat文件,就是文本文件格式。
有两个属性要设置:
select next row:
update value on:
我上面的logID,因为要每个vuser有一个独立的logID,并且在每次迭代中都是不变的,所以前者选择Unique,后者选择Once。
我上面的filename,因为要每个vuser在每次迭代使用不同的文件,而vuser之间保持一致,所以前者选择Sequential,后缀选择Each iteration。 其实前者选random也是可以的,这样vuser之间就不一致了。