上一篇中已經實現了JAVA的下載視頻代碼,但仍然是單線程的,還無法進行性能測試。本篇就來通過LoadRunner來實現多線程的模擬和控制。
新建LR的JAVA Vuser腳本,這里可以直接進行JAVA編碼,又可以調用LR的內部方法,如事務、思考時間、集合點等等。到了這步已經沒有任何難點了,開發人員只要花1個小時了解下LR的基本使用和常用方法即可,測試人員如果不會JAVA……那還是算了吧。
Action.java內容如下:
1 import lrapi.lr; 2 import com.test.*; 3 import java.util.*; 4 import java.io.*; 5 6 public class Actions 7 { 8 9 public int init() throws Throwable { 10 return 0; 11 }//end of init 12 13 14 public int action() throws Throwable { 15 16 /* 17 調用者測量 18 */ 19 int downloadSize = 0; 20 int downloadTime = 0; 21 long startTime = 0; 22 long endTime = 0; 23 int speed = 0; 24 25 int vid; 26 vid = lr.get_vuser_id(); 27 28 /* 29 從url文件生成arraylist 30 */ 31 String url; 32 ArrayList urlList = new ArrayList(); 33 34 try{ 35 BufferedReader br = new BufferedReader(new FileReader("url.txt")); 36 37 while((url = br.readLine()) != null){ 38 urlList.add(url); 39 } 40 }catch(IOException ie){ 41 ie.printStackTrace(); 42 } 43 44 lr.enable_redirection(true); 45 lr.set_debug_message(lr.MSG_CLASS_JIT_LOG_ON_ERROR, lr.SWITCH_OFF); 46 47 System.out.println("Total URLs: " + urlList.size()); 48 49 for(int i = 0; i < urlList.size(); i++){ 50 url = (String)urlList.get(i); 51 System.out.println(url); 52 53 //事務名稱 54 String trxName = "URL" + (i+1); 55 56 startTime = System.currentTimeMillis(); 57 58 lr.start_transaction(trxName); 59 //傳入url和每個調用者的標識 60 downloadSize = DownloadFile.getHttpFileByUrl(url, Integer.toString(vid)); 61 lr.end_transaction(trxName, lr.AUTO); 62 63 endTime = System.currentTimeMillis(); 64 downloadTime = (int)(endTime - startTime)/1000; 65 speed = downloadSize / downloadTime; 66 67 lr.output_message(trxName + ": completed"); 68 lr.output_message("time cost: " + downloadTime + "s"); 69 lr.output_message("average speed: " + speed + "KB/s"); 70 lr.output_message(""); 71 72 } 73 74 lr.set_debug_message(lr.MSG_CLASS_JIT_LOG_ON_ERROR, lr.SWITCH_ON); 75 76 return 0; 77 }//end of action 78 79 80 public int end() throws Throwable { 81 return 0; 82 }//end of end 83 }
所有以lr開頭的方法都是LR內部方法,這里只用到了事務、日志等幾個。
編譯之前我們的JAVA下載代碼,將包(com.test)放入LR腳本的目錄中,如圖:
打開LR腳本,運行試一下。
可以看到正常輸出了日志,再驗證一下下載到的文件是否完整,找到輸出路徑,如“h:\test\testvideo_20121106194419_-1”,用播放器打開這個文件,正常播放。說明我們的腳本已經OK了,下面就要做多用戶的測試了。
打開controller,設置同時運行2個VUSER(為了保證負載機的網絡不成為瓶頸),運行場景。
可以看到,2個VUSER都按預期正常完成了。
從幾個方面驗證測試的有效性:
1是負載機的網絡利用,上面單用戶執行腳本時下載速度是5M/s(apache服務器做了限速),這次兩個用戶同時下載達到了10M。
2是每個VUSER的輸出日志。
3是下載文件的完整性。