此刻开始,这里成为了我的心情日记。技术性的话题会慢慢变少.......我想跳出技术圈........

发布新日志

  • LR脚本修改过程中遇到的问题

    2009-02-06 08:25:07

    1、录制和回放没有异常,回放也是完全成功。

    2、在登录时,加载了点代码,很简单,就是判断一下即:登录名参数化后,是否登录成功的。

    加载的代码大致如下:

    int status; //定义变量用于判断登陆是否成功

    ........

    web_submit_data("index.cfm",
      "Action=http://192.168.*.**/src/index.cfm?action=login",
      "Method=POST",
      "RecContentType=text/html",
      "Referer=http://192.168.*.**/index.htm",
      "Snapshot=t7.inf",
      "Mode=HTTP",
      ITEMDATA,
      "Name=login", "Value={loginname}", ENDITEM,
      "Name=passwd", "Value=123", ENDITEM,
      "Name=x", "Value=27", ENDITEM,
      "Name=y", "Value=17", ENDITEM,
      LAST);

    status = web_submit_data("index.cfm",
      "Action=http://192.168.*.**/src/index.cfm?action=login",
      "Method=POST",
      "RecContentType=text/html",
      "Referer=http://192.168.*.**/index.htm",
      "Snapshot=t7.inf",
      "Mode=HTTP",
      ITEMDATA,
      "Name=login", "Value={loginname}", ENDITEM,
      "Name=passwd", "Value=123", ENDITEM,
      "Name=x", "Value=27", ENDITEM,
      "Name=y", "Value=17", ENDITEM,
      LAST);


        if (status == LR_FAIL) //一旦登陆失败,脚本给出提示报错信息。
        {
            lr_error_message("错误信息: %s", "不能正常登陆!");
            return -1;
       }
    3、compile没有异常,运行。提示错误:

    Action.c(199): Error -26377: No match found for the requested parameter "CSRule_1_UID8". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size   [MsgId: MERR-26377]
    Action.c(199): Error -26377: No match found for the requested parameter "CSRule_1_UID7". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size   [MsgId: MERR-26377]
    Action.c(199): web_url("index.cfm_2") highest severity level was "ERROR", 3048 body bytes, 1422 header bytes   [MsgId: MMSG-26388]
    4、将2中加入的脚本注释掉再运行,没有错误产生。

    难道是那简单的脚本有问题?是什么问题呢?请大家不惜赐教,我自己实在是看不出问题所在了。。。

  • 又拾LR

    2009-01-14 08:49:11

           总是有很多的无奈与打断,LR也总是处于断断续续的状态。人的重心可能会随着体型的变化而变化着,工作也不另外,可能会因为种种的变化,而不断的调整自己的工作重心。。。。。。又可以和LR打交道了,一直对其的了解还很肤浅,希望高手们不忘点拨和指点。

        今天想解决的一个问题:Vengen中设置的迭代数量和controller中设置场景时指定的虚拟用户数的关系。以前有点想当然,但细问自己,还是有很多疑点。比如设定action1 迭代3次,设置的虚拟用户数为5,那么是不是就意味着——5个用户同时登录到系统,每个用户对action1迭代执行3次?如果参数化时指定的是每次迭代,按顺序取值,那么5个用户登录时获取的参数信息是?到底生成的总记录数应该是多少条?

       如果工作计划没有大的变化,那么希望能将此问题弄个水落石出。想当然的理解往往可能与事实是相悖的,除非验证与其一致!加油!

  • 转载:LR测试文件/表参数的数据分配和更新方法

    2007-10-23 12:14:39

    转载自:http://www.enet.com.cn/article/2007/0119/A20070119404673.shtml

    因为文章中没有具体的作者,故无法在此注明作者,向该文章的原创者说声抱歉!

    用LR作测试时,往往要设置参数,参数设置的不同直接影响到测试结果,所以是测试中至关重要的一环。曾经在论坛和其他网站上搜寻过类似的问题,想从中找出实际的操作过程,但很遗憾,找到的大都比较零散,或是看了也不明白如何作,实在没办法,才想到了手册,一看之下,才发现用手册上归纳的来作为初步的指导已经绰绰有余。以下是从LR自带的帮助文件里摘出的。

      警戒:以后碰到问题,边在网上搜索,边查手册,不必急着发问,因为你问的别人不一定遇到过,或者根本不理解你的意思,更惨的,放N天也无人问津。

      对于文件和表类型参数,所选的数据分配方法和更新方法会共同影响在场景或会话步骤运行期间 Vuser 用来替换参数的值。

      下表总结了根据所选的数据分配和更新属性的不同,Vuser 所使用的值:

      

    更新方法

    数据分配方法

    顺序

    随机

    唯一

    每次迭代

    对于每次迭代,Vuer会从数据表中提取下一个值

    对于每次迭代,Vuser会从数据表中提取新的随机值

    对于每次迭代,Vuser会从数据表中提取下一个唯一值

    每次出现(仅数据文件)

    参数每次出现,Vuser会从数据表中提取下一个值,即使在同一次迭代。

    参数每次出现,Vuser会从数据表中提取新的随机值,即使在同一次迭代。

    参数每次出现,Vuser会从数据表中提取下一个唯一值,即使在同一次迭代。

    一次

    对于每一个Vuser,第一次迭代中分配的值将用于所有的后续迭代中。

    对于每一个Vuser,第一次迭代中分配的随机值将用于所有的后续迭代中。

    对于每一个Vuser,第一次迭代中分配的唯一值将用于所有的后续迭代中。



      示例

      假设表/文件包括以下所示的值:

      Kim;David;Michael;Jane;Ron;Alice;Ken;Julie;Fred

      如果选择使用“顺序”方法分配数据,则:

      如果选择在“每次迭代”进行更新,则所有 Vuser 就会在第一次迭代使用 Kim,第二次迭代使用 David,第三次迭代使用 Michael,等等。

      如果选择在“每次出现”进行更新,则所有 Vuser 就会在第一次出现时使用 Kim,第二次出现使用 David,第三次出现使用 Michael,等等。

      如果选择更新“一次”,则所有 Vuser 就会在所有的迭代中使用 Kim。

      如果数据表中没有足够的值,则 VuGen 返回到表中的第一个值,循环继续直到测试结束。

      如果选择使用“随机”方法分配数据,则:

      如果选择在“每次迭代”进行更新,则 Vuser 在每次迭代时使用表中的随机值。

      如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用随机值。

      如果选择更新“一次”,则所有 Vuser 就会在所有的迭代中使用第一次随机分配的值。

      如果选择使用“唯一”方法分配数据,则:

      如果选择在“每次迭代”进行更新,则对于一个有 3 次迭代的测试运行,第一个 Vuser 将在第一次迭代时提取 Kim,第二次迭代提取 David,第三次迭代提取 Michael。第二个 Vuser 提取 Jane、Ron 和 Alice。第三个 Vuser 提取 Ken、Julie 和 Fred。

      如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用列表的唯一值。

      如果选择更新“一次” ,则第一个 Vuser 就会在所有迭代时都提取 Kim,第二个 Vuser 就会在所有迭代时提取 David,等等。

    ===========以下不属于转载文章的内容,来自51testing论坛 shanxi 对我帖子的回复=====================

    以下内容是shanxi对我 http://bbs.51testing.com/thread-93819-1-1.html 问题的回复 深表感谢

    分配给Vuser的第一个unique number=(虚拟用户Run id-1)*Block size per vuser+该Vuser的启动值.
    比如:两个虚拟用户,启动值为1,Block size per vuser为100,
    那么第一个虚拟用户能被分配的数值范围是1~100;第二个是101~200.
    在迭代1 和迭代2 相同的用户中比较数值差异,每步自增1

    另外数值格式(Number format),就是普通的格式控制
    比如%01d,表示个位数字有效.%2d表示两位


     

     

  • LoadRunner卸载带来的问题

    2007-10-11 09:19:35

    一直在使用LoadRuner8.1的英文版,后来偶然在网站上获得相应的中文包,不过这个中文包一直好好的被陈置在电脑里,没有去尝试用过。昨天心血来潮,也想看看中文版是不是更方便些,本来偶的英语也不是很好,既然有中文的了,何乐而不安装之呢?

    终于安装到最后一步,问题也接踵而至,提示你的license已经失效。晕,我还以为这只是一个外壳,不至于写进注册表,可惜我错了。真的是不能用了,真的是license失效了。。。怎么办?怎么办?重新执行破解方案?可毕竟安装程序还没有完全结束呢? 不能继续安装了,那就放弃安装,把整个LoadRunner卸载后重装重破解吧。

    在论坛上看到过关于LoadRnner卸载/完全卸载之类的主题,但一直没有进去细看过。简单的认为:卸载无疑就是通过控制面板-->删除应用程序、进入注册表把相应的软件删除、把本地相关的所有文件删除、清空回收站不就ok了。可发现事情没有这么简单。卸载干净以后重新安装,提示:===== 具体信息我忘记了(真是记性不好,不过我以后会补充上的)。然后上网搜索了一把,居然找到了对症下药的帖子。按照他的办法,把一台LR可用的机器上user和 mancine注册表下的LoadRuner导出,然后又导入到了我现在的机器上。。。完了。。。机器启动不了了,还原注册表还是无济于事。。。可能人家说的问题应该是两台操作系统至少相同的方可注册表的导入导出操作(文章没有说,我个人事后想的,因为我导出的系统是windows 2000,而出问题的机器是win XP).

    怎么办?安全模式也进不去了,光盘启动还可以但是只能备份一些东西。。。。还是找不到解决方案,怎么办?重装系统吧,好郁闷的了。

    如果没有破解过,直接用LoadRunner提供的temp license是没有问题的,卸装之后再安装没有问题。破解之后就遇到了上边的问题。如果有时间,我会再重操作一回,然后再总结!

     

  • 原创:使用Ip Spoofer出现的问题

    2007-10-10 12:02:27

    2007年10月10日

    问题描述: 制了一个LR自带的飞机票订票模型的脚本,启用了Ip Spoofer(虚拟Ip都已经成功添加了)和专家模式,运行出现错误,提示信息如下:

    vuser_init.c(12): Error -27792: Failed to transmit data to network: [10054] Connection reset by peer

    vuser_init.c(12): Error -27791: Server "10.1.1.9" has shut down the connection prematurely

    经多次试验得出以下结果:只要不启动IP Sooper功能,运行结果都为pass。

    问题思考:

    1.是不是没有理解好所谓的‘固定Ip’的概念?公司的IP地址是分配的,每个IP与机器的物理地址绑定,但如果用被没有绑定的IP地址(这样网段一样)也可以访问局域网的,只是上不了外网啊?----我会再验证,以取得‘铁证’---一点一点的消除疑点!

    ----其实这个固定IP只是针对运行Controller的机器,即IP地址是设定的而不是自动获取得到的就是了。所添加的Ip与是否绑定物理地址没有关系!

    2.添加虚拟IP后,该生成器的Ip也被改成了第一个虚拟IP地址,难道我的这个观点是错误的?---如果没有,那我也已经将录制脚本中的127.0.0.1改为了第一个虚拟IP地址,而且通过别的(同一局域网内的)机器也能访问修改后的网址----其实不是这样,相当于运行Controller的机子都可以用所有ipconfig/all所得的IP。可以这样去验证,在Controller机子上运行一个程序,虚拟IP设置成功以后,把URL中的127.0.0.1修改成任意一个虚拟IP,网址都能访问。所有被改成了第一个虚拟IP地址的观点我认为是错误的。

    3.如果第2个问题成立,那么原先机器的IP是不是就应该不在ipconfig/all列表里了?---可我现在是在ipconfig/all列表里。

     

    ================2007年10月11日  问题没有重现============

    昨天出现问题没有解决,今天又做了一遍,这次却没有出现任何错误!操作步骤和昨天相同,只是添加的虚拟IP少一些(只是添加了2个)!

    内网(Controller机器启动飞机票程序)外网(51testing)都试过了,除了vuser_init.c(28): Error -27796: Failed to connect to server "www.51testing.com:80": [10060] Connection timed out外没有别的错误提示,而这个提示只是说明部分连接超时,也说明51testing不能够支持这么多用户同时进行一个操作(我设置了18个虚拟用户(不同IP)执行站内搜索操作)

     

    还有一个问题:虚拟IP成功之后,需要再生成器中添加这些IP,才说明虚拟用户用该IP值登录了系统。

     

    如果出现以上错误的提示的朋友,可以看看LR官网给出的信息:

    1.Message Code 27791

    Server 'server name' has shut down the connection prematurely

    The server shut down the connection unexpectedly, possibly in the middle of a response.

    Troubleshooting

      • Ping the remote host to which you were connected. If it does not respond, it may be offline or there may be a network problem. Try again later.
      • Ping a local host to verify that your local network is still functioning.
      • Ping your local router address.
      • Ping a host on the same subnet as the remote host to which you were connected (if you know of one). This will verify that the destination network is functional.
      • Send a "traceroute" command to the remote host. This will not reveal the problem unless you know the router addresses at the remote end, but it may help you determine if the problem is somewhere along the network path.

    2.The standard Windows Sockets error codes are:

    WSAECONNRESET
    10054
    Connection reset by peer

     

  • 90 percent

    2007-10-09 14:59:45

       对90percent的理解,诸多同仁都发表过自己的见解。本来,我也是一直认为:90 percent就是90%事物的响应时间。但今天看了Zee在51testing上发表的帖子(该帖子附上了有关90 percent的官方网站所描述的),才知道90 percent的来由。

        根据官网所言,90 percent是90%的事物响应时间小于或等于90th percent 的值。这个90th percent 的值又如何得出来的呢?1.将事物实例的值按升序排序 2.去掉10%的极值 3。剩下值里的最大值就是90th percent的值。比如,某个事物包括10个实例值:1,3,5,12,6,22,8,9,30,10 按如下步骤找90th percent的值:1.升序排序 1.3.5.6.8.9.10.12.22.30 2.去掉10%的最大值即30 3.剩下值中的最大值就是90thpercent即22.所以这个 90 percent的值。

       然而问题又来了:这个90 percent在分析结果数据时有什么作用呢?我个人是这样理解的:1.如果这个值客户能接受,那就说明系统性能符合需求.不过我觉得这个值应该还有其他的意义,希望能尽快弄明白并补充完整

  • LoadRunner之繁星

    2007-10-08 14:25:24

    Set screen 90 Percent

     This measurement is not shown in the Controller screen during a run because it is calculated from a list of all values. If a run had 200 measurement points, this would be the value associated with the 180th data point (90 percent of 200).

    Set screen HTTP Responses Summary

      HTTP 200 ("OK") is considered successful.
      HTTP 302 highlights a redirection ("Moved Temporarily"), a normal event.
      HTTP 404 is a "resource not found" error.
      HTTP 500 is a "server busy" error
      HTTP 503 is an authentication denial.
    • LoadRunner之碎花

      2007-09-21 15:11:23

      1.什么是集合点

      向Vuser脚本中插入集合点是用来模拟服务器的重负载。集合点要求在测试执行过程中,让虚拟用户在某个点等待,然后一起提交执行任务。例如,模拟银行系统的峰值负载,就可以插入集合点,让100个虚拟用户同时向各自的帐户存现。

      集合点是一种特殊情况下的并发,多用于测试系统在瞬间加压的表现。

      设置集合点是为了确保“严格意义上”的并发,其实从本质上看,这主要是一个看问题的粒度大小的问题。集合点的作用是通过工具的控制,确保一个请求严格的“同时”从前台提交到后台。可是如果微观地看,是不存在严格意义上的并发的,即使在客户端通过设置集合点的方式将100个请求同时提交到后台,经过网络上的传输消耗,可能它们并不是同时到达的,而即便100个请求同时到达服务器端,受到中间件和应用系统、数据库的各种连接池、缓冲区, CPU处理队列等的限制,也可能在服务器端产生等待的。

      因此,严格意义上的“并发”可以说是不存在的,我们需要做的是在可以接受的粒度范围内取得一个最佳的平衡点,站在这个平衡点的层面上去看待“并发”这个问题。集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,目的是有针对性地对某个可能存在性能问题的模块施压,以便找到性能瓶颈。

      2.在Virtual User Generator中什么时候不能使用日志(log)?什么时候选择标准和扩展日志(standard and extend log)?

      当调试脚本时,可以只输出错误日志,当在场景找你管加载脚本时,日志自动变为不可用。

      Standard Log Option:选择标准日志时,就会在脚本执行过程中,生成函数的标准日志并且输出信息,供调试用。大型负载测试场景不用启用这个选项。

      扩展日志包括警告和其他信息。大型负载测试不要启用该选项。用扩展日志选项,可以指定哪些附加信息需要加到扩展日志中。

      3.如何调试LR脚本?

      VuGen有两个选项帮助调试Vuser脚本。Run Step by Step 命令和断点(breakpoints)。Option对话框中的调试设置(Debug setting)项,可以确定在场景执行过程中执行轨迹范围。 调试信息写在output窗口。可以用 lr_set_debug_messag函数在脚本中手工设置信息类型。如果我们只想接收到一小段脚本的调式信息。

      4.如何在LR中编写用户自定义函数?

      在创建用户自定义函数钱我们需要和创建DLL(external libary)。把库放在VuGen bin 目录下。一旦加了库,把自定义函数分配做一个参数。该函数应该具有一下格式:__declspec (dllexport) char* <function name>(char*, char*)。

      5.什么是Ranp up?如何设置?

      Ramp up这个选项用于逐渐增加服务器的虚拟用户数或负载量。设置一个初始值而且可以在两个迭代之间设置一个值等待。设置Ramp up,请到‘Scenario Scheduling Options’。

      6.用线程的方式运行虚拟用户有什么优点?

      VuGen提供了用多线程的便利。这使得在每个生成器上可以跑更多的虚拟用户。如果是以进程的方式跑虚拟用户,为每个用户加载相同的驱动程序到内存中,因此占用了大量的内存。这就限制了在单个生成器上能跑的虚拟用户数。如果按进程运行,给定的所有虚拟用户数(比如100)只是加载一个驱动程序实例到内存里。每个进程共用父驱动程序的内存,因此在每个生成器上可以跑更多的虚拟用户。

      7.如果出现错误停止脚本执行,该怎么做?

      lr_abort函数放弃虚拟用户脚本的执行。说明虚拟用户停止Action的执行,直接执行vuser_end 然后结束执行。在出现错误情况下想手工放弃脚本的执行,这个函数是有用的。用这个函数停止脚本时,Vuser被指定为“Stopped”状态。为了这个函数起作用,开始时候就不能选择Run-Time Settings中的Continue on error选项。

      8.响应时间和吞吐量之间的关系

      吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较时,可以发现随着吞吐量的降低,响应时间也降低,同样的,吞吐量的峰值和最大响应时间差不多在同时出现。

      9.与web服务器有关的问题如何发现?

      通过Web资源监视器,利用这些监控器可以分析web服务器的吞吐量、点击率、每秒http响应数以及每秒下载的页面数。

      10.What is the difference between Overlay graph and Correlate graph?

      Overlay Graph: It overlay the content of two graphs that shares a common x-axis. Left Y-axis on the merged graph show’s the current graph’s value & Right Y-axis show the value of Y-axis of the graph that was merged. 

      Correlate Graph: Plot the Y-axis of two graphs against each other. The active graph’s Y-axis becomes X-axis of merged graph. Y-axis of the graph that was merged becomes merged graph’s Y-axis.

      11.思考时间是什么

      思考时间是真实用户在action之间等待的时间。例如:当一个用户从服务器接收到数据时,用户可能需要在响应之前等待几分钟回顾数据,这种推迟被称为思考时间。

      12.说说以下函数的区别

      lr_debug_message - The lr_debug_message function sends a debug message to the output log when the specified message class is set.

      lr_output_message - The lr_output_message function sends notifications to the Controller Output window and the Vuser log file.

      lr_error_message - The lr_error_message function sends an error message to the LoadRunner Output window.

      lrd_stmt - The lrd_stmt function associates a character string (usually a SQL statement) with a cursor. This function sets a SQL statement to be processed. lrd_fetch - The lrd_fetch function fetches the next row from the result set.

      13.吞吐量—如果随着时间的推移和虚拟用户的增加,吞吐量曲线向上,说明带宽足够。如果随着虚拟用户的增加,吞吐量曲线相对平坦,这可能就是带宽限制数据传输量的一个原因。

       

    • LR之关联

      2007-09-20 11:17:32

      零零碎碎记录一下学习并使用过程中遇到的问题,以备忘!

      1.什么是关联?

      关联是为了获取每次运行脚本的唯一数据值和通过嵌套查询生成的数据。关联提供了避免产生重复数据错误的数值以及优化代码(以避免嵌套查询)。关联是正常回放含有动态数据如Session IDsDatabase Primary Keys 和差不多所有的HTTP安全机制脚本的根本。关联的目的就是吧脚本中某些hard-coded数据转变成从服务器传过来的动态的,每次执行都不一样的数据。

      2.参数(化)和关联的区别

      参数(化)相当于代码编写中的变量。是某个变量向服务器输入不同的值,用来模拟真实的用户。运行脚本时,不同的数据集被发送给服务器。只能对某个具体的变量值进行参数化。参数化的对象在回放过程中即时没有被参数化也不会报错,只是像服务器输入了相同的值。但是关联的对象在回放过程中如果没有做关联,回放过程中就会报错。关联是对系统的动态数据(每次运行脚本都会变化的值,是从服务器传过来的)进行。简单的说,每一次执行时都会变动的值,就有可能需要做关联。

      3.动态关联和手工关联的区别

      动态关联是我们为关联设置规则,可以是具体的应用程序服务,这里的数据由所创建的规则替代。在手工关联中,我们想要关联的数值被扫描并且编写关联函数完成关联。VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并可以利用关联函数自动建立关联。

      手动关联需要自行查找关联的对象,然后自行插入关联函数。

      4.如何发现哪里需要关联?

      两种方式:首先回放扫描不同的值然后看哪些值需要关联。其次,我们可以录制2个脚本然后作比较。我们可以查看不同的文件决定需要关联的数据。在我实践的某个项目中,为每个用户提供一个唯一的ID,一个不确定的数字,是自动生成的,有序且值唯一。我需要关联这个ID值以防止在运行脚本是出现错误。我用的是扫描的方式关联。

      5.在哪里设置自动关联选项?

      网页自动关联可以在recording options -->correlation tab栏设置。这里可以为全部脚本设置关联并选择是在线问题信息还是离线actions,我们也可为这些关联定义规则。数据库的自动关联可以用输出窗口、关联扫描、找关联查询项并选择要关联的查询值。如果知道需要关联的具体值,只需要为这些值创建关联并指定这些值是如何创建的。

      6. 在网页录制脚本中,什么函数能捕获动态数据?

      Web_reg_save_param函数可以将动态数据信息保存到一个参数中。

      Web_reg_save_param函数语法:

      int web_reg_save_param (const char *mpszParamName, <List of Attributes>, LAST);

      以下表格列出了可获取到的属性. 注意属性值字符串没有大小写区分(例如:Search=all

      NotFound

      边界找不到或空字符串生成时的处理方法。默认值为“Error”,说明当边界值找不到时,VuGen可以作为一个错误提出。当设置为“EMPTY,没有错误信息提出脚本继续执行。注意:如果脚本设置了Continue on Error项,则当边界值没有找到时,脚本也会继续执行,但会早Extend log文件中输出一个错误信息

      LB

      参数或动态数据的左边界。该参数必须是非空字符串。区分大小写。如果想忽略大小写,则用LB/IC。如果要指定二进制数据用LB/BIN

      RB

      参数或动态数据的右边界。该参数必须是非空字符串。区分大小写。如果不想区分大小写,则用RB/IC。如果要指定二进制数据用RB/BIN

      RelFrameID

      相对于请求的URLHTML页面的层次(hierarchy level)。可以是All或者是一个数字

      Search

      查询的范围—去哪里查看分割数据。可选值有:Headers (search only the headers), Body (search only Body data, not headers), or ALL (search Body and headers)。默认值是ALL

      ORD

      可选参数。指定匹配项的顺序或出现数(the ordinal or occurrence number of the match)。默认值为1,如果指定是“ALL”,则将参数值保存在一个数值里。

      SaveOffset

      The offset of a sub-string of the found value, to save to the parameter. The default is 0. The offset value must be non-negative.

      Savelen

      The length of a sub-string of the found value, from the specified offset, to save to the parameter. The default is -1, indicating until the end of the string.

      Convert

      The conversion method to apply to the data:

      HTML_TO_URL: convert HTML-encoded data to a URL-encoded data format

      HTML_TO_TEXT: convert HTML-encoded data to plain text format

      7.HTML页面中的动态数据可能存在于:

      *        每次获取相关网页都变化的URL

      *        form提交过程中录制的字段(有时是隐藏的)

      *        JavaScritpt cookies

      1种情况:

      录制时,假设点击 “buy me now!”文字的超链接,VuGen录制的URL是:http://host//cgi-bin/purchase.cgi?date=170397&ID=1234因为date "170397" ID "1234"是在录制过程中自动生成的,每一次新的浏览会话重新生成新的dateID。当运行脚本时,“Buy me now!”链接的URL不再是录制时的URL而是一个新的了。因此,Web服务器不能重新获得URL

      2种情况

      考虑一种情形:提交一个用户填写了他的姓名和帐号IDform。当这个form提交时,一个唯一的序列号和该用户的数据同时也一起提交给了服务器。这个序列号是HTML代码中一个隐藏字段的值,被VuGen录制到了脚本中。因为这个序列号在每次浏览会话中都会变,所以Vuser不能成功回放录制的脚本。

      8.如果右界不一致,指定一个右边界是不够的,需要指定可选右边界。因为它不一致---例如有时是”@”有时是“&”。这种情况下,指定&为可选择的右边界。

       

    • 为WebVuser脚本设置关联规则

      2007-09-19 11:43:56

      VuGen's correlation feature allows you to link Vuser functions by using the results of one statement as input for another.

      下面简单汇总一下在录制脚本过程中如何做关联:

       

    Open Toolbar