51Testing软件测试论坛

标题: 对流媒体服务器达尔文进行性能测试的总结 [打印本页]

作者: Lennon    时间: 2005-12-22 22:44
标题: 对流媒体服务器达尔文进行性能测试的总结
刚刚搞了公司流媒体服务器达尔文的性能测试工作,有点进展。把自己的一点收获总结一下跟大家分享一下。
      loadrunner没有直接支持达尔文的协议,所以选择winsock协议进行脚本录制。
   大致的脚本如下:

#include "lrs.h"


Action()
{  int a=1;       

    lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.0.7:554",  LrsLastArg);

    lrs_send("socket0", "buf0", LrsLastArg);

    lrs_receive("socket0", "buf1", LrsLastArg);

    lrs_send("socket0", "buf2", LrsLastArg);

    lrs_receive("socket0", "buf3", LrsLastArg);

    lrs_send("socket0", "buf4", LrsLastArg);

    lrs_receive("socket0", "buf5", LrsLastArg);

    lrs_save_param("socket0",NULL,"newsession",178,19);

    lr_output_message("session is:%s",lr_eval_string("<newsession>"));

    lrs_send("socket0", "buf6", LrsLastArg);

        while (a=1)
        {
                }

  /* lrs_receive("socket0", "buf7", LrsLastArg);

     lrs_create_socket("socket1", "UDP", "LocalHost=6972",  LrsLastArg);

    lrs_create_socket("socket2", "UDP", "LocalHost=6973",  LrsLastArg);

    lrs_receive("socket1", "buf8", LrsLastArg);

    lrs_send("socket2", "buf9", "TargetSocket=192.168.0.7:6971", LrsLastArg);

    lrs_receive("socket2", "buf10", LrsLastArg);
......
    lrs_close_socket("socket2");

    lrs_close_socket("socket1");*/

    lrs_disable_socket("socket0", DISABLE_SEND);

    lrs_close_socket("socket0");

    return 0;
}
其中     lrs_save_param("socket0",NULL,"newsession",178,19);用来关联buf5中服务器传来的session id。buf5如下:
recv  buf5 486
        "RTSP/1.0 200 OK\r\n"
        "Server: DSS/5.5 (Build/489.7; Platform/Linux; Release/Darwin; )\r\n"
        "Cseq: 2\r\n"
        "Last-Modified: Thu, 22 Dec 2005 01:59:56 GMT\r\n"
        "Cache-Control: must-revalidate\r\n"
        "Session: 2347936984390074812\r\n"
        "Date: Thu, 22 Dec 2005 12:27:08 GMT\r\n"
        "Expires: Thu, 22 Dec 2005 12:27:08 GMT\r\n"
        "Transport: RTP/AVP;unicast;source=192.168.0.7;client_port=6972-6973;server"
        "_port=6970-6971;ssrc=401DA4CB\r\n"
        "x-Transport-Options: late-tolerance=0.400000\r\n"
        "x-Retransmit: our-retransmit\r\n"
        "x-Dynamic-Rate: 1;rtt=68\r\n"
        "\r\n"
其中session id 由第178位开始连续19位,将其保存在<newsession>中。用它替换之后由客户端发起的rtsp请求中的session id
如buf6:
send  buf6 268
        "PLAY rtsp://192.168.0.7:554/sugar.3gp RTSP/1.0\r\n"
        "CSeq: 3\r\n"
        "Range: npt=0.000000-134.200000\r\n"
        "x-prebuffer: maxtime=2.000000\r\n"
        "x-transport-options: late-tolerance=10\r\n"
        "Session: <newsession>\r\n"
        "User-Agent: QuickTime/7.0.3 (qtver=7.0.3;os=Windows NT 5.1Service Pack 2)\r"
        "\n"
        "\r\n"
脚本中的while(a=1){}只是用来让程续停留在那里,不往下执行用的。用来举个例子,没什么意义,意思就是当rtsp连接建立完成,服务器开始通过rtp协议向客户端发送流之后永远不关闭rtsp连接。大可加入有意义的控制。
      此脚本中注释掉了录制到的RTP连接的建立,因为个人认为加入那个对控制流的发送没意义,做起来又容易出错。
     在自己家,CONTROLER里面试一下,就用3个用户。打开ethereal,运行场景。截获的包中前后显示客户端发起3次describe、setup、play,服务器的应答都是成功,各自有不同的session-id。之后是服务器发来RTP包,传输开始了。我想这样基本就成功了吧。
      明天开始测了,不知道还会碰到什么问题。有了我在补上。
      感谢前辈们批评和指点。QQ:181645823 MSN: sun181645823@hotmail.com

[ 本帖最后由 Lennon 于 2005-12-26 17:02 编辑 ]
作者: ilovejolly    时间: 2005-12-23 08:56
good experience
作者: wfq80825    时间: 2005-12-23 15:49
Lennon,好棒,加油
作者: Zee    时间: 2005-12-24 19:04
顶一下而已。
作者: yuxingxin    时间: 2005-12-26 16:05
不错
作者: Lennon    时间: 2005-12-26 16:55
经过两天测试,碰到一个问题:连接不能长时间保持.我想这个问题应该是因为服务器长时间没有收到客户端的响应发生的.于是将脚本中的
while (a=1)
        {
                }
更改成

        while (a=1)

        {
                     lr_think_time(60);
        lrs_send("socket1", "buf8", LrsLastArg);
        }
buf8如下:
send buf8 252
        "PLAY rtsp://192.168.0.7/sugar.3gp RTSP/1.0\r\n"
        "CSeq: <b>\r\n"
        "Range: npt=0.000000-134.200000\r\n"
        "x-prebuffer: maxtime=2.000000\r\n"
        "x-transport-options: late-tolerance=10\r\n"
        "Session: <newsession>\r\n"
        "User-Agent: QuickTime/7.0.2 (qtver=7.0.2;os=Windows NT 5.0Service Pack 4)\r"
        "\n"
        "\r\n"
作用就是连续向服务器发送rtsp的play请求.
流媒体服务器会根据其中的CSeq依次处理请求,所以我将后面的值做了参数化<b>。应为公司极其上没有安装VC等可以制作DLL的工具,暂时不使用user defined fountion的参数化方法,不然的话那倒是最好的方法。在这里,我使用的是file的方法(准备一个4到2000dat文件,每行一个数字)这个办法也足够脚本运行个进30个小时了。
其中的"Session: <newsession>\r\n"是上面做的关联。

脚本中的   lr_think_time(60);在本次测试中有意义,他保证了4到2000的Cseq能用上几十个小时。

测试到今天,我最大的体会是
“对业务过程的理解(在本次测试中体现为对rtsp协议的了解)对性能测试实在是太重要了”
感谢前辈们批评和指点。QQ:181645823 MSN: sun181645823@hotmail.com

[ 本帖最后由 Lennon 于 2005-12-26 17:03 编辑 ]
作者: Lennon    时间: 2005-12-30 13:48
自己顶 .Lennon真帅 ~~~!!
作者: jut984907    时间: 2005-12-30 16:54
标题: 果然很帅。。
winsocket好像不能自动关联?
如果不了解系统后台的操作,简直是无从下手
作者: Lennon    时间: 2006-1-6 16:34
再顶
作者: Lennon    时间: 2006-1-7 18:24
我顶~~~
作者: whitelotus    时间: 2006-1-9 10:23
请问有没有数出是第几位的快捷办法?谢谢!
作者: Lennon    时间: 2006-1-9 11:49
在data.ws里面选中需要的buf,然后按f7。就看到了。接下来数一下。我是这么做的,大概还有更快捷的方法。
作者: Lennon    时间: 2006-1-16 16:02
如此好贴,越看越帅~~~我顶
作者: songyq521    时间: 2006-3-21 14:03
哇靠比我还帅
作者: dragon-pk    时间: 2008-8-1 11:35
有人测试过流媒体吗还
作者: qiguojie    时间: 2008-8-1 11:41
顶,好帖,学习一下。。。
作者: tiannianyong    时间: 2010-11-9 16:45
您好,51testing测试朋友,最近我 测流媒体性能,看了你之前的文章想跟你交个朋友!
作者: xiaoxia318205    时间: 2011-11-2 18:21
还有人测试吗,我最近有测试流媒体的需求,请指教啊




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2