上一篇中已经实现了JAVA的下载视频代码,但仍然是单线程的,还无法进行性能测试。本篇就来通过LoadRunner来实现多线程的模拟和控制。
新建LR的JAVA Vuser脚本,这里可以直接进行JAVA编码,又可以调用LR的内部方法,如事务、思考时间、集合点等等。到了这步已经没有任何难点了,开发人员只要花1个小时了解下LR的基本使用和常用方法即可,测试人员如果不会JAVA……那还是算了吧。
Action.java内容如下:
import lrapi.lr; import com.test.*; import java.util.*; import java.io.*; public class Actions { public int init() throws Throwable { return 0; }//end of init public int action() throws Throwable { /* 调用者测量 */ int downloadSize = 0; int downloadTime = 0; long startTime = 0; long endTime = 0; int speed = 0; int vid; vid = lr.get_vuser_id(); /* 从url文件生成arraylist */ String url; ArrayList urlList = new ArrayList(); try{ BufferedReader br = new BufferedReader(new FileReader("url.txt")); while((url = br.readLine()) != null){ urlList.add(url); } }catch(IOException ie){ ie.printStackTrace(); } lr.enable_redirection(true); lr.set_debug_message(lr.MSG_CLASS_JIT_LOG_ON_ERROR, lr.SWITCH_OFF); System.out.println("Total URLs: " + urlList.size()); for(int i = 0; i < urlList.size(); i++){ url = (String)urlList.get(i); System.out.println(url); //事务名称 String trxName = "URL" + (i+1); startTime = System.currentTimeMillis(); lr.start_transaction(trxName); //传入url和每个调用者的标识 downloadSize = DownloadFile.getHttpFileByUrl(url, Integer.toString(vid)); lr.end_transaction(trxName, lr.AUTO); endTime = System.currentTimeMillis(); downloadTime = (int)(endTime - startTime)/1000; speed = downloadSize / downloadTime; lr.output_message(trxName + ": completed"); lr.output_message("time cost: " + downloadTime + "s"); lr.output_message("average speed: " + speed + "KB/s"); lr.output_message(""); } lr.set_debug_message(lr.MSG_CLASS_JIT_LOG_ON_ERROR, lr.SWITCH_ON); return 0; }//end of action public int end() throws Throwable { return 0; }//end of end } |
所有以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是下载文件的完整性。