Loadrunner上傳文件解決辦法(大文件)
最近再做一個跟海量存儲相關(guān)的項目測試,需要通過LR模擬用戶大量上傳和下載文件,請求是Rest或Soap,同時還要模擬多種大小尺寸不一的文件
通常情況下,都是使用簡單的post協(xié)議即可:
方法一:
web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncType=multipart/form-data", "RecContentType=text/html", "Referer=https://testserver/console/displayStudentList.do", "Snapshot=t12.inf", "Mode=HTTP", ITEMDATA, "Name=uploadFile", "Value=D://Excel//data161955.zip", "File=yes", ENDITEM, LAST); |
后續(xù)對上傳的文件進(jìn)行MD5值比較,發(fā)現(xiàn)不一致,仔細(xì)查看后,發(fā)現(xiàn)上傳的文件內(nèi)容被loadrunner添加了幾行額外的值,content-type等,無奈下,重寫讀文件的方式,我通過如下程序?qū)崿F(xiàn)了1到10M文本文件的上傳,如果上傳二進(jìn)制文件,body的寫法有變化:
方法二:
vuser_init() { char fileName[] = "D:/Script/CreateObj_10M/tools.zip"; int len = 0; int readLen=0; int tmpLen=1; int runLen =104857; int cLen = 0; if ( (file_stream = fopen(fileName, "rb")) == NULL) { lr_message("open file failed!\n"); return -1; } fseek(file_stream, 0, 2); len = ftell(file_stream); lr_message("file length is: %d bytes", len); readbuf = (char *) malloc(len+1); memset(readbuf, 0, len+1); if ( runLen > len) { runLen = len; } fseek(file_stream, 0, 0); while(feof(file_stream)== 0){ tmpLen = fread(readbuf + readLen, 1,runLen , file_stream); readLen += tmpLen; cLen = readLen + runLen; if (cLen > len) { runLen = cLen - len; } if (tmpLen==0) { break; } } |
//關(guān)閉文件句柄 fclose(file_stream); //保存參數(shù) lr_save_string(readbuf,"bodys"); } Action() { lr_start_transaction("CreateObj_1M"); web_add_header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8.."); web_add_header("Content-Type", "text/plain; charset=UTF-8"); web_add_header("Authorization", "YWS {userkey}:XXXXXXX"); web_custom_request("CreateObj", "URL=http://smartstorage{id}.yoyoyws.com:38080/test00bucket00/{IterationNum}-10M", "Method=PUT", "TargetFrame=", "Resource=0", "RecContentType=application/xml", "Referer=", "Mode=HTML", "Body={bodys}", //如果是二進(jìn)制文件,可以改成BodyBinary LAST ); returnCode = web_get_int_property(HTTP_INFO_RETURN_CODE); if ( returnCode!=201 ) { lr_end_transaction("CreateObj_1M",LR_FAIL); }else{ lr_end_transaction("CreateObj_1M",LR_PASS); } return 0; } |
但是這個程序依然有問題,當(dāng)打開是二進(jìn)制文件,或者文件內(nèi)容過大的時候,依然會出現(xiàn)文件內(nèi)容不一致的問題,我后續(xù)試驗后,會持續(xù)更新。
posted on 2014-04-24 10:25 順其自然EVO 閱讀(1407) 評論(1) 編輯 收藏 所屬分類: loadrunner