泡一杯茶,独自品味,细细回味着酸甜苦辣;造一条路,自己去走,起伏中体会坎坷艰难。不要怨茶好苦,苦尽自有甘来;不要怨路太难,坎坷之后自有平坦,欢迎大家访问我的GPRS模块商业网站 http//:www.szmerliya.com

对流媒体服务器达尔文进行性能测试的总结(winsock)(转)

上一篇 / 下一篇  2006-12-07 11:44:59 / 个人分类:LoadRunner

对流媒体服务器达尔文进行性能测试的总结(winsock)
刚刚搞了公司流媒体服务器达尔文的性能测试工作,有点进展。把自己的一点收获总结一下跟大家分享一下。

      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(”“));

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; wink.gif\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位,将其保存在中。用它替换之后由客户端发起的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: \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包,传输开始了。我想这样基本就成功了吧。

      明天开始测了,不知道还会碰到什么问题。有了我在补上。

经过两天测试,碰到一个问题:连接不能长时间保持.我想这个问题应该是因为服务器长时间没有收到客户端的响应发生的.于是将脚本中的

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: \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: \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依次处理请求,所以我将后面的值做了参数化。应为公司极其上没有安装VC等可以制作DLL的工具,暂时不使用user defined fountion的参数化方法,不然的话那倒是最好的方法。在这里,我使用的是file的方法(准备一个4到2000dat文件,每行一个数字)这个办法也足够脚本运行个进30个小时了。

其中的”Session: \r\n”是上面做的关联。

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

测试到今天,我最大的体会是

“对业务过程的理解(在本次测试中体现为对rtsp协议的了解)对性能测试实在是太重要了”
相关阅读:

TAG: LoadRunner

引用 删除 sophiashan07   /   2011-01-07 10:26:55
[上海] 沪上知名游戏公司急聘性能测试工程师
测试执行中级(1名)
职位描述:
1.根据需求进行性能测试的设计、执行、分析。
2.将测试工具组件集成到性能测试平台。

职位要求:
1、计算机相关专业,本科及以上学历
2、1-3年测试或开发经验
3、熟悉至少一种数据库产品(mysql优先)
4、熟练使用C++或其他高级语言。
6、精通Loadrunner等性能测试工具。
7、有较好的分析问题能力和解决问题能力
8、对未知领域有一定的学习和研究能力,并持续改进现有流程和方法
9、较强的团队沟通和协作能力

测试执行初级(2名)
职位描述:
1.根据需求进行性能测试的执行、分析。

职位要求:
1、计算机相关专业,本科及以上学历
2、1-3年测试或开发经验
3、熟悉至少一种数据库产品(mysql优先)
4、精通至少一门脚本语言(python优先)。
6、精通Loadrunner等性能测试工具。
7、有较好的分析问题能力和解决问题能力
8、对未知领域有一定的学习和研究能力,并持续改进现有流程和方法

有意向的朋友请与我联系,谢谢:

sophiashan07@hotmail.com
13774462947
引用 删除 lyat51   /   2007-07-12 11:27:19
不错,支持楼主的观点。业务流程实际上指导了性能测试的方向
 

评分:0

我来说两句

Open Toolbar