发布新日志

  • LoadRunner学习知多少--Tomcat监控工具probe

    2014-04-18 17:43:38

    1.下载: http://www.lambdaprobe.org

    2.解压缩后,把probe.war放到TOMCAT的webapps下,设置tomcat-users.xml

    3.设置用户如下,在tomcat_user.xml中 
    vi /usr/local/tomcat/conf/tomcat-users.xml

    <?xml version='1.0' encoding='utf-8'?> 
    <tomcat-users> 
            <role rolename="manager"/> 
            <user username="tomcat" password="tomcat" roles="manager"/> 
    </tomcat-users>

    4.设置环境变量,获取服务器状态 
    # vi /etc/profile 
    JAVA_OPTS=-Dcom.sun.management.jmxremote 
    export JAVA_OPTS

    5.重启服务器 
    6.输入http://localhost/probe/,输入用户名和密码 
    7.即可进入,这里比较精彩的是对内存的监视,动态显示了JVM的内存图表

  • LoadRunner学习知多少--实现LoadRunner多个场景的顺序执行

    2014-04-18 17:42:59

    应用场景
    假设有3个不同的测试场景,分别为并发登录、核心业务、可靠性测试,3个场景有先后执行顺序。由于白天测试机器另有用处,只能在晚上进行性能测试,这时我们的期望是能否把测试场景都设定好之后晚上自动运行,第二天我们回来看测试结果呢?
    答案是肯定的,可以有两种方式实现。

    第一种,相对简单
    充分利用LR Controller里面Group的功能。

    新建一个场景把3个脚本都添加进来,在Edit Schedule中选择“Schedule by Group”的方式,在StartTime中设置3个脚本的运行顺序为“Start when Group xxx finished”,并在“Scenario Start Time”中设定场景在晚上的运行启动时间。设定完定时执行场景后,点击StartScenario按钮,会出现一个倒计时窗口,这样在固定的某个时间上,测试场景中的3个脚本将乖乖的按照设定的先后顺序进行测试。注意,如果没有点击StartScenario按钮激活测试,是不会真正进行测试的。

    第二种,比较灵活
    我们把应用场景稍微扩展一下,假设其中1、3场景只有一个测试脚本,而核心业务场景由数据录入、数据查询、数据上报3个脚本组成,同样的,3个场景仍需按顺序进行测试。这时如果采用第一种方式,由于第2个场景有3个脚本,所以第三个脚本的启动时间就是一个问题了。由于Controller中每个脚本都对应一个Group,而且GroupName不能重复,这时第三个场景的StartTime中“Start when group finished”则只能是选择第二个场景中的某个Group,而并非是第二个场景的3个脚本都完成之后再进行,无法达到我们的初衷。

    这时,可以通过命令行的方式来进行。
    首先创建并设置好3个测试场景,再创建一个一个批处理程序按先后顺序调用这3个场景进行测试,最后通过Windows的定时任务设定批处理的执行时间。
    批处理示例如下:
    cls
    SET M_ROOT="D:\Program Files\MI\Mercury LoadRunner\bin\"
    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_1.lrs" -Run
    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_2.lrs" -Run
    %M_ROOT%\wlrun.exe -TestPath "D:\Program Files\MI\Mercury LoadRunner\scenario\Test\TestScen_3.lrs" -Run
    这种方式比较灵活,但需要注意在Result Settings中设置“Automatically create a results directory for each scenario execution”,以免后面的测试结果覆盖了前面的。


    另外补充一下,如果想对某个脚本进行50、100、150...等用户数递增的测试,也可以用以上方法实现,但需要注意的是将事务名称区分开以便进行分析。

  • C语言的输出%d,%u,%s代表了什么

    2014-04-18 17:42:20

    %d 十进制整数 %c 字符 %s 字符串 %f, %g, %e 十进制浮点数 %p 指针 %o 八进制 %x 十六进制 %u 无符号整数
  • Loadrunner学习知多少--脚本录制下载操作

    2014-04-18 17:39:21

    在很多时候我们可能需要对系统进行这样的脚本开发,模拟用户点击一个下载链接,然后弹出下载框,选择保存,用来测试在大量用户下载时服务器的性能。但是现在大家对于这种脚本的处理方式往往是通过关联和C 语言的文件读写的方式来处理的,因为LR 不会录制到下载的这个请求,我们不但要手工写一个请求的模拟,还要用过关联来处理,非常的不便。

    这里我介绍一种简便的处理方法:

    LR 在录制脚本时默认只会录制基于HTML 和XML 个格式的请求,并且生成WEB_URL  函数,所以不会录制出来关于下载这样的请求,怎么让 LR 能识别呢?我们先来分析一下下载请求的数据格式。

    这里使用HTTPWATCH 对DISCUZ 论坛的下载进行分析

     

    当我们点击了 1.rar 文件的时候,会对系统产生一个 attachment.aspx?attachmentid=39  的请求,而这个请求的TYPE  为application/octet-stream,如果我们能告诉LR  以后对这种数据格式都进行录制,那么岂不是这个请求就可以被录制到了?

    打开VUGEN  的录制选项,找到高级中的Non-Resources

    在这里我们可以给Vugen  设置录制的过滤规则,我们为其添加针对application/octet-stream这类格式的录制规范

    确定后,我们再次录制脚本,就可以发现录制出来的脚本会包含一个新的web_url 请求

        web_url("attachment.aspx",

            "URL=http://172.168.1.200/attachment.aspx?attachmentid=39",

            "TargetFrame=",

            "Resource=0",

            "RecContentType=application/octet-stream",

            "Referer=http://172.168.1.200/showtopic-60315.aspx",

            "Snapshot=t56.inf",

            "Mode=HTML",

            LAST);

    这是以前没法录制到的,通过回放测试,我们可以在返回数据包的格式大小中确认该请求是将附件的文件完全下载到本地的,你可以在脚本的回放目录中找到.unk 后缀名的文件,该文件就是下载附件请求所得到的附件文件,我们无需编写任何复杂的关联和c 语言脚本即可完成对文件下载操作的模拟了。

    当使用show browse during replay 选项时,运行到下载操作,也会弹出真实的下载确认框,通过该框可以找到下载后的文件地址。尽量不要选择它,不然在运行时,也会弹出下载的对话框。

     

    此外,想要找到这个文件保存在哪的话,按照这个方式:下载的录制方法,录制完毕之后,查看test results中查看到有一个

    这样的图标,注意下他的名称是:T8.UNK.那么去脚本保存后所在的文件的result1\Iteration1中找到T8.UNK,用压缩包方式打开就可以了

     

     

    备注:云层老师的这个《Loadrunner脚本录制下载操作的另外一种简便做法.pdf》

  • 解决Windows 7 (或Vista)远程桌面连接XP或2003缓慢的问题

    2012-08-14 10:35:17

    在使用Windows 7之后发现一个问题,远程桌面连接XP或2003 Server时,在某些网络情况下存在连接后刷新缓慢的问题。

    笔者使用的是Windows 7 64bit Ultimate中文版,目标机器为Windows Server 2003,使用远程桌面连接后画面几乎不刷新,有时十几秒半分钟才有一次刷新。但是如果使用键盘操作,刷新率明显提高,因此在很长的时间内笔者每操作一步都按一次Alt,这个方法让我获得比流畅的刷新率,但是因为Alt或其它键在很多程序中会带来副作用,比如Alt回激活菜单选择等,也非常不方便 。

    今天闲下来了,决心把它解决了,百度了很多贴子后,都没有找到原因。最后试了试google,找到一篇文章提到了Receive Window Auto-Tuning引起的远程桌面问题和我所遇到的问题一致,于是细读了遍,尝试其解决方法之后问题得以解决,这里记录下来方便以后参考,也希望能对遇到此问题的童鞋有所帮助。

    1. 以管理员方式启动一个命令行窗口(Win+R 输入cmd按Ctrl+Shift+Enter)

    2. 在命令行窗口中输入:netsh interface tcp set global autotuninglevel=disabled

    后面那条命令可以改为下面的,据说速度更快:

    netsh interface tcp set global autotuninglevel=highlyrestricted

    问题原因: Receive Window Auto-Tuning是Vista 和Win 7引入的QoS(服务质量控制)的一部分,主要内容是动态调节TCP接收窗口(可以理解为缓冲区)大小,这个东西对QoS来说有很多好处(参考原文解释),但它对发送端预设(假设目标TCP接收窗口)比较小的应用就会大大增加数据报告时间(我的理解,感兴趣可以参考原文),这样>6.0的远程桌面就会被延迟很厉害。

    而上面的命令的作用就是关闭或限制自动调节TCP接收窗口大小的功能,使之更接近低版(<=5.1?)RDP服务器的假设,特别是highlyrestricted这个选项,并不是关闭该功能,而是限制功能,保守地使用这个功能,因此是比较折衷的方案,它保留了Receive Window Auto-Tuning带来的好处,同时解决了(甚至提高了)远程桌面的速度。

    原文接连:http://blog.tmcnet.com/blog/tom-keating/microsoft/remote-desktop-slow-problem-solved.asp

  • Loadrunner中设置迭代和不设置迭代?

    2011-12-01 17:36:53

    总的时间 包括 开始时间 持续时间 和结束时间  3部分 你所说的5分钟只是持续时间 是一部分

    LR 的Vugen和controller中迭代是这样的:
    当场景的持续时间为“运行至结束”时,以Vugen中设置的迭代次数为准
    当场景的持续时间为“具体的几分钟时间”时,忽略Vugen中的迭代次数,脚步的action重复迭代,直到时间结束为止,按退出策略,执行退出操作
  • 为什么lr分析结果中的事物中没有vuser_int事物和vuser_end事物了呢

    2011-11-29 15:49:55

    打开run-time settings,点击General->Miscellaneous,把define each action as a transaction前面的复选框沟上,然后再运行场景,这样在结果分析里头,就有vuser_int和user_end
  • Loadrunner 参数设置

    2011-11-29 15:09:08

    首先我们先看一下再Loadrunner参数管理器中的2个设定项select next row和update value on,很多朋友在刚开始接触参数化时会对这2个设定项产生混淆,我们可以从2个特定的维度和覆盖角度进行理解:


    Select next row 是针对于所有vu的取值方式进行限定的,此指标是针对于全局的

    Update value on是针对每一个用户每一次循环过程中如何更新值进行限定的


    根据上面的定义,我们来逐个对这2个设定项内的选项进行说明

    Select next row

      Sequential:所用用户分配相同参数,以顺序方式进行分配

      Random:所有用户分配随机参数,以随机方式进行分配

      Unique:所有的用户分配不同参数,以顺序方式进行分配

    Update next row

    Each iteration:当前循环内值不变

    Each occurrence:当前循环内只要触发就进行值的更新

    Once:执行过程中不更新(即在脚本执行前进行取值,然后在执行过程中均取该值

    然后我们就可以根据这样的句式来理解参数分配的方式:当脚本开始时,为< --select next row -- >,在< -update next row -- >。通过这样的方式对在执行过程中参数分配方式可以有更直观的理解;


    下面我对以上的选项做一个排列组合,供大家参考

     
     Sequential
     Random
     Unique
     
    Each iteration
     所有vu均取参数列表的第一行,在循环结束后取第二行
     所有vu随机选取参数列表内参数,在循环结束后取第二个随机数
     所有vu按顺序取不同值,在循环结束后取下一个未被使用的值
     
    Each occurrence
     所有vu均取参数列表的第一行,在当第二次出现时取第二行值,即使在同一迭代内
     所有vu随机选取参数列表内参数,在当第二次出现时取第二个随机数,即使在同一迭代内
     所有vu按顺序取不同值,在第二次出现时取下一个未被使用的值,即使在同一迭代内
     
    Once
     所有用户取参数列表的第一行,在脚本执行过程中均为该值
     所有用户随机选取参数列表内唯一参数,在脚本执行过程中均为该值
     所有vu按顺序取不同值,在脚本执行过程中均为该值
     


    在参数设置的过程中,可能会遇到参数列表内数据量小于(VU*循环数)的情况,若可能出现该情况的组合中,参数管理器中会出现when out of value选项,来配置参数用尽后的操作方式,我们可以选择退出vu,从新轮循以及使用最后一个值,根据测试需求设定即可


    对于Allocate Vuser values in the Controller选项一般情况下默认选择 Automatically allocate block size即可,若选择手动设定则block size的数量需于脚本循环数对应。


    以上对Loadrunner参数化设置进行了说明,现在我们再来看一些在实际使用过程中比较实用的参数设置方式


    Iteration Number:返回当前循环次数

    UserID:返回当前VU 的ID值

    Group Name:返回次脚本在当前场景内Group名称

    Load Generator Name:返回脚本执行的测试机名称


    在脚本参数化的过程中,以参数的应用对脚本执行回馈有着很大的帮助,在脚本执行完毕后如果需要查询和统计每个VU的参数取值以及执行情况,则这些参数化的使用将使你受益良多。


    其次由于以上参数类型具有一定的唯一性,可以通过适当的组合来获得一组有规则可循的唯一值,在后期性能分析过程中的数据分析阶段事半功倍。


    例如我们可以用UserID+Iteration Number来确定一个唯一值作为脚本内某些数据的参数使用,则省去了繁琐的数据准备及设置工作并且容易查找;同理,在多脚本或多测试机执行的场景中可以加入Group Name以及Load Generator Name来区分。


     

  • 调试Loadrunner压力脚本实例

    2011-11-29 10:28:40

    测试对象:基于B/S结构的应用程序,管理员创建用户

    操作步骤如下:

    1:录制脚本:用户登录,创建用户,用户退出登录

    2.回放脚本

    期望值不成功,因为不能创建同名的用户

    3.修改脚本  参数化:显示名,邮箱地址和用户名,分别添加三个参数,p1,p2,p3,设置参数的属性P1.每次遇到就顺序更新值,P2和P3的取值是Same line as p1。

    4.参数文件中有3个不同的用户

    5:回放脚本,期望会创建三个不同的用户,回放成功

     

     

  • ZT:LoadRunner脚本的参数设置-block篇

    2011-11-29 09:34:54

    一、问题引入:当我们在Run中添加一个Block0,并在Block0中添加需要的Action,同时给Block0设置运行逻辑,比如按顺序运行10次(Run Logic为Sequential,Iterations为10)。如果Block0中的Action含有参数,那么该参数应该如何设置?

       其实参数设置最主要的有三个:Select next row、Update value on和When out of values。其中Update value on的值可选的是Each iteration、Each occurrence和Once。而它们的意思分别如下:

    (1)Each iteration是指每次迭代时更新值,但这个迭代其实只针对Run-time Settings中,选项Run Logic的Run的Iterations,对Run中的Block是不起作用的。也就是说,当Run迭代了10次,同时Run中的Block0也迭代10次的时候,每Run一次,会更新一个参数值,而Block0迭代10次时都使用这个参数值,不会再去更新参数值了。也可以这样理解,每一个Block其实相当于我们自己在脚本里面写一个for循环,去循环调用Block中的Action,此时Each iteration当然只对Run有效。

    (2)Each occurrence是指每次参数出现时就更新值。

    (3)Once是指只取值一次。

    显然,在这种情况下,Update value on只能选择Each occurrence。另外当我们选择了unique和Each occurrence后,LR要求我们设置Allocate …values for each Vuser,这个值与虚拟用户数和参数化值有关,例如:设置Allocate 5 values for each Vuser,虚拟用户数是10个,那么参数化的值至少需要50个(前提是选择了unique选项)
    二、Each occurrence带来的问题:

    1. 问题引入:

    当我们在进行某个参数设置时,有时Update value on不得不选择Each occurrence(类似一中所述情况),但是,如果Action中有多个相同的参数时,此时参数会在每次出现就更新值,这不是我们所期望的,应为每次执行Action时,同一个参数的值应该都是一样的,否则实际业务操作将运行失败。

    2. 解决方案:

    其实解决方法很简单,所有相同的参数以不同名字命名(如,P1,P2,P3…),每个参数指向同一个Dat文件,对参数P1进行相应的设置,接下来其他参数的Select next row选择Same line as P1,这样所有的参数的值的更新机制和P1一样,每次行Action时,同一个参数的值就都是一样了。

    三、Dat文件记录读取原理:

    Controller在运行时,会首先初始化Vuser脚本,以检查脚本是否有语法错误,以及为各个虚拟用户分配参数值。而分配参数值的时候,本人猜测它是根据需要读取的参数数量循序或者随机读取Dat的记录(一行为一个记录),当记录个数不足时,就会抛出错误提示。因此我们在选择文件源是,就要多加小心,以防止Controller自己“错乱方寸”:

    1.不同参数(对应相同的列)对应的Dat文件要不同,若想指向同一文件,则参数设置“Select next row”应选择“Same line as…”

    2.不同Vuser脚本不要使用同一个Dat文件。

     

    实例:

     

  • lr一个参数如何添加100个以上的值

    2011-11-24 18:12:04

    C:\Program Files\HP\LoadRunner\config中有个vugen.ini文件,在此文件中有个“[ParamTable]
    MaxVisibleLines=100”你可以改下

  • Loadrunner 结果分析--

    2011-11-17 16:58:30

    1.Hits per second(每秒点击数)反映了客户端和线秒钟向服务器提交的请求数量,如果客户端发出的请求数量越多,与之对应的Average Throughput(byte/second)也应该越大,并且发出的请求越多会对平均事务响应时间造成影响,所以在测试过程中往往将三张图结合起来分析,如果Hits per second和Average Throughput(byte/second)两种图形曲线都正常并且基本一致,说明服务器能及时接受客户端的请求,并能够返回结果,如果Hits per second正常,Average Throughput(byte/second)不正常,表示服务器能够接受客户端的请求,但返回结果较慢,可能是的程序处理缓慢,如果Hits per second不正常,说明客户端存在问题,那种问题一般就是网络引起的,或者录制的脚本有问题,未能正确的模拟用户的和地为,具体问题具体分析。
  • 平均事务响应显示一个点的原因

    2011-11-17 16:40:00

    问:loadrunner9.0 在进行性能测试时,插入了集合点,在结果分析中平均事物响应时间怎么显示的是一个点?

     

    答:

    减小取点时间
    默认是5秒取一个点
    可能是你的事务太快了
    设置成1秒取一个点试试
    对场景中的图标右键,选configure,在弹出界面中设置

     

     

  • Loadrunner--参数设置

    2011-07-20 14:30:29

     
    “Select next row ”有以下几种选择:多个VU如何取值
       Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取
       Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
    15
       Unique :每个VU取唯一的值。注意:使用该类型必须注意数据表有足够多的数。比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。
       Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。通常用在有关联性的数据上面。这个也是很有用的,比如有时候我们要求指定VU取读取指定数据,就可以这样定义:
    创建参数文件,共两列,假设userID,DOCID,userid设定取数方式是unique,DOCID则设成the same line as userid,如果第一行数据为0001,DOC1,则如果用户0001登录成功,在打开文档时,便会打开DOC1文档。
    “Update value on”有如下几种选择:多次迭代如何取值
      once在所有的反复中都使用同一个值,
      each iteration则每次反复都要取新值,
      each occurrence则只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值。
  • Loadrunner--IP Spoofer(IP欺骗)

    2011-07-20 11:06:49

    为什么需要IP地址欺骗:
    当运行场景时,虚拟用户使用它们所在的Load Generator 的固定IP地址,每个Load Generator 上同时运行大量的虚拟用户,这样就造成大量的用户使用同一个IP访问同一个网站的情况,这种情况跟我们实际运行情况不符,并且有一些网站是限制同一个IP登陆,为了更加真实的模拟实际情况,Loadrunner允许运行的虚拟用户使用不同的IP访问同一个网站,这种技术就叫IP期骗。
     
    IP Wizard工具就是使供了生成多个IP的功能,IPWizard是一个单独的程序,我们可以在开始菜单中找到,你可以添加一个局域网内的IP段,添加后重启,在Win2K使用IPconfig/all查看到很多虚拟IP。最后要在Controller里面选择Enable IP Spoofer
     
  • Loadrunner error

    2010-12-25 15:11:29

      一、Step download timeout (120 seconds)
    这是一个经常会遇到的问题,解决得办法走以下步骤:
    1、修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000。run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数。
    2、办法一不能解决的情况下,解决办法如下:
    设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对windows系统起作用,此法来自zee的资料。  
      

    2:http500的错误

  • Loadrunner1

    2010-12-24 15:30:03

    问题1:Monitor name :Windows Resources. Cannot connect to machine 192.168.1.4.
    Reason: 拒绝访问。

    解决方法:LoadRunner 添加 Windows监听器需要进行的相关设置(下面都是对被监视服务器的操作):

          1、共享C盘;(一般情况下,C 盘是共享状态,无需处理)

          2、保证如下服务开启:
             a、Remote Procedure Call (RPC)
             b、Remote Procedure Call (RPC) Locator
             c、Remote Registry
             d、Workstation

          3、本地安全设置-->安装设置-->本地策略-->安全选项,“网络访问:本地账户的共享和安全模式”项选择“经典 - 本地用户以自己的身份验证”

     

  • Address already in use: JVM_Bind<null>:80 解决方案

    2010-12-14 11:12:55

    咱还是闲话少说,直接切入正题。
    起因:
    一直用Tomcat,但是前几天突然报错:
              java.net.BindException: Address already in use: JVM_Bind:80
    第一反应就是80端口被占用了。更改IIS端口,不工作! 停掉IIS,不工作! 停掉IIS Admin还是不工作!
    见了鬼了,去网上搜一把,都说是IIS或者迅雷的问题。也有说是IE的问题(也不能说他错,不过真TMD能扯淡)。我机器上没有迅雷,于是决定自己动手了...

    解决方案:
    1.先用命令 netstat -ano 看一下各个端口占用和进程PID(80端口是被3296占用) 。
    2.然后在任务管理器里,查看进程。(注意:默认情况下,进程的PID是不显示的,你在菜单的查看->选择列里可以选上PID来显示)

    3、后面大家当然知道该怎么做了。当然是大刀阔斧的,把这个进程关闭掉,然后一切正常!!

  • SQL server2005

    2010-10-13 09:52:16

    今天用诺德尔的2003系统,下了三个SQL2000都无法安装,总是提示序列号无法验证。解决方法如下:

    打开注册表编辑器并定为到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

    找到名为“SafeDLLSearchMode”的DWORD值,切换修改他的值 0 或 1,如果没有则创建这个DWORD值。

    我上面没有,直接建了一个,值就是默认的0,如果还不行就随便找个2003 SP1的序列号试下,再不行的话你就拿刀来砍我。是不是安装成功了。嘿嘿~~~~

  • CHM文件打开时无法显示网页

    2010-09-30 17:34:19

    选择该文件,右击》属性》解决锁定
401/212>
Open Toolbar