发布新日志

  • LoadRunner监控Linux与Windows方法

    2011-08-10 17:45:40

    一、监控windows系统:

    1、监视连接前的准备工作

    1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)。

    2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹 (要是没有自己手动加上)。

    3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

    问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest。

    解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

    若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpu、memory、disk等计数器。当然,这种方法就不是用LR来监控了。

    2、用LR监视windows的步骤

    在controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windows的IP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

    二、监控linux

    1 准备工作

    可以通过两种方法验证服务器上是否配置了rstatd守护程序:

    ①使用rup命令,它用于报告计算机的各种统计信息,其中就包括rstatd的配置信息。使用命令rup 10.130.61.203,此处10.130.61.203是要监视的linux/Unix服务器的Ip,如果该命令返回相关的统计信息。则表示已经配置并且激活了rstatd守护进程;若未返回有意义的统计信息,或者出现一条错误报告,则表示rstatd守护进程尚未被配置或有问题。

    ②使用find命令

    #find / -name rpc.rstatd,该命令用于查找系统中是否存在rpc.rstatd文件,如果没有,说明系统没有安装rstatd守护程序。

    如果服务器上没有安装rstatd程序(一般来说LINUX都没有安装),需要下载一个包才有这个服务,包名字是rpc.rstatd-4.0.1.tar.gz. 这是一个源码,需要编译,下载并安装rstatd(可以在[url]http://sourceforge.net/projects/[/url]rstatd<wbr>这个地址下载)

    下载后,开始安装,安装步骤如下:

    tar -xzvf rpc.rstatd-4.0.1.tar.gz

      cd rpc.rstatd-4.0.1/

      ./configure —配置操作

      make —进行编译

      make install —开始安装

      rpc.rstatd —启动rstatd进程

    2)安装完成后配置rstatd 目标守护进程xinetd,它的主配置文件是/etc/xinetd.conf,它里面内容是一些如下的基本信息:

    # xinetd.conf
    # Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.
    # Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
    defaults
    {
    log_type = FILE /var/log/xinetd.log
    log_on_success = HOST EXIT DURATION
    log_on_failure = HOST ATTEMPT
    #only_from = localhost
    instances = 30
    cps = 50 10
    # The specification of an interface is interesting, if we are on a firewall.
    # For example, if you only want to provide services from an internal
    # network interface, you may specify your internal interfaces IP-Address.
    # interface = 127.0.0.1
    }
    includedir /etc/xinetd.d

    我们这里需要修改的是/etc/xinetd.d/下的三个conf文件 rlogin,rsh,rexec这三个配置文件,打这三个文件里的disable = yes都改成 disable = no ( disabled 用在默认的 {} 中 禁止服务)或是把# default: off都设置成 on 这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!

    说明:我自己在配置时,没有disable = yes这项,我就将# default: off改为:default: on,重启后(cd /etc/init.d/ ./xinetd restart)通过netstat -an |grep 514查看,没有返回。然后,我就手动在三个文件中最后一行加入disable = no,再重启xinetd,再使用netstat -an |grep 514查看,得到tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN结果,表明rsh服务器已经启动。

    只要保证Linux机器上的进程里有rstatd和xinetd这二个服务就可以用LR去监视了。

    两点小的技巧:

    ①检查是否启动: rsh server 监听的TCP 是514。

    [root@mg04 root]# netstat -an |grep 514

    tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

    如果能看到514在监听说明rsh服务器已经启动。

    ②检查是否启动: rstatd

    输入命令: rpcinfo -p

    如果能看到类似如下信息:

    程序 版本 协议 端口

    100001 5 udp 937 rstatd

    100001 4 udp 937 rstatd

    100001 3 udp 937 rstatd

    100001 2 udp 937 rstatd

    100001 1 udp 937 rstatd

    那就说明rstatd服务启动了,(当然这里也可以用ps ax代替)

    ③重起xinetd方法:

    在suse linux如下操作:

    cd /etc/init.d

    ./xinetd restart

    看到网上有的地方说使用如下命令:

    # service xinetd reload

    # /sbin/service xinetd rstart

    不知道是在什么系统用的。

    ④安装rsh,和rsh-server两个服务包方法

    a. 卸载rsh

    # rpm –q rsh----------查看版本号

    # rpm -e 版本号---------卸载该版本。

    b.安装

    # rpm –ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

    ⑤在启动rpc.rstatd时,会报错“Cannot register service: RPC: Unable to receive;errno = Ction refused”。

    解决方法如下:

    # /etc/init.d ./portmap start

    # /etc/init.d ./nfs start

    然后再次启动rpc.rstatd就好了。

    最后,在controller中,将UNIX resources拖放到右边窗口里面,右击鼠标选择Add Measurements,添加被监控linux的IP地址,然后选择需要监控的指标就可以了。

    三、监控UNIX

    lr监控UNIX,UNIX先启动一rstatd服务

    以下是在IBM AIX系统中启动rstatd服务的方法:

    1、 使用telnet以root用户的身份登录入AIX系统

    2、 在命令行提示符下输入:vi/etc/inetd.conf

    3、 查找rstatd,找到

    #rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3

    4、将#去掉51Testing软件测试网

    5、:wq保存修改结果

    6、命令提示符下输入:refresh –s inetd 重新启动服务。

    这样使用loadrunner就可以监视AIX系统的性能情况了。

    注:在HP UNIX系统上编辑完inetd.conf后,重启inetd服务需要输入inetd -c

    UNIX上也可以用rup命令查看rstatd程序是否被配置并激活

    若rstatd程序已经运行,重启时,先查看进程ps -ef |grep inet,然后杀掉进程,再refresh –s inetd进行重启。

  • LoadRunner常用函数

    2009-09-02 15:25:06

    1.         Intweb_reg_save_param("参数名","LB=左边界","RB=右边界",LAST);/注册函数,在参数值出现的前面使用,注册成功时返回值为0,注册失败时返回值为1。左右边界需根据TreeView里相关步骤的SeverResponse代码来确定。用以上函数能获取第一个符合条件的数值。

    2.         web_reg_save_param("参数名”,"LB=左边界”,"RB=右边界","Ord=All",LAST);/当参数有多个值时,加上"Ord=All”后可获取所有的数值。注册成功后,{参数名_count}表示取得的数值个数,{参数名_1}为第一个数值,{参数名_2}为第二个数值。

    3.         lr_save_string(“字符串变量”,"参数名")/将字符变量里的值传递给指定参数。通过该函数来改变DataFile类型参数的数值。

    4.         lr_eval_string("{参数名}")/取得参数的数值。可取得已注册参数或DataFile类型参数的数值。eval就是evaluation(估价, 评价, 赋值)的缩写。

    5.         int sprintf(char * string , const char*format_string[,args]);/字符串赋值函数

    Action()

    {

    int index=56;

    charfilename[64],*suffix="txt";

    sprintf(filename,"log_%d.%s",index,suffix);

    lr_output_message("Thenewfilenameis%s",filename);

    return 0;

    }

    OutputThenewfilenameislog_56.txt

    6.         char*strcat(char*to,constchar*from);/将一字符串追加到另一字符串后面

    7.         web_find("find_time","What=2006-03-0118:21:16.882",LAST);/增加检查点,检查“2006-03-0118:21:16.882”这个字符串是否出现在当前页面上。find_time为自己任意输入的检查点名称。

    8.       事务函数

    lr_end_sub_transaction/标记子事务的结束以便进行性能分析

    lr_end_transaction/标记LoadRunner事务的结束

    lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

    lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并发送错误消息

    lr_get_trans_instance_duration/获取事务实例的持续时间(由它的句柄指定)

    lr_get_trans_instance_wasted_time/获取事务实例浪费的时间(由它的句柄指定)

    lr_get_transaction_duration/获取事务的持续时间(按事务的名称)

    lr_get_transaction_think_time/获取事务的思考时间(按事务的名称)

    lr_get_transaction_wasted_time/获取事务浪费的时间(按事务的名称)

    lr_resume_transaction/继续收集事务数据以便进行性能分析

    lr_resume_transaction_instance/继续收集事务实例数据以便进行性能分析

    lr_set_transaction_instance_status/设置事务实例的状态

    lr_set_transaction_status/设置打开事务的状态

    lr_set_transaction_status_by_name/设置事务的状态

    lr_start_sub_transaction/标记子事务的开始

    lr_start_transaction/标记事务的开始

    lr_start_transaction_instance/启动嵌套事务(由它的父事务的句柄指定)

    lr_stop_transaction/停止事务数据的收集

    lr_stop_transaction_instance/停止事务(由它的句柄指定)数据的收集

    lr_wasted_time/消除所有打开事务浪费的时间

    lr_end_sub_transaction/标记子事务的结束以便进行性能分析

    r_end_transaction/标记LoadRunner事务的结束

    lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

    lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并

     

    9.      命令行分析函数

    lr_get_attrib_double/检索脚本命令行中使用的double类型变量

    lr_get_attrib_long/检索脚本命令行中使用的long类型变量

    lr_get_attrib_string/检索脚本命令行中使用的字符串

    10.  信息性函数

    lr_user_data_point/记录用户定义的数据示例

    lr_whoami/将有关Vuser脚本的信息返回给Vuser脚本

    lr_get_host_name/返回执行Vuser脚本的主机名

    lr_get_master_host_name/返回运行LoadRunnerController的计算机名

    11.  字符串函数

    lr_eval_string/用参数的当前值替换参数

    lr_save_string/将以NULL结尾的字符串保存到参数中

    lr_save_var/将变长字符串保存到参数中

    lr_save_datetime/将当前日期和时间保存到参数中

    lr_advance_param/前进到下一个可用参数

    lr_decrypt/解密已编码的字符串

    lr_eval_string_ext/检索指向包含参数数据的缓冲区的指针

    lr_eval_string_ext_free/释放由lr_eval_string_ext分配的指针

    lr_save_searched_string/在缓冲区中搜索字符串实例,并相对于该字符串实例,该缓冲区的一部分保存到参数中

    12.  消息函数

    lr_debug_message/将调试消息发送到输出窗口

    lr_error_message/将错误消息发送到输出窗口

    lr_get_debug_message/检索当前的消息类

    lr_log_message/将输出消息直接发送到output.txt文件,此文件位于Vuser脚本目录中。该函数有助于防止输出消息干扰TCP/IP通信。

    lr_output_message/将消息发送到输出窗口

    lr_set_debug_message/为输出消息设置消息类

    lr_vuser_status_message/生成格式化输出并将其打印到ControllerVuser状态区域。

    lr_message/将消息发送到Vuser日志和输出窗口

    13.  操作函数

    web_custom_request允许您使用HTTP支持的任何方法来创建自定义HTTP请求
    web_image
    在定义的图像上模拟鼠标单击
    web_link
    在定义的文本链接上模拟鼠标单击
    web_submit_data
    执行无条件无上下文的表单
    web_submit_form
    模拟表单的提交
    web_url
    加载由“URL”属性指定的URL

    14.  身份验证函数

    身份验证函数web_set_certificate使Vuser使用在InternetExplorer注册表中列出的特定证书
    身份验证函数web_set_certificate_ex指定证书和密钥文件的位置和格式信息
    身份验证函数web_set_user指定Web服务器的登录字符串和密码,用于Web服务器上已验证用户身份的区域

    15.  缓存函数

    缓存函数web_cache_cleanup清除缓存模拟程序的内容

    16.  检查函数

    检查函数web_findHTML页内搜索指定的文本字符串
    检查函数web_global_verification在所有后面的HTTP请求中搜索文本字符串
    检查函数web_image_check验证指定的图像是否存在于HTML页内
    检查函数web_reg_find在后面的HTTP请求中注册对HTML源或原始缓冲区中文本字符串的搜索

    17.  连接定义函数

    连接定义函数web_disable_keep_alive禁用Keep-AliveHTTP连接
    连接定义函数web_enable_keep_alive启用Keep-AliveHTTP连接
    连接定义函数web_set_connections_limit设置Vuser在运行脚本时可以同时打开连接的最大数目

    18.  并发组

    web_concurrent_end标记并发组的结束
    web_concurrent_start
    标记并发组的开始

    19.  cook函数

    web_add_cookie添加新的Cookie或修改现有的Cookie
    web_cleanup_cookies
    删除当前由Vuser存储的所有
    Cookie
    web_remove_cookie
    删除指定的Cookie

    20.  关联函数

    web_create_html_paramHTML页上的动态信息保存到参数中。(LR6.5及更低版本)
    web_create_html_param_ex
    基于包含在HTML页内的动态信息创建参数(使用嵌入边界)(LR6.5及更低版本)。
    关联函数web_reg_save_param

  • LoadRunner脚本录制技巧

    2009-08-18 15:04:57

    下面文章说明如何在LR里面过滤多余请求,希望对大家有帮助

    http://bbs.ltesting.net/viewthread.php?tid=16634&highlight=LR%2B%BD%C5%B1%BE

     

    LR录制技巧放送

    http://bbs.ltesting.net/viewthread.php?tid=41068&extra=page%3D1&frombbs=1

    LoadRunner脚本录制方法

    发布: 2008-8-19 18:29 | 作者: snooker | 来源: 本站原创 | 查看: 241次 | 进入软件测试论坛讨论
    领测软件测试网

    这篇文章性能测试工具LR进行简单介绍,LR的安装和如何录制简单的脚本并对录制好的脚本进行加压等内容,主要目的是让大家对LR有一个基本的了解,同时也掌握录制一个简单脚本的方法。
    在学习过程中的问题可以在此帖中发帖询问,心得也可在此帖中跟帖进行交流,共同进步。如果有更好的资料希望可以贴到帖子中,共同分享。

    http://bbs.ltesting.net/viewthread.php?tid=16644&highlight=LR%2B%BD%C5%B1%B

    http://bbs.ltesting.net/viewthread.php?tid=19676&highlight=LR%2B%BD%C5%B1%BE

     

  • LoadRunner脚本录制

    2009-08-18 15:02:02

    有不少网友在了解软件测试时,最初都知道测试按照方法可以分为手工测试和自动化测试,手工测试比较容易理解,就是按照测试用例的步骤严格执行就可以了,其中的技巧在于测试用例的设计。而自动化测试则是在被测系统的回归测试以及企业建立自动化测试框架中大量使用。而自动化测试中又以功能自动化和性能自动化为主,本期专题主要研究的是性能自动化测试工具LoadRunner的脚本的基础知识以及如何录制LoadRunner测试脚本和测试脚本中调试方法

     

    {专题内容列表}

     

    1、什么是脚本以及什么是LoadRunner脚本

    2、LoadRunner脚本录制方法

    3、LoadRunner脚本录制技巧

     

    1、 什么是脚本以及什么是LoadRunner脚本

    http://www.51testing.com/?uid-76700-action-viewspace-itemid-8801

     
    编者语:通过这个帖子可以让初学者明白什么叫做脚本以及什么是LR测试脚本,能够清楚的了解性能测试脚本和手工测试的不同之处

     

    2、 LoadRunner脚本录制方法

    LR的基础操作之脚本录制之—基础脚本录制、LR脚本的录制以及完善

     http://bbs.51testing.com/thread-109272-1-1.html
     

    编者语:通过LR脚本录制方法能够看出常见的脚本录制的流程和如何进行LR脚本的完善,希望通过这二个例子可以让广大网友明白LR脚本的录制方法以及协议的选择。

     

    3、 LoadRunner脚本录制技巧

     

    HTTP/HTML脚本中过滤不需要的请求

     

    LoadRunner脚本录制技巧放送


    http://hi.baidu.com/lidhcn/blog/item/bad75efcd546e6f8fd037f36.html

    http://hi.baidu.com/lidhcn/blog/item/af6ab8dd675d59dc8c102938.html


    编者语:录制脚本要有一定的技巧,这部门内容演示了如何在init,action,end进行脚本录制技巧自定义以及如何过滤无效请求

     

    4、 LoadRunner脚本举例

    LR自带订票系统经典脚本

     

    LR经典脚本

     

    LR利用foxmail发送邮件部分的脚本代码

     

    LR视频录制案例

     

    LR利用foxmail发送邮件部分

     

    LR录制WAP

     

     

    编者语:上面的脚本有文本演示也有视频演示,希望大家的水平能够得到进阶和提高。

     

    希望大家多多提出自己的意见,本期专题内容后续仍会不断更新,大家如果发现哪个帖子比较好的话可以发邮件或消息给斑竹,斑竹会及时更新相应专题列表,这样大家才能共同进步,测试时代才能做的更好!

  • LoadRunner关联应用实例

    2009-08-18 14:56:44

    脚本内容:录制web登录邮箱,发送一封带有附件的邮件。
            由于每次执行的时候服务器的返回值,这个返回值—附件变量"AttachFiles"每次返回都是不一样的,所以需要将这个变量"AttachFiles"进行关联操作!
            关联的方法大体上可以分为手工关联和自动关联。这两种方法各有所长,手工的比较保险,但是需要自己去找关联函数的位置和需要关联的参数,然后一一替代,自动关联就比较简单了,找到关联参数的特征,运行的时候自动关联就是了,但有时候自动关联不是很完整,可能有的参数找不全!在实际使用过程中需要注意。此处。录的脚本比较简单,需要关联的参数只有一个,所以,自动关联还是比较可靠的!
            自动关联方式也有两种:变量名关联和变量值关联!
            录制到关联的过程:
            一般情况下都是先录制两份相同的脚本,这里的相同是指录制时执行的业务流程,然后用工具比较两个脚本中变化的变量,可用Altraedit,loadrunner自身也有一个比较的工具,但是感觉这个用起来比较快!
            找到要进行关联的变量就可以关联了,下面是采用的几种关联方法:
            变量名关联:前提条件,已经知道整个脚本中需要关联的变量名是:"AttachFiles".那么,需要:RecordOptionàCorrelation,新建一个"aaa"的关联名,规则为:
    Action:parameterizeform
    filed value;Field name:AttachFiles;Parameter
    Prefix:AttachFiles;
            然后重新录制该脚本,录制的过程中,自然会有关联的提示,只需OK就可以了!
            变量值联:前提条件是已经知道整个脚本中需要关联的变量名是"AttachFiles"。选择RecordOptionàCorrelation,新建一个"bbb"的关联名,规则为:
    Action: Search for parameters in all of the body text   Left bounday:
            还有一点就是,这个左右边界值,一定要是服务器的返回值(response from server),而不是用户发出的请求值(userrequest),这个值可以在recording log里找,然后重新录制该脚本,录制的过程中,自然会有关联的提示,只需OK就可以了!
            手工关联:在脚本中输入函数:web_reg_save_param("ATT",
                        "LB="input type="hidden" name="AttachFiles" value=",
                        "RB=>",
                         LAST,);
            手工关联的关键在于这个函数位置怎么放,脚本的内容多了,不容易找到放此函数的位置。可以录完脚本后,再执行一遍,点击:viewàscancorrelation,loadrunner会自动找一些他觉得需要关联的值参数,并且显示在correlation- result里,我们再选取需要的参数,点击右边的”correlation“,然后这个函数就会自动加到他应该出现的位置,然后我们就可以"借用"它的劳动成果,自己手动添加函数啦!
            接着就是在脚本中寻找使用该变量出现的位置,执行替换,value={ATT},这个脚本中共需要两次替换即可!
            手工关联后,就不需要再重新录制脚本了!

  • Loadrunner如何在脚本中做关联

    2009-08-18 14:52:30

    如何在脚本中做关联 (Correlation)
    当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。

    当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
    所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。
    何谓关联(correlation)?
    所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。
    举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
    下面的图示说明了这样的情形:
    当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
    在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。

    要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。
    哪些错误代表着我应该做关联(correlation)?
    假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示 HTTP 404的错误讯息。
    要如何做关联(correlation)?
    关联(correlation)函数
    关联(correlation)会用到下列的函数:

  • LoadRunner中的一个关联技巧

    2009-08-18 14:50:55

       众所周知,在LoadRunner中,关联是一个很重要的动作,大多数的脚本在录制完成后并不能直接回放,需要通过一定的关联才能成功回放。关联的技巧有很多,这里介绍的就是其中之一,以下用一个实际的例子来说明。
        脚本的背景如下:
        web_submit_data("classiLoanMaterial.jsf_2")(web_submit_data函数的其它部分省略,下同。)返回的页面上可能存在多条记录,可能一条,可能两条,也可能三条,等等。我们需要将这些记录逐个选中进行操作。注意:不是全部选中,而是要逐条记录进行操作。同时,每一条记录各有一个编号,这是需要进行关联的值。在下面的操作中web_url("directAdjust.jsf",
            "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
    classiadjuststepbystep/directAdjust.jsf?approveFormNum=123456")需要使用到该编号,即黑体字部分的值。面对这样的目的,很自然地,我们会想到用一个循环语句来实现。首先,在classiLoanMaterial.jsf页面之前加一个关联如下:
        web_reg_save_param("sor","LB=sor\" value=\"","RB=\"","Ord=ALL",LAST);将Ord参数值设定为ALL,则关联函数将自动把符合条件的关联值保存到参数数组里。在本例中,假设关联值返回三条记录,则LR分别将值保存到sor_1,sor_2,sor_3中,同时,LR还将自动创建一个sor_count变量来保存总的记录数,在这里sor_count值等于3。利用这些信息,我们就可以很方便地在循环语句中实现我们的目的了。步骤如下:
    1、声明各变量:
        int count;
        int i;
        char sor[50];
        char sorvalue[50];
    2、将返回的记录数保存到count变量里:
    count=atoi(lr_eval_string("{sor_count}"));
    3、使用for循环:
    for(i=1;i<=count;i++)
    {
        sprintf(sor,"{sor_%d}",i); //分别将各个sor值保存到sor字符串中

        sprintf(sorvalue,"%s",lr_eval_string(sor));//通过lr_eval_string函数将字符串赋给sorvalue变量

    }
    4、在循环体中使用关联值替换相关值:
    web_url("directAdjust.jsf",
            "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
    classiadjuststepbystep/directAdjust.jsf?approveFormNum={sorvalue}")
     
        一切看起来似乎顺理成章,然而如果按照以上的步骤做下来,将会很遗憾地发现:我们定义的{sorvalue}值根本就不被LR认可并接受,于是它将无情地给我们抛出一个错误,说该值是非法的。怎么办?难道我们前面做的一切都白费了吗?
        有句老话说得好:天无绝人之路。聪明而又善良的LR开发团队已经为我们考虑到了这个问题,给我们预备了一个很有用的函数:lr_save_string,它可以帮助我们解决这个问题。于是我们祭出lr_save_string这道最后的杀手锏:
    5、在使用关联值之前进行字符串格式转换:
        lr_save_string(sorvalue,"sorvalue1");
       
    web_url("directAdjust.jsf",
            "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
    classiadjuststepbystep/directAdjust.jsf?approveFormNum={sorvalue1}")

    需要特别注意lr_save_string的用法,它是参数值在前(sorvalue),参数名在后("sorvalue1"),这和一般的习惯用法正好反过来(真是好奇怪!)。而且"sorvalue1"这个参数名称不需要事先声明,它只是一个字符串而已(这也比较奇怪!^_^)。

    到此,我们总算大功告成!脚本回放成功,并且正确达到了预期的效果!打完收工!

    总结:C的变量不能直接在LR的API里调用,所以必须用lr_save_string进行转换。

    最后顺便说一下,lr_save_string这个函数真的很好用,这个例子中提到的方法也适用于另外一些情况,比如说有时候,通过关联函数出来的值我们不能直接使用,还需要做一些特殊的处理时,那么我们可以把关联得到的值取出来,赋给一个字符串,对其进行一番修剪加工后,再用 lr_save_string,就可以使用它来替代需要关联的值了。

    后记:我的这篇文章发布在网上以后,在广大的测试同行中间引起了强烈的反响,他们纷纷发来贺电和表扬信,对我这种勇于探索、乐于分享的精神给予了充分的肯定。^_^当然,这中间也难免存在极个别的不和谐声音,例如Zee同学就对我的这篇文章提出了不同看法,他觉得我的做法是把简单的问题复杂化了,理由是可以只做一次关联,每次只取第一笔记录即可,当循环进行操作时,第一笔做完以后,第二笔记录自然会上升到第一笔记录的位置,因此没有必要使用关联数组。我认为他的疑问并非没有道理,而且是比较有代表性的,因此我在这里做一个补充说明。在我接触过的大多数应用系统中,确实都是按照Zee所说的方式进行处理,在这种情况下,脚本的处理的确没有必要像我以上所述的那样复杂。不过我在本例中谈到的例子比较特殊,在操作完成后,它只是把每笔记录的状态位由“未完成”修改为“已完成”,而原有的记录并没有消失,而是仍然停留在原有的位置,此时如果按照Zee所说的方法,那么在执行第二次循环时,LR将取到操作状态为“已完成”的第一笔记录,而不会取到下一笔未完成的记录,显然这是不符合我们的要求的,因此在这里我需要做以上这样复杂的一个处理。

  • LoadRunner之--关联(correlation)

    2009-08-18 14:45:23

    所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)资料,转变成是摘取自服务器所送的、动态的、每次都不一样的资料。举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要资料时,都会在资料中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要资料的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要资料,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页资料给VuGen了。
    当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的资料,当浏览器再送出网页B的情求时,这时就要用到ID=123的资料,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
    在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的资料,而不是用服务器新给的ID=456,整个脚本的执行就会失败。要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它摘取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了.

     

    当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且记录下来,产生脚本

            当执行脚本时,VuGen伪装成浏览器,然后根据脚本,把当初浏览器所做过的,再对网站服务器运行一遍。

            所以记录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。

    何谓关联(correlation)?
    所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是取自服务器所送的、动态的、每次都不一样的数据

    下面举一个实例来说明:

            当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。

            在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。

    用以下进行图示:

          [点击图片可在新窗口打开]

    具体错误的信息会出现一些什么内容呢?

            错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。
    VuGen提供二种方式帮助您找出需要做关联(correlation)的值:
    1. 自动关联
    2. 手动关联
    自动关联
            VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。
    自动关联提供下列二种机制:
    ? Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。规则来源有两种:
    o 内建(Built-in Correlation):
            VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、 PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
            您也可以在【Recording Options】>【Internet Protocol】>【Correlation】检视每个关联规则的定义。
    请依照以下步骤使用Rule Correlation:
    1. 启用auto-correlation
    1. 点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。
    2. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、 mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。
    3. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。
    4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:
    【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。§
    【Perform. correlation in sceipt】:直接自动建立关联

    手动关联
    手动关联的执行过程大致如下:
    1. 使用相同的业务流程与数据,录制二份脚本
    2. 使用WinDiff工具协助找出需要关联的数据
    3. 使用web_reg_save_param函数手动建立关联
    4. 将脚本中有用到关联的数据,以参数取代
    接下来将详细的说明如何执行每个步骤
    使用相同的业务流程与数据,录制二份脚本
    1. 先录制一份脚本并存档。
    2. 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。
    有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。
    使用WinDiff工具协助找出需要关联的数据
    1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
    2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。
    3. 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。

    4.然后利用一些函数实现关联

            以上仅仅谈了一下LR脚本为什么要关联,关联包括手工关联和自动关联,更为详细的内容可以参照LR的使用说明书

  • Loadrunner Port Mapping录制方法

    2009-08-18 12:26:48

    Loadrunner Port Mapping录制方法(一种通用的录制脚本的方法)


    以下观点仅是本人对loadrunner的理解所写,不一定正确,仅供大家参考!如果有不对的地方还请指出!

    我们在很多时候因为无法录制脚本而困惑,如loadrunner使用FTP协议录制Core FTP Lite时,只能看到loadrunenr捕获到事件,但无法生成脚本,又比如使用POP3或SMTP协议录制邮件收发时也是只能捕获到时间,但无法生成脚本,此时我介绍一种万能的录制方法可以解决这个问题。

    其实loadrunner录制的基本原理就是通过Port Mapping这个方法实现的,只不过我们在平时没有在意而已,那么先来介绍一下loadrunner典型的录制原理,再介绍一下loadrunner使用Port Mapping方式的录制原理。

    通常情况下,我们在录制脚本的过程是:

    1、  选择协议

    2、  输入要录制的URL或指定要录制的应用程序的路径

    3、  选择录制脚本的位置,存放在哪个ACTION中

    4、  设置录制选项

    5、  开始录制

    此时loadrunner会自动监控你所指定的URL或应用程序所发出的请求及服务器返回的响应,它做为一个第三者监视着客户端与服务器端的所有对话,然后把这些对话记录下来,生成脚本,再次运行时模拟客户端发出的请求,捕获服务器端的响应。它在做监视时会自动捕捉客户端发出请示时所用的端口,并根据请求内容向服务器端的相应端口发送,而服务器回应时,根据请求消息中的端口向客户端某个端口发出回应,也就是说loadrunner监听的端口是由应用程序或请求所决定的。

       好了,知道通常情况下loadrunner录制脚本的原理后,我们在说一下Port Mapping录制脚本的原理:

       Port Mapping录制过程是:

       我们已使用POP3协议录制收邮件的过程来举例

    1、  选择协议,选择POP3协议

    2、  在要录制的应用程序路径中输入“loadrunner安装路径\bin\wplus_init_wsock.exe”

    3、  设置录制选项,在NETWORK的Port Mapping中新建一个代理

    根据下图新建一个代理:

    在socket service设置中,要指明你客户端程序要连接的服务器地址、端口、协议、录制脚本的类型等选项,由于负责收邮件的服务器默认的端口是110,所以我们这里将PORT设置为110;

    在TRAFFIC FORWARDING设置中,这个端口可以为任意端口,主要是为了让loadrunner启动的代理服务知道要把所有发往指定端口111的请求转发给指定服务器的110端口

    原理图如下:

    4、  设置要录制的程序端口

    将要录制的应用程序原本发往外网服务器的请求发送到本地的loadrunner启动的代理程序上,以便loadrunner进行监控

    设置发送到本地的111端口:

    5、  完成以上设置后,就可以开始录制脚本了

    在录制脚本时我们会看到loadrunner会启动一个代理程序

     

     这个就代表我们设置的代理服务正常启动了。通过重新录制我们不仅看到了loadrunner捕获到了事件,而且正确生成了脚本。

    好了,总结一下Port Mapping录制的录制原理:

    首先将要录制的应用程序向服务器发送请求的服务器地址和端口改为本地计算机及111端口,在Port Mapping中设置的代理程序再将发往111端口的所有请求转发给真正的服务器端,相当于loadrunner强制性的将本地某端口的通讯录制了下来,通过这个代理更明确了需要监控的端口和协议。

    其实loadrunner通常使用的录制方式也是采用这样一个原理,只不过我们并不知道它具体监控的是哪个端口,而在Port Mapping录制方法中我们明确的指定了监听端口。可以说通常的录制方法是一种隐性的,而后一种录制方法是显性的。

    可以通过此方法录制我们现有的所有协议的脚本,不会再出现只看到事件无法生成脚本的情况了!

    其实这才是一种通用的录制方法!

  • LoadRunner脚本录制设置

    2009-08-18 12:19:17

    {专题内容概述}

    在上期的专题中,我们给大家带来了LoadRunner脚本录制的方法,上期中有些脚本的概念以及如何录制脚本、脚本进阶。本期专题为广大测试爱好者带来了LoadRunner中VU_script录制设置(Recording Options)的一些知识。希望大家在录制的时候选择好协议发送方式以及掌握什么是端口映射,以及LoadRunner的关联概念,另外大家如果有好的内容和帖子,欢迎联系测试时代编辑,采稿者一律给予奖励!

    {专题内容列表}

    1、LoadRunner端口映射

    2、LoadRunner脚本录制设置之URL-based 和 HTML-based

    3、LoadRunner脚本录制设置之关联

    4、

    1、 LoadRunner端口映射

    http://www.51testing.com/?41972/action_viewspace_itemid_90817.html

    编者语:通过这个文章内容让大家了解什么是Port mapping和端口映射如何应用

    2、 LoadRunner脚本录制设置之URL-based 和 HTML-based

    编者语:通过LR脚本录制设置中的Recording Level来告诉大家什么时候选择URL方式,什么时候选择HTML方式

    3、 LoadRunner脚本录制设置之关联

    什么是LoadRunner关联

    http://www.51testing.com/?uid-72455-action-viewspace-itemid-8143

    LoadRunner脚本关联技巧

    http://www.51testing.com/?uid-145985-action-viewspace-itemid-144114

    LoadRunner如何在脚本中作关联

    http://www.51testing.com/html/05/n-102905.html

    LoadRunner关联应用实例

    http://www.51testing.com/html/74/n-69774.html

    编者语:关联是录制设置里面最重要的一类功能,通过长篇幅的文章来告诉大家什么是关联,以及关联如何使用,并给出关联的实际应用实例,希望大家能够从这里对关联的认识的思路更加清晰!


    希望大家多多提出自己的意见,本期专题内容后续仍会不断更新,大家如果发现哪个帖子比较好的话可以发邮件或消息给斑竹,斑竹会及时更新相应专题列表,这样大家才能共同进步,测试时代才能做的更好!

  • LoadRunner的协议选择

    2009-08-18 12:11:07

    1.LR支持多种协议,请大家一定要注意,这个地方协议指的是你的Client端通过什么协议访问的Server,Client一般是面向最终使用者的,Server是第一层Server端,因为现在的体系架构中经常Server层也分多个层次,什么应用层,什么数据层等等,LR只管Client如何访问第一层Server. 2.特别要注意某些应用,例如一个Web系统,这个系统是通过ActiveX控件来访问后台的,IE只是一个容器,而ActiveX控件访问后台是通过COM/DCOM协议的,这种情况就不能使用Web协议,否则你什么也录制不到,所以,LR工程师一定要了解应用程序的架构和使用的技术。
     
      3.谈谈多协议LR是支持在一个脚本里面使用多协议的,不过这个多协议是有一定的限制的,我有一个LR7.6上哪些协议支持多协议,LR8.0是不是取消了这些限制我不清楚。象HTTPS,一般来讲一定要选择多协议,但在选择具体协议的时候一定只选Web协议,这时候才能作那个端口映射。
     
      4.谈谈Web协议中Option Web协议里面有一些Option,具体我记不清楚了,但有一个地方很重要:就是选择URL方式还是HTM方式录制,这里有一些原则a. 尽量使用HTM方式录制b.如果使用了Javascrīpt,并且javascrīpt里面与后台有交互,那一定要使用URL方式,例如javascrīpt用于判断用户名和密码是否正确(与后台一定会有交互),那么就要使用URL方式录制;但如果Javascipt只是判断用户名或密码的格式,那一般不会与后台发生交互,就不需要使用URL方式。至于什么情况下一定要用URL方式,我曾经写过一个文档,但现在我不记得了不好意思。
     
      5.谈谈并发点和结果检查很多人喜欢使用并发点和结果检查,我谈谈我自己的看法。第一我基本上从来不使用结果检查,压力测试的结果我一般是去后台检查存储层的数据是否正确的。LR只能检查协议层上的错误,但如果在大量并发用户的情况下使用返回结果检查例如reg_text_check,会极大的占用客户端的资源,我一般不这么作;至于并发点,我只有在客户强烈要求的情况下才会使用,否则基本不用。
    LoadRunner的协议选择、Winsocket、C/S应用程序

    发布: 2008-10-08 18:19 | 作者: 网络转载 | 来源: 网络 | 查看: 287次 | 进入软件测试论坛讨论
    领测软件测试网

    MILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">很多时候一提到不是基于浏览器的应用,很多人就会想到用WinSocket协议来录制,仿佛Form窗体都可以用Winsocket 。

            从道理上讲网络通讯的底层都是基于Socket的,例如TCP、UPD等,似乎所有的程序都可以用Socket协议来录制。但是事实不是这样的,因为选择的协议决定了LoadRunner如何捕获数据包。否则会多捕获很多无用的数据。

            因此,不是所有的程序都是适合WinSocket协议的。实际上,那些基于Socket开发的应用才真正适合Socket协议来进行录制。其他的,例如基于数据库的应用,就不太时候Socket协议,甚至可能录制不到脚本。

            很多C/S程序,一定要选择合适的协议。根据作者的经验,C/S的程序多数需要手工开发很多脚本,因为录制的很多回放时候或多或少都会有些问题,但是可以参考录制的结果。

            所以测试一个程序,一定要搞清楚开发人员用了什么技术、数据流是什么协议封装的。

            附件是我们自己开发的Controller,我们自己用面向对象实现了并发测试架构(目前支持并发、迭代、thinktime、参数文件、启动时间间隔,集合点功能正在开发中)。借助我们自己开发的Agent,能很好的测试我们的C/S架构的程序。
          这个工具和LoadRunner配合起来,可以完成大多数性能测试。
        这个工具主要为我们测试视频播放效果而开发,呵呵。这是LoadRunner不太擅长的。

    使用LoadRunner如何更好的选择协议?



    测试一个C/S系统要根据所用到的后台数据库来选择不同的协议:

    1.后台数据库是sybase,则采用sybaseCTlib协议。

    2.后台数据库是sql server,则使用MS sql server协议。

    3.后台数据库是oracle 数据库,就使用oracle 2-tier协议。

    4.没有数据库的c/s(ftp,smtp)系统,可以选择windows
    Sockets协议。

    5.其他的ERP,EJB(需要ejbdetector.jar),选择相应的协议即可。

     

     B/S 结构,选择WEB(Http/Html)协议
            C/S结构,可以根据后端数据库的类型来选择,如SybaseCTLib协议用于测试后台的数据库为Sybase的应用;MS SQL Server协议用与测试后台数据库为 SQL Server的应用;对于一些没有数据库的Windows应用,可选用Windows Sockets底层协议。

            总之,真确选择协议,就要熟悉被测试应用的技术架构。以下列出一些LoadRounner支持的协议:
            一般应用:C Vuser、VB Vuser、VB scrīpt  Vuser、JAVA Vuser、Javascrīpt Vuser
            电子商务:WEB(Http/Html)、FTP、LDAP、Palm、Web/WinsocketDual Protocol
            客户端/服务器:MS SQL Server、ODBC、Oracle、DB2、Sybase CTlib、Sybase DBlib、Domain Name Resolution(DNS)、Windows Socket
            分布式组件:COM/DCOM、Corba-Java、Rmi_Java
            EJB:EJB、Rmi_Java
            ERP/CRP:Oracle NCA、SAP-Web、SAPGUI、SAPGUI/SAP-Web Dual Protocol、PropleSoft_Tuxedo、Siebel Web、Siebel-DB2 CLI、Sieble-MSSQL、Sieble Oracle
            遗留系统:Terminal Emulation (RTE)
            Mail 服务:Internet Messaging(IMAP)、MS Exchange(MAPI)、POP3、SMTP
            中间件:Jacada、Tuxedo 6、Tuxedo 7
            无线系统:i-mode、voiceXML、WAP
            应用部署软件:Citrix_ICA
            流:Media Plays(MMS)、Real

    在讨论winsock解决方案之前,我们先讨论一下各种协议是如何工作。从前面的简介可以了解到很多的高级协议,例如FTP,HTTP协议等。以及所有基于window的应用(例如IE,WS-FTP)底层都是在Winsocket层上通信,因此任何高级协议的底层都是用Winsocket通信。
        什么时候在LR中选择Winsocket协议呢?你要先了解LR是怎么样工作的:LR捕捉API请求然后再把它们回放。所以当你在创建LR WEB脚本的时候,VUGEN捕捉从

  • LoadRunner脚本中的协议选择

    2009-08-18 11:48:34

    LoadRunner脚本开发过程中的协议选择作为脚本开发的第一个步骤,相当重要,只有选择了合理的正确的协议才能开发出好的测试脚本。在协议选择过程中需要注意选择与被测对象相应的脚本,比如Web系统一般选择HTTP./HTML协议,FTP服务器一般选择FTP协议的脚本,另外在协议选择之前需要确认被测系统使用了什么协议,这里说到的协议指的是应用层的协议,一般确认系统选择了什么样的协议一般有以下几种方法:

    1)  可以直接确认

    这种情况下你可以通过你的测试常识直接判读系统使用了什么样的协议,比如前面说的Web系统使用了HTTP./HTML协议,Ftp服务使用了FTP协议等;

    2)  通过研发人员了解被测系统使用了什么样的协议

    如果通过你的判断不能确定使用了什么样的协议这个时候,你可以跟研发人员进行沟通,确认他在开发的过程中使用了什么样的协议。

    3)  使用常用的数据监听工具进行数据包分析

    有的时候可能你的研发人员也不能确定他在开发过程中使用了什么协议,这个确实是有可能的特别是现在的研发人员特别喜欢用别人的插件,或者开发环境封装的很好,导致他们没有开发底层的协议栈,这个时候就需要你自己去判断,自己判断过程中可以借助协议分析工具,常用的协议分析工具如:sniffer Pro,ethreal等;这些工具可以通过抓取数据然后对数据包进行分析的方法分析出现在常用的协议。能力还是相当的强的。

    4)  万能协议Winsocket协议

    如果上述方法都不行,但是你还想用LR完成你的性能测试,没有办法这个时候可以拿出这个Winsocket协议进行脚本的开发,这个协议只要是在Windows上的通信的软件都可以将脚本开发出来,但是脚本调试的难度相当到,需要看大量的16进制的数据,并且有的时候还需要复杂的管理,本人建议能不用,最好不用。

    另外可以通过以下的这些文章对协议选择进行更深入的了解:

    1.       LoadRunner的协议选择

    http://www.51testing.com/?uid-491-action-viewspace-itemid-15717

    编者语:

     从网络上获取的一篇关于LR中协议选择的文章,写的还是可以,虽然篇幅不大,但是也说出了LR中协议选择的一些东东,大家可以看一下。

    2.       LoadRunner的协议选择、Winsocket、CS应用程序

    http://www.51testing.com/html/71/n-20671.html

    编者语:

           这篇也是在网上获得的一篇,从用户喜欢winsocket协议开始说起,其中介绍了协议选择的一些东东,还是有些参考价值。

    3.       使用LoadRunner如何更好的选择协议

    http://www.51testing.com/?uid-145985-action-viewspace-itemid-144086

    编者语:

           网上获得的一篇文章,标题不错,文章正文中提到了协议选择的5中方法,可以作为大家的一些参考。

    4.       Loadrunner录制脚本,协议的选择

    http://www.51testing.com/?uid-239230-action-viewspace-itemid-142212

    编者语:

          介绍了LR中协议选择的一般方法,阐述了通常情况下如何选择协议,可以看看。

    5.       LoadRunner与Winsock协议

    http://www.51testing.com/html/89/n-8289.html

    编者语:

                  这篇文章的录入本来不属于这个题,但是看到大家一般在录制脚本的时候还是比较喜欢winsocket,所以把这篇文章加入,并且这篇文章中介绍了sockes的一些东西,还不错。

    6.       LoadRunner之协议选择

    http://www.51testing.com/html/65/n-130565.html

    编者语:

    这篇我们我认为是这里面比较好的一篇,是邀请我的朋友冰岩写的一篇文章,从什么是TCP/IP协议以及网络分层,到LR录制脚本中如何选择协议,以及协议选择的一般策略等,写的相当不错,建议大家一定要看一看。

    编者总结:

    本文作为LR专题系列的其中的一个专题,编者在网络上收集了一些文章,但是感觉还是不充足就邀请自己的朋友冰岩写了一篇,这个专题阐述了在LR脚本开发过程中的一个小环节协议选择,相信大家通过这些文章对协议选择应该有一个合理的理解,可能还有不够全面的地方。

  • LR脚本的调试

    2009-08-18 11:16:16

    沉浮于LR很多天了,以前一直在WR分论坛漂。看到大家提出很多问题,不过发现大家的脚本大都已录制为主,而且经常有提出录制的脚本回放有问题,其实很多问题很好解决,LR提供了很多手段调试和优化我们的脚本。
    1.设置断点
    相信大家都不陌生,LR也是可以设置断点的,在需要设置断点的语句前按F9快
    捷键,断点就设置好了,程序运行到断点语句后会暂停,这时我们可以用F10单步
    调试程序.
    2.打开EXtended Log
    只是设置断点是不够的,我们还得知道具体发生了什么事情,Log告诉了我们一切,默认的Log是 standard Log,这时远远不够的.我们要extended log,打开路径
    为runtime settings-->log-->extended log.把parameter substitution和data returned by server和advanced trace大家根据需要勾选吧.
    3.注释掉多余的语句
    很多回放时出错的脚本都是因为多余的语句.因为LR在录制的时候,LR生成的语
    句很多不是我们想要的,这里结合几个网友的问题说说,曾有网友问:回放脚本的时
    候socket出错,提示: Error : socket0 - Address already in use. Error code
    : 10048.而且非常坚持说脚本不会有问题,因为脚本直接录制后回放,什么都没改,
    是不会出错的.拿到脚本一看,有一条语句lrs_create_socket,建立了socket0,但
    是之后没有任何socket0的语句,可以判断出 该语句是无效的,注释掉,问题解
    决。所以大家不要过分相信LR了 ,它生成的语句也是有很多BUG的。

    经常有朋友们问到,log文件在哪看,特别是controll执行后,怎么看log。这里一一说明一下:
    1)在vgen中,我们必须写输出函数输出信息,将我们所想要了解的信息用函数输出,主要有这么几个函数输出信息: lr_output_message,lr_error_message,lr_log_message。这些函数请参阅help-->function reference.
    其次,我们要在runtime settings中设置,勾选always send messages,具体的做法是:runtime settings--->log-->always send messages,这样我们才能写出Log,在我们的脚本所在的文件夹中,有两个文件很重要, mdrv.log.txtoutput.txt文件,lr_log_message只会把信息输到mdrv.log文件中,而lr_output_message则会写进以上两个文件。
    2)在controller中,很多朋友都会想知道多次迭代,参数是否正确的导入了呢,我们依旧查看log,我们在执行结束后,查看结果目录的Log文件夹,如果是负载生成器运行的话,则在tmp目录。 不过,还想提醒朋友们,在controller 我们也要设置runtime settings才行,而且每个用户组的runtime settings,设置的方法是:在controllerdesign标签页中,右下角的部分有runtime settings按钮,我们点击它,设置的方法与在vgen中一样的

  • 调试消息函数lr_debug_message和lr_set_debug_message

    2009-08-18 11:02:19

    可以使用 VuGen 的用户界面添加调试消息或错误消息。对于调试消息,可以指

    示文本消息的级别(只有当指定的级别与消息类匹配时才发出该消息)。使用

    lr_set_debug_message 可以设置消息类。

    要插入调试函数,请执行下列操作:

    1 依次选择“插入” > “新建步骤”。将打开“添加步骤”对话框。

    2 选择“调试消息”步骤,然后单击“确定”。将打开“调试消息”对话框。

    3 选择消息级别:“简要”或“扩展日志”。如果选择了“扩展日志”,请指示要

    记录的信息的类型:“参数替换”、“结果数据”或“完全跟踪”。

    4 在“消息文本”框中键入消息。

    5 单击“确定”插入消息并关闭对话框。lr_debug_message 函数将插入到脚本的

    当前点。

    lr_debug_message基本用法

    int lr_debug_message (unsigned int message_level, const char *format, ... );

    message_level

    One of the Mercury\LoadRunner\bin\vuser_utils_FuncRef.chm::/Message_Log_Run_Time_Settings.html">Message Log Run-Time Settings. Disabled does not apply.

    format

    A formatted string which is the message to be sent to the log file. You may use the standard Message Formatting that is available for printf.

    The lr_debug_message function sends a debug message when the specified message level is active. If the specified message level is not active, a message is not issued. You can set the active message level to MSG_CLASS_BRIEF_LOG or MSG_CLASS_EXTENDED_LOG from the user interface or by using lr_set_debug_message. To determine the current level, use lr_get_debug_message.

    Note that you can also specify multiple message levels with an OR separator ("|"). If any one of the levels are active (from the UI), the message is issued to the Output window. If none of the levels are active, the message is not issued.

    The message is sent to the output window. To display the debug messages in the LoadRunner output window or Application Management agent log file, use the Expert Mode Settings. Activate Expert Mode (Tools > Expert Mode) and then choose Tools > Options > Debug Information and select the General check box.

    例子:

    In the following example, lr_debug_message issues a message to the log when either the Parameters Substitution or Result Data classes are set.

    lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, LR_SWITCH_ON);

    . . .

    rc = lrd_fetch(Csr1, 1, 1, 0, PrintRow3);

    if (rc>2000)

    lr_debug_message(LR_MSG_CLASS_RESULT_DATA |         LR_MSG_CLASS_PARAMETERS, "Operation failed.");

  • 使用 VuGen 的调试功能

    2009-08-18 11:01:12

    VuGen 包含两个选项来帮助调试 Vuser 脚本:“分步运行”命令和断点。这些选

    项不适用于 VBscript. VB 应用程序类型的 Vuser

    要查看“调试”工具栏,请执行下列操作:

    右键单击工具栏区域,然后选择“调试”。“调试”工具栏将显示在工具栏区域

    中。

     “分步运行”命令

    “分步运行”命令在运行脚本时一次运行一行。通过该命令,可以依次查看脚本

    每一行的执行情况。

    要分步运行脚本,请执行下列操作:

    1 依次选择“Vuser> “分步运行”,或者单击“调试”工具栏上的“步骤”按

    钮。

    VuGen 将执行脚本的第一行。

    2 继续单击“步骤”按钮来执行该脚本,直到脚本运行完成为止。

    断点

    通过断点可以使脚本在特定位置暂停执行。它可用于在执行期间的预定点处检查

    该脚本对应用程序的影响。要管理书签,请参阅第 186 页上的“断点管理器”。

    要设置断点,请执行下列操作:

    1 将光标置于脚本中要停止执行的行上。

    2 依次选择“插入” > “切换断点”,或者单击“调试”工具栏上的“断点”按

    钮。也可以按键盘上的 F9 键。将在脚本的左边距显示“断点”符号 ( )

    3 要禁用断点,请将光标置于包含断点符号的行上,然后单击“调试”工具栏上的

    “启用 / 禁用断点”按钮。“断点”符号中将会显示一个白点 ( )。禁用一个断点

    后,执行将在下一个断点处暂停。再次单击该按钮可以启用断点。

    要删除断点,请将光标置于包含断点符号的行上,然后单击“断点”按钮或者按

    F9 键。

    要运行包含断点的脚本,请执行下列操作:

    1 照常运行脚本。

    到达断点时, VuGen 将暂停脚本的执行。可以检查脚本运行到断点时的效果,

    并进行必要的更改,然后从断点处重新启动脚本。

    2 要继续执行,请依次选择“Vuser> “运行”。

    重新启动后,脚本将继续执行,直到遇到下一个断点或脚本完成。

    断点管理器

    可以使用断点管理器来查看和管理断点。通过断点管理器您可以操纵脚本中的所

    有断点。

    要打开断点管理器,请选择“编辑” > “断点”。

    要跳至脚本中的断点处,请执行下列操作:

    1 从列表中选择一个断点。

    2 单击“在脚本中突出显示”。则将在脚本中突出显示该行。

    注意,每次只能突出显示一个断点。

    管理断点

    可以通过断点管理器添加、删除、禁用断点或者为断点设置条件

    要添加断点,请执行下列操作:

    1 单击“添加”。将打开“添加断点”对话框。

    2 选择“操作”,并指定要添加断点的行号。

    3 单击“确定”。该断点将被添加到断点列表中。

    要删除断点,请执行下列操作:

    1 要删除单个断点,请选择该断点并单击“删除”。

    2 要立即删除所有断点,请单击“全部删除”。

    要启用 / 禁用断点,请执行下列操作:

    1 要启用断点,请在“操作”列内选中操作的复选框。

    2 要禁用断点,请在“操作”列内清除操作的复选框。

    通过断点管理器您可以将断点设置为在某些条件下暂停执行。

    要为断点设置条件,请执行下列操作:

    1 要在特定的迭代次数后暂停运行脚本,请选择“当迭代次数为下值时暂停”并输

    入所需的数字。

    2 要在参数 X 具有特定值时暂停脚本,请选择“当参数 X 值为下值时暂停”并输

    入所需的值。有关参数的详细信息,请参阅第 8 章“使用 VuGen 参数”。

    书签

    当使用脚本视图时, VuGen 使您可以在脚本中各个不同的置放置书签。您可以

    在书签之间导航来分析和调试代码。

    要创建书签,请执行下列操作:

    1 将光标置于所需的位置,然后按 Ctrl + F2 组合键。VuGen 会在脚本的左边距放

    置一个图标。

    2 要删除书签,请单击要删除的标签,然后按 Ctrl + F2 组合键。VuGen 将删除左

    边距处的图标。

    3 要在书签之间移动,请执行下列操作:

    要移动到下一个书签,请按 F2 键。

    要导航到上一个书签,请按 Shift + F2 组合键

    您还可以通过“编辑” > “书签”菜单项来创建书签和在书签之间进行导航。

    注意: 只能在当前操作中的书签之间导航。要导航到另一操作中的书签,请在左

    窗格中选择该操作然后按 F2 键。

    “转至”命令

    要不使用书签在脚本中进行导航,可以使用“转至”命令。请依次选择“编辑”

    > “转至行”并指定脚本的行号。在树视图中也支持此种导航。

    如果要检查特定步骤或函数的“回放日志”消息,请在 VuGen 中选择该步骤,

    然后依次选择“编辑” > “转至回放日志中的步骤”。VuGen 将把光标放置在

    “输出”窗口的“回放日志”选项卡中的相应步骤处

  • LoadRunner专题系列

    2009-08-18 10:55:11

    内容简介

    在脚本录制完成后或者手工编写脚本后,我们需要对脚本进行调试运行,脚本调试的过程类似于程序的调试,可以设置断点,按步骤执行等等;脚本调试作为脚本开发的一个重要的过程,是非常重要的,只有通过调试的脚本才能加载到控制台运行;跟脚本调试相关的问题一般会有:

    1)  设置调试断点(快捷键F9)

    当设置断点的脚本,脚本运行到断点处,自动停止运行,我们可以通过查看运行日志,来观察脚本执行的情况;

    2)  单步执行脚本(快捷键F10)

    通过单步执行脚本,我们可以看到脚本中每一个函数执行的情况,一般情况下我们会结合断点一起使用。

    3)  调试日志

    在脚本运行过程中我可以查看系统的运行日志,进行脚本的调试,VUG的日志可以分为标准日志和扩展日志,标准日志只能获得标准的输出信息,扩展日志可以根据配置查看参数替换、服务器返回信息和高级跟踪信息。

    4)  调试日志函数和日志函数

    VUG提供了调试日志的函数lr_debug_message和lr_set_debug_message以及lr_output_message等日志函数,通过这些日志函数我们可以插入到脚本中进行调试。

           以下的内容中我们来看关于脚本调试的几篇文章,具体信息见如下内容:

    1.       使用 VuGen 的调试功能

    http://www.51testing.com/?uid-145985-action-viewspace-itemid-144068


    编者语:

     这篇文章,来自LR自带的中文帮助文档中的VUG用户手册,本文介绍了如何使用VUG中的调试功能,主要讲解了如何使用断点和单步执行的两个功能。

    2.       针对 Web Vuser 脚本使用 VuGen 的调试功能

     

    编者语:

           本文也是来自LR自带的中文帮助文档中的VUG用户手册,本文介绍了针对Web Vuser的脚本的调试方法,包括在运行过程中查看浏览器中的结果,和运行结束后如何查看运行的结果。通过查看浏览器中的内容我们可以查看LR回放日志中查看不到的与被测系统(AUT)相关的错误信息。

    3.       JAVA中的调试选项

     

    编者语:

           本文同样来自LR自带的中文帮助文档中的VUG用户手册,这篇文章主要讲解了JAVA Vuser脚本中相关的调试选项的设置,不想多说了,自己去看这篇文章吧。

    4.       调试消息函数lr_debug_message和lr_set_debug_message

    http://www.51testing.com/?uid-145985-action-viewspace-itemid-144069

    编者语:

           本文也是来自LR自带的中文帮助文档中的VUG用户手册,这篇文章主要介绍了调试相关的两个函数,包括两个函数的使用和两个函数的具体使用实例等等。

    5.       LR脚本的调试(转载)

    http://www.51testing.com/?uid-145985-action-viewspace-itemid-144070

    编者语:

           这篇文章来自网络,作者是:wss123,我在这位朋友的博客中看到这篇文章,貌似也是一篇转载,但是跟我的这个专题还是比较符合,我就摘录了,这篇文章主要说了如何在 VUG中调试脚本,如何打开扩展日志,如何设置断点、如何注释掉多余的语句;另外写到几个调试相关的函数,并且说明了在controller中如何对脚本进行调试的一些内容。

     

    6.       LR脚本的调试视频

     

    编者语:

           这个视频也是来自网络,一个叫做“虚拟小强”的作者上传的,听到内容后,知道,原来是老张的视频,呵呵,我还是下载了,那个网站太慢了,我家的1M带宽都下载了很长时间,我把它放到网站上供大家下载吧。大家可以看一下。

    编者总结:

    本文作为LR专题系列的其中的一个专题,编者通过查看LR自带的中文帮助文档中的VUG用户手册综合了这个文档中的关于“脚本调试”部分的信息总结给大家,另外通过网络查找到一篇,看到有些视频信息在这里也收集了,大家可以看一下。这个专题阐述了在LR脚本开发过程中的一个小环节脚本调试,相信大家通过这些文章对脚本调试应该有一个合理的理解,可能还有不够全面的地方。希望在今后的工作中可以再次、更多的对这个专题进行总结,另外网友如果有其他的一些看法,或者有好的建议可以发到我的信箱
                                                                编者:阳光

Open Toolbar