上一篇中已经实现了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是下载文件的完整性。