您好,登錄后才能下訂單哦!
char *fr(char *filename){
longupfile ; //定義文件句柄
intcount ; //定于文件長度
intnFileLen; //定義文件長度
char*buffer;
upfile= fopen(filename,"rb"); //以只讀方式打開二進制文件,將upfile指向該文件
fseek(upfile,0,2); //將文件指針移動到文件尾
nFileLen= ftell(upfile); //獲得文件尾到文件頭的偏移字節(jié)數(shù),即文件所包含字節(jié)數(shù)
fseek(upfile,0,0); // 將文件指針移動到文件頭
lr_output_message("nFileLen:%d",nFileLen); //打印文件字節(jié)數(shù)
buffer= (char*)malloc(nFileLen); //分配長度為nfilelen的內(nèi)存塊
count= fread(buffer, sizeof(char),nFileLen, upfile); //將upfile指向的文件所包含字節(jié)數(shù)的所有數(shù)據(jù)項讀入到buffer中,并返回數(shù)據(jù)項的字節(jié)數(shù),及文件長度
lr_output_message("count:%d",count); //打印讀入文件的字節(jié)數(shù)
lr_save_int(count,"fbuff"); //將文件長度賦值給fbuff
lr_save_int(count-1,"fcurr"); //將文件長度-1賦值給fcurr
returnbuffer; //返回讀取的文件
}
vuser_init()
{
lr_save_string(fr("E:\\FS\\testfile\\55.txt"),"fdata");//將讀取的文件存到fdata變量中
return0;
}
Action()
{
/*上傳文件*/
lr_think_time(3);
lr_start_transaction("hdupfile");
web_add_header("Content-Disposition","p_w_upload;filename=\"testdata.rar\"");
web_add_header("X-Content-Range","bytes0-{fcurr}/{fbuff}");
web_add_header("Session-ID","{userid}");
web_add_header("Content-Type", "application/octet-stream");
web_custom_request("hdup",
"URL=http://10.255.0.149/upload?userId={userid}&bigmd5={userid}&taskId={userid}&offset=0",
"Method=POST",
"Resource=0",
"Referer=",
"Mode=HTML",
"Body={fdata}",
LAST);
lr_end_transaction("hdupfile",LR_AUTO);
return 0;
}
vuser_end()
{
return0;
}
1. Fopen:
作用: 第一個參數(shù)是指向一個文件,如果當前文件不存在,系統(tǒng)會創(chuàng)建這個文件名。第二個參數(shù)是對這個文件進行的操作。例如,只讀,讀寫,寫等。
Fopen函數(shù)原型:
文件指針名=fopen(文件名,使用文件方式)
其中:
文件指針名:必須被指明為FILe類型的指針變量
文件名:被打開文件的文件名,是字符串常量或字符串數(shù)組
使用文件方式:是指文件的類型和操作文件的方式
例如:在當前目錄打開文件file a,只運行進行讀操作,并時fp指向該文件
FILE *fp;
fp=("file a","r");
使用文件的方式共有12種,下面給出了它們的符號和意義。
“rt” :只讀打開一個文本文件,只允許讀數(shù)據(jù)
“wt”: 只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)
“at”:追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)
“rb”:只讀打開一個二進制文件,只允許讀數(shù)據(jù)
“wb”:只寫打開或建立一個二進制文件,只允許寫數(shù)據(jù)
“ab”:追加打開一個二進制文件,并在文件末尾寫數(shù)據(jù)
“rt+”:讀寫打開一個文本文件,允許讀和寫
“wt+”:讀寫打開或建立一個文本文件,允許讀寫
“at+”:讀寫打開一個文本文件,允許讀,或在文件末追加數(shù)據(jù)
“rb+”:讀寫打開一個二進制文件,允許讀和寫
“wb+”:讀寫打開或建立一個二進制文件,允許讀和寫
“ab+”:讀寫打開一個二進制文件,允許讀,或在文件末追加數(shù)據(jù)
把一個文本文件讀入內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進制碼,而把文件以文本方式寫入磁盤時,也要把二進制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費較多的轉(zhuǎn)換時間。對二進制文件的讀寫不存在這種轉(zhuǎn)換。
2. Fseek函數(shù)
作用:用于二進制方式打開的文件,移動文件讀寫指針位置,通常文件打開后,讀寫位置按先后順序.但有時你想變動讀寫位置,例如重新從某處起,再讀一次.
Fseek函數(shù)原型:int fseek(FILE *stream,long offset,int origin)
第一個參數(shù)stream為文件指針
第二個參數(shù)offset為偏移量,整數(shù)表示正向偏移,負數(shù)表示負向偏移
第三個參數(shù)origin設(shè)定從文件的哪里開始偏移,取值為:SEEK_CUR、SEEK_END 或SEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當前位置
SEEK_END: 文件結(jié)尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次為0,1和2.
簡言之:
fseek(fp,100L,0);把fp指針移動到離文件開頭100字節(jié)處;
fseek(fp,100L,1);把fp指針移動到離文件當前位置100字節(jié)處;
fseek(fp,100L,2);把fp指針退回到離文件結(jié)尾100字節(jié)處。
3. Ftell函數(shù)
Ftell函數(shù)原型:long int ftell ( FILE * stream );
作用:用于獲得文件位置指針當前位置相對于文件首的偏移字節(jié)數(shù)。在隨機方式取文件時,由于文件位置頻繁的前后移動,程序不容易確定文件的當前位置。調(diào)用ftell函數(shù)就能非常方便地確定文件位置
利用ftell函數(shù)也能方便地知道文件的長度,如:
Fsekk(fp,0,2)//將fp文件指針移動到文件結(jié)尾
Len=ftell(fp) //獲得從文件結(jié)尾到文件首的偏移字節(jié)數(shù),該字節(jié)數(shù)相當于文件所含字節(jié)數(shù)
4. Malloc函數(shù)
函數(shù)原型:extern void *malloc(unsignedint num_bytes);
malloc的語法是:指針名=(數(shù)據(jù)類型*)malloc(長度),
作用:分配長度為num_bytes字節(jié)的內(nèi)存塊 說明:如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。 當內(nèi)存不再使用時,應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。
5. fread函數(shù)和fwrite函數(shù)
功能:用來讀寫一個數(shù)據(jù)塊。
函數(shù)原型:
Fread(buffer,size,count,fp)
Fwrite(buffer,size,count,fp)
說明:
(1)buffer:是一個指針,對fread來說,它是讀入數(shù)據(jù)的存放地址。對fwrite來說,是要輸出數(shù)據(jù)的地址。
(2)size:要讀寫的字節(jié)數(shù);
(3)count:要進行讀寫多少個size字節(jié)的數(shù)據(jù)項;
(4)fp:文件型指針。
1. lr_save_int(intvalue,const char * param_name)
功能,轉(zhuǎn)換整型為字符串型,并將字符串值存到參數(shù)中。
2. lr_save_string(const char *param_value, const char *param_name)
功能:將指定以Null結(jié)束的字符串賦值給參數(shù)
3. web_add_header(constchar * Head, const char * Content)
功能:對于下一個web request,指定請求頭
4. web_custom_request(constchar *RequestName, <List of Attributes>, [EXTRARES, <List of ResourceAttributes>,] LAST );
返回值:
返回LR_PASS(0)代表成功,LR_FAIL(1)代表失敗。
功能:允許使用任何方法和請求體創(chuàng)建自定義的HTTP請求。默認情況下,當VuGen無法使用其他函數(shù)解釋用戶請求時,會生成此函數(shù)。
所有的Web Vusers ,運行在HTTP模式或者Wireless Session Protocol (WSP) 回放模式下的WAPVusers都支持web_custom_request函數(shù)。
參數(shù):
RequestName:步驟的名稱,VuGen中樹形視圖中顯示的名稱。
List of Attribute:支持的屬性有以下幾種:
URL:頁面地址。
Method:頁面的提交方式,POST或GET。
TargetFrame:包含當前鏈接或資源的frame的名稱。
EncType:編碼類型。比如,text/html, 在請求頭里被指定為的content-type的值。如果在消息頭里指定了content-tpye,但是該content-tpye不匹配body會導致服務(wù)器端的錯誤。因此建議不要修改錄制得到的enctype。
任何對于“EncType”的指定都會覆蓋web_add_[auto_]header函數(shù)指定的Content-Type。當指定了“EncType=” (空值)時,不會產(chǎn)生“Content-Type” 請求頭。當省略了“EncType”時,任何一個web_add_[auto_]header函數(shù)都會起作用。如果既沒有指定EncType也沒有web_add_[auto_]header函數(shù),且“Method=POST”,“application/x-www-form-urlencoded”會做為默認值來使用。其他情況下,不會產(chǎn)生Content-Type請求頭。
僅僅當Recording Options--Recording --HTML-based script-- Recordwithin the current script step選項被選中時,List of Resource Attributes才會被插入到代碼中。
RecContentType:錄制腳本時響應(yīng)頭的內(nèi)容類型。例如text/html、 application/x-javascript等。當沒有設(shè)置Resource屬性時,用它來確定目標URL是否是可記錄的資源。此屬性包含主要的和次要的資源。最頻繁使用的類型是 text、application、p_w_picpath。次要的類型根據(jù)資源不同變化很多。例如:"RecContentType=text/html":表示html文本。"RecContentType=application/msword":表示當前使用的是Msword。
Referer:當前頁面關(guān)聯(lián)的頁面。如果已經(jīng)顯式指定了url的地址,此項可以省略。
Body:請求體。
Body:表示規(guī)則的,可打印的字符串。無法表示空字節(jié)。所有的字符都以一個反斜杠表示。注意:在舊的腳本中,可以看見不可打印的字符在請求體中以16進制方式進行編碼。(例如 “\\x5c”),在這種情況下,必須使用“Binary=1”來標識。空字節(jié)使用"file://0.0.0.0/"來表示。相反,新腳本則會把把請求體分開放在不同的參數(shù)中("Body=...","BodyBinary=...", Body=...")。
BodyBinary :表示二進制代碼。不可打印的字符在請求體中以16進制方式file://xhh/進行編碼。在這里HH 表示十六進制值??兆止?jié)使用"file://0.0.0.0/"來表示。
BodyUnicode:美國英語,特指拉丁 UTF-16LE(little-endian)編碼。這種編碼方式會在在每個字符末尾附加一個0字節(jié),以便使字符更可讀。但是在VuGen中實際的參數(shù)把所有的0字節(jié)都去掉的。但是在發(fā)送給Web 服務(wù)器之前, web_custom_request函數(shù)會重新添加0字節(jié)的。對于不可打印的字符,使用單反斜杠表示,無法表示空字節(jié)。
注意:如果請求體大于100K,會使用一個變量來代替Body參數(shù)。變量是在 lrw_custom_body.h中定義的。
RAW BODY:(目前僅適用與web_custom_request函數(shù)):請求體是作為指針傳遞的,此指針指向一串數(shù)據(jù)。二進制的請求體可以使用BodyBinary 屬性來發(fā)送(或者使用Body 屬性來傳遞,前提是必須設(shè)置"Binary=1" )。無論如何,這種方法需要使用轉(zhuǎn)義字符反斜杠把不可打印的字符轉(zhuǎn)換為ASCII字符。為了能有一種更簡便的表現(xiàn)原始數(shù)據(jù)的方式,Raw Body屬性應(yīng)運而生,可以傳遞指向二進制數(shù)據(jù)的指針。
BodyFilePath:作為請求體傳送的文件的路徑。它不能與下面的屬性一起使用:Body,或者其他Body屬性或Raw Body屬性包括BodyBinary,BodyUnicode, RAW_BODY_START或Binary=1。
Resource: 指示URL是否屬于資源。1 是;0 不是。設(shè)置了這個參數(shù)后,RecContentType參數(shù)被忽略。“Resource=1”,意味著當前操作與所在腳本的成功與否關(guān)系不大。在下載資源時如果發(fā)生錯誤,是當作警告而不是錯誤來處理的;URL是否被下載受“Run-Time Setting—BrowserEmulation--Download non-HTML resources” 這個選項的影響。此操作的響應(yīng)信息是不做為HTML來解析的。“Resource=0”,表明此URL是重要的,不受發(fā)送請求(RTS)的影響,在需要時也會解析它。
ResourceByteLimit:在HTTP模式中無法使用,在Concurrent Groups(Vuser腳本中的一個區(qū),此區(qū)中的所有函數(shù)并發(fā)執(zhí)行)區(qū)中也無法使用。僅僅適用于Sockets的回放,WinInet也是不適用的。
Snapshot:快照的文件名,關(guān)聯(lián)時使用。
Mode:兩種錄制級別HTML、HTTP。
HTML級別:在當前Web界面上錄制直觀的HTML動作。以一步步的web_url、web_link、 web_p_w_picpath、web_submit_form來錄制這些動作。VuGen僅僅錄制返回HTML頁面的請求,不處理腳本和應(yīng)用程序。
HTTP級別:VuGen把所有的請求錄制為web_url指令,不生成web_link、web_p_w_picpath、web_submit_form這些函數(shù)。這種方法更為靈活,但是生成的腳本不夠直觀。
ExtraResBaseDir:(目前僅適用與web_custom_request函數(shù)):根URL,放在EXTRARES組里。它是用來解析相對URL的(譯者加:類似于Windows的相對路徑和絕對路徑)。
URL可以是絕對路徑(例如http://weather.abc.com/weather/forecast.jsp?locCode=LFPO),也可以是相對路徑(例如“forecast.jsp?locCode=LFPO”)。
真正的URL的下載是通過絕對路徑進行的,所以相對URL路徑必須使用根路徑URL去解析。例如,使用http://weather.abc.com/weather/做為根路徑來解析“forecast.jsp?locCode=LFPO”,最后的URL是:http://weather.abc.com/weather/forecast.jsp?locCode=LFPO。如果沒有指定“ExtraResBaseDir”,默認的根URL是主頁面的URL。
UserAgent:用戶代理,它是一個HTTP頭的名字,用來標識應(yīng)用程序,通常是瀏覽器,它呈現(xiàn)的是用戶和服務(wù)器的交互。
例如:頭信息“User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; WindowsNT 5.0)”識別的是Window NT下的IE瀏覽器6.0。其他的User-Agent的值用來描述其他的瀏覽器,或者非瀏覽器程序。通常,一個應(yīng)用程序中所有的請求都使用相同的用戶代理,錄制者作為一個運行時參數(shù)來指定(Run-Time Setting—Browser Emulation—UserAgent)。不管怎么說,即使是在一個簡單的瀏覽器進程中,仍有可能會用到直接與服務(wù)器交互的非瀏覽器組件(例如ActiveX控件),通常他們有著不同于瀏覽器的用戶代理屬性。指定“UserAgent”表示這是一個非瀏覽器的請求。指定的字符串被HTTP頭“User-Agent:” 使用,在某些情況下,它同時會影響回放腳本時的行為。例如,不使用瀏覽器緩存,假設(shè)指定的URL屬于資源等等。
LoadRunner本身不檢查指定的字符串與瀏覽器本身的值是否相同。
Binary:“Binary=1”表示頁面請求體中的每一個以file://x/##形式出現(xiàn)的值(在這里“##”代表2個十六進制數(shù)字),都會被替換為單字節(jié)的十六進制的值。
如果“Binary=0”(默認值),所有的字符序列只是按照字面的值傳遞。
需要注意雙斜杠的用法。在C編譯器中雙斜杠被解釋為單斜杠。如果不需要零字節(jié),單斜杠可以在Binary不等于1的情況下使用(例如,使用\x20代替file://x20/)。如果需要零字節(jié),那么只能使用file://x00/且設(shè)置 “Binary=1”,\x00在邏輯上會被截斷
ContentEncoding:指定請求體使用指定的方式(gzip或者deflate)進行編碼(例如,壓縮),相應(yīng)的“Content-Encoding:” HTTP頭會和此請求一起發(fā)送。這個參數(shù)適用于web_custom_request和web_submit_data。
EXTRARES:表明下面的參數(shù)將會是List Of Resource Attributes了。
LAST :結(jié)尾的標示符。
List of Resource Attributes
Web頁面中的非HTML機制產(chǎn)生了資源列表,包含了Javascript, ActiveX, Java applets andFlash所請求的資源。VuGen's 的Recording 選項中,可以設(shè)置把這些資源錄制在當前的操作中(默認是此設(shè)置)還是作為單獨的步驟來錄制。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。