• Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试


    脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试

    by:授客 QQ1033553122

     

    目的

     

     

    实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放视频

     

    开发环境

    Loadrunner 11.0

    eclipse-standard-kepler-SR2-win32.zip

    jdk-6u14-windows-i586

    Win7 32

     

    脚本

    DownloadVideo.java,代码如下,主要实现流媒体文件的下载及下载相关的分析

     

    package downloadHttpMedia;

    import java.io.*;

    import java.net.*;

    import java.util.*;

    import java.text.*;

     

    public class DownloadVideo {

       

        public static int getFileByUrl(String address, int vuser_id){

           

           

            Date date = new Date();

            SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMddHHmmss");

            String downloadTime = formatDate.format(date);

           

           

            int totalDownloadSize = 0; //总下载大小

            int lastDownloadSize = 0;  //上次下载大小

            long startDownloadTime = 0; //开始下载

            long lastDownloadTime = 0;     //上次下载时间

            int second = 0;   // 记录秒

           

           

            try{

                URL url = new URL(address);

                URLConnection conn = url.openConnection();

                BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());

                FileOutputStream fos = new FileOutputStream("E:\testvideo" + "_" + downloadTime + vuser_id + ".mp4"); //假设文件为.mp4

               

                int fileTotalSizeInByte = conn.getContentLength();

                System.out.println("File Size:" + fileTotalSizeInByte/1024 + "KB"); //获取文件大小

               

                startDownloadTime = System.currentTimeMillis(); //产生一个当前的毫秒 -- 1970110时起的毫秒数

                lastDownloadTime = startDownloadTime;

               

                while (totalDownloadSize < fileTotalSizeInByte){

                    int bufferSize = bis.available(); // 获取数据流中可供读取的字节数

                    if (bufferSize > 0){

                        byte[] buf = new byte[bufferSize];

                        int size = bis.read(buf);

                        fos.write(buf,0, size); //写入输出流

                       

                        totalDownloadSize = totalDownloadSize + size;

                    }

     

                   

                if (System.currentTimeMillis() - lastDownloadTime > 1000){

                     System.out.println("download speed(KB/s): " + second + " " + (totalDownloadSize - lastDownloadSize)/1024);

                     lastDownloadTime = System.currentTimeMillis();

                     lastDownloadSize = totalDownloadSize;

                     second++;

               

                }

                }

               

                System.out.println("Download Completed");

                System.out.println("Average download speed: " + (totalDownloadSize/1024) /

                        ((System.currentTimeMillis() - startDownloadTime)/1000) + "KB/s");

               

                fos.close();

                bis.close();

                       

            }catch(MalformedURLException e){

                e.printStackTrace();

            }catch (IOException e) {

                e.printStackTrace();

            }

           

           

            return totalDownloadSize/1024;     

        }

       

       

    }

     

    说明:如下,函数添加vuser_id参数主要是用于标识文件名称,以防止模拟并发操作时,不同用户下载的视频文件被覆盖,影响分析。

        public static int getFileByUrl(String address, int vuser_id){

     

    TestDriver.java,测试程序,如下

    package downloadHttpMedia;

     

    public class TestDriver {

            public static void main(String[] args)

            {

                String url = "http://xx.xx-cn-hangzhou.aliyuncs.com/video/VID_20160509_141127.mp4";

                DownloadVideo.getFileByUrl(url,1);         

            }

     

    }

     

    loadrunner中新建java vuser协议的脚本,并将DownloadVideo.java导出jar,添加到lr中,,编写代码如下

    附:

    1、现成的jar文件下载地址:http://pan.baidu.com/s/1miESwVe

    2、关于eclipse导出jar文件参考文章:http://blog.sina.com.cn/s/blog_13cc013b50102v4m7.html

     

     

     

     

    import lrapi.lr;

     

    import downloadMedia.*;

     

     

    public class Actions

    {

     

        public int init() throws Throwable {

            return 0;

        }//end of init

     

     

        public int action() throws Throwable {

                int downloadSize = 0; // 下载文件大小

     

                   

                lr.rendezvous("rendezvous");

     

                lr.start_transaction("downloadMedia");

     

                String url = "";

           

            int size = Integer.valueOf("").intValue();

            int vuserid = Integer.valueOf("").intValue();

     

            downloadSize = downloadMedia.getFileByUrl(url,vuserid);

            if (downloadSize == size) {

                lr.end_transaction("downloadMedia", lr.PASS);

            }else{

                lr.end_transaction("downloadMedia", lr.FAIL);

              }

     

              return 0;

        }//end of action

     

     

        public int end() throws Throwable {

            return 0;

        }//end of end

    }

     

    其中,参数分别为视频播放http地址,及对应视频大小,为虚拟用户id

     

    运行结果:

     

    如上,显示每秒下载速度及平均下载速度



    以下是生成的文件



     

  • 相关阅读:
    IDEA新建SpringBoot+JSP项目
    设计模式笔记之六 (适配器模式)
    设计模式笔记之十三 (责任链模式)
    设计模式笔记之七 (桥接模式)
    设计模式笔记之八 (组合模式)
    CanJS 简单入门
    设计模式笔记之十二 (代理模式)
    设计模式笔记之三(单例模式)
    设计模式笔记之二(工厂模式)
    设计模式笔记之一
  • 原文地址:https://www.cnblogs.com/shouke/p/10157730.html
Copyright © 2020-2023  润新知