脚本开发-基于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();
//产生一个当前的毫秒

--
自1970年1月1日0时起的毫秒数

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

运行结果:

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

以下是生成的文件

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

  1. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  2. loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取

    转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 ...

  3. Loadrunner脚本开发规范

    Loadrunner脚本开发规范 目录 1.一般约定... 3 2.代码注释约定... 4 3.格式化代码... 5 1.一般约定 1.1具体脚本规则,必须在具体代码中加注释,以便脚本开发人员阅读和理 ...

  4. Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

    脚本开发-利用loadrunner开发Windows Sockets协议脚本 by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 实践举例 Socket服务端简单实 ...

  5. Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本

    脚本开发-利用Loadrunner生成Web service测试脚本 1.选择协议--Web Service,如下图 2.导入服务 入口1:点击Manage Services ->弹出窗中选择“ ...

  6. loadrunner 脚本开发-文件下载

    脚本开发-文件下载 by:授客 QQ:1033553122 下载简介 对 HTTP协议来说,无论是下载文件或者请求页面,对客户端来说,都只是发出一个GET请求,并不会记录点击后的“保存”.“另存为操作 ...

  7. loadrunner 脚本开发- web_url函数详解

    脚本开发- web_url函数详解 by:授客 QQ:1033553122   加载指定url的web页面(GET请求) C语言函数 int web_url( const char *StepName ...

  8. loadrunner 脚本录制-Protocol Advisor协议分析器的使用

    脚本录制-Protocol Advisor协议分析器的使用 by:授客 QQ:1033553122 1.启动Protocol Advisor File > Protocol Advisor &g ...

  9. Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试

    脚本开发- soap_request函数介绍及WebService接口测试 by:授客 QQ:1033553122 函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int so ...

随机推荐

  1. 你可能不知道的BFC在实际中的应用

    概述 BFC是块级格式化上下文,它的一个令人熟知的运用是双飞翼布局或者两列布局.但其实它在其它地方也有很巧妙的运用.我把研究的心得记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: mdn块 ...

  2. Mybatis框架一:搭建测试

    Mybatis框架不再介绍: 在JDBC中存在一些问题: 1.频繁连接和释放资源浪费内存 2.编码完成后不便于维护 于是产生了简化数据库操作的框架:Hibernate.Mybatis等等,这里介绍My ...

  3. jdk-tomcat-jenkens 安装

    1--安装JDK 下载JDK放到你需要的目录,解压,然后添加环境变量 2--安装tomcat 从官方网站下载tomcat的安装包,然后解压 启动tomcat , TOMCAT的默认端口是8080,要记 ...

  4. C# GroupBy分组的问题和解决

    起因 今天在公司做一个需求的时候,写的是面条代码,一个方法直接从头写到尾,其中用到了GroupBy,且GroupBy的KeySelector是多个属性而不是单个属性. 但是公司最近推行Clean Co ...

  5. EasyUI 获取展开表中行数据

    var index = $('#dg').datagrid('getRowIndex', row); //为destory_user.php传递参数id var ids = $("#dg&q ...

  6. 使用Swagger 搭建高可读性ASP.Net WebApi文档

    一.前言 在最近一个商城项目中,使用WebApi搭建API项目.但开发过程中,前后端工程师对于沟通接口的使用,是非常耗时的.之前也有用过Swagger构建WebApi文档,但是API文档的可读性并不高 ...

  7. tf.cast()的用法(转)

    一.函数 tf.cast() cast( x, dtype, name=None ) 将x的数据格式转化成dtype.例如,原来x的数据格式是bool, 那么将其转化成float以后,就能够将其转化成 ...

  8. Java NIO中的通道Channel(二)分散/聚集 Scatter/Gather

    什么是Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道: scatter(分散): ...

  9. 五大常用算法之二:动态规划算法(DP)

    一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...

  10. leetcode — longest-palindromic-substring

    import java.util.Arrays; /** * Source : https://oj.leetcode.com/problems/longest-palindromic-substri ...