2013-02-20 49 views
2

我想每一個Vuser腳本的運行時間上傳一個唯一的文件(如在控制器方案的Vuser#),我發現在不同的論壇,從他們在一起的一些例子來試試共同完成這項任務:LoadRunner的uplod唯一文件每VUSER

Action() 
{ 

char command[100]; 
sprintf(command, 「copy C:\\source_dir\\srcFile.txt C:\\source_dir\\srcFile-%s.txt」,    
lr_eval_string (」{iteration_number}」)); 
system(command); 

web_submit_data("FileUpload", 
"Action={URL}", 
"Method=POST", 
"EncType=multipart/form-data", 
"TargetFrame=", 
"RecContentType=text/html", 
"Mode=HTML", 
ITEMDATA, 
"Name=File", "Value=C:\\source_dir\\srcFile-%s.txt", "File=yes", ENDITEM, 
LAST); 

sprintf(command, 「del C:\\source_dir\\srcFile-%s.txt」, lr_eval_string (」{iteration_number}」)); 
system(command); 

return 0; 


} 

但是,這個腳本確實每次創建100個文件,這不是我想從幫兇。 1.如何修改腳本以創建100個唯一文件(一次)。 2.然後在控制器的每個VUser中運行一次upload(web_submit_data函數)。 3.然後刪除文件到底?

也許把文件生成在init和文件中Vuser腳本的端部刪除?

+0

另見https://groups.google.com/d/msg/lr-loadrunner/dk1ojhjP06A/hioxhi6zjeIJ – Pacerier 2015-01-03 07:14:26

回答

2

你有幾個選項。

  1. 您可以預先生成測試過程中需要的所有文件,然後將完全限定的文件名作爲唯一參數傳遞給虛擬用戶腳本。如果文件位於負載生成器上,那麼您將有一些讀取爭用來處理哪些會影響您的虛擬用戶,因爲他們都爭奪驅動器上的讀取頭。如果這些文件位於網絡連接的存儲器上,那麼您也可以通過網絡將文件移動到您的負載生成器,然後再次從生成器中上傳。如果在測試過程中將文件放置在小型輔助驅動器(SSD)上,您可以顯着提高讀取訪問。
  2. 可以動態創建的文件。 (a)定義隨機文件大小(b)定義隨機文件名(c)在本地上下文中寫入文件(d)使用腳本中的文件上傳(e)刪除文件。所有這些都將在迭代的上下文中,假設上傳的文件需要爲每個用戶的每次迭代使用唯一的文件名和大小。爲此,在性能測試期間,您必須違反很多有關使用硬盤的最佳實踐規則。你會有幾十?數百?的虛擬用戶線程全部競爭訪問本地磁盤子系統,這通常是減慢所有虛擬用戶速度的方法,因爲CPU將發送給高優先級I/O中斷任務並遠離用戶進程,加上不可避免的等待當您的線程創建|寫入|讀取並刪除文件時,讀取/寫入硬盤驅動器的磁頭。您將需要更多的負載生成器用於此模型,並且您絕對需要運行單個用戶的參考控制生成器來檢查來自測試牀的強制響應偏差。
+0

確定。我會提出你的第一個建議。您實際上建議我將所有預生成的文件存儲在外部磁盤上,將其連接到控制器或負載生成器,並在我的腳本中引用此外部磁盤(在我的腳本中的參數設置中),對不對? – 2013-02-24 19:17:32

+0

除非您使用ESATA,否則外部磁盤會更慢。本地最快的方法是在每個負載生成器上使用內部SSD作爲第二個驅動器。將預生成的文件存儲在第二個內置硬盤上,然後使用參數文件將文件名和位置信息傳遞給腳本。我假設在測試過程中您將密切監測負載生成器,並且您將至少有三個負載生成器(兩個用於主負載,一個用於控制)。您很可能需要更多的負載生成器 – 2013-02-25 13:22:13

+0

@JamesPulley,+1關於硬盤瓶頸的好建議。 – Pacerier 2015-01-03 07:12:50

1

我覺得你的腳本是幾乎沒有。我看到的問題是,您沒有足夠的唯一文件名稱來存放您正在創建的文件。您的每個用戶都將以相同的迭代編號開始。

你可以嘗試這樣的事情,創建腳本的參數列表稱爲「的Vuser」一個新的參數,併爲其分配型「的Vuser ID」。當您在控制器中運行它時,這將填充爲單個vuser的編號。這將確保您的用戶在使用該文件時不會彼此踩踏。添加到您的文件名是這樣的:

sprintf(command, "copy C:\\source_dir\\srcFile.txt C:\\source_dir\\srcFile-%s%s.txt,    
lr_eval_string ("{iteration_number}") 
lr_eval_string ("{vuser}")); 

這隻要所有的用戶都在控制器同組的工作。如果跨越多個組使用此屬性,則通過向文件名添加「組名」參數來執行相同的操作。

相關問題