zoukankan      html  css  js  c++  java
  • web test LoadRunner web_reg_find / jianchadian / flag / placeflag

    Loadrunner检查点小结

    http://s.dianping.com/topic/3465076

    Loadrunner的检查点有三种:Web_find、Web_reg_find 和Web_image_check。至于为什么要用检查点可以用个小例子做个测试,例如一个登陆脚本登陆的账号为123456,密码为123456,可以 正确登陆,当把账号或密码改掉再执行,发现脚本并没有报错,也顺利执行下来了。原因是什么呢 ?Loadrunner以用户角色向服务器发送一个登陆请求,却不会判断请求的返回消息是什么,只要有返回,即使这是个拒绝登陆的返 回,Loadrunner也认为登陆成功了。所以在登录或者其他有重要页面跳转的地方,很有必要做检查点。
     
    在脚本里面加检查点,基本不影响性能,有的人说在做场景压力测试时要把检查点代码屏蔽,我觉得没什么必要。

    Web_find和Web_image_check两个函数如果在脚本里面增加,需要在设置中打开“图像和文本检查”功能, 该功能默认是不打开的,如果手工在脚本里面添加检查点,系统会有提示:

    Action.c(43): Verification checks not enabled. web_find is skipped. See the 'Run-time settings/Preferences/Checks'
    [MsgId: MMSG-27197]

    下面对这三个检查点简单做一下小结:

    1、Web_find
    Web_find只能在 html的录制模式下查找 html页面文字,查找速度慢,并且要在 html请求结束后才会去查找(即这个函数需要写在 html请求脚本后面),下面是在手册上对这个函数的限制描述:

     

     
    The web_find function searches an HTML page for a specified text string. web_find is deprecated. It has been replaced with web_reg_find.
    This function is limited to HTML-based recorded scripts (see Recording Options > Recording tab). It searches the context only after the HTML request is complete, resulting in slower execution time than web_reg_find.
    The web_find function has been superseded in C Language scripts by web_reg_find, which runs faster and can be used in both HTML-based and URL-based recording. web_find is supported in C for backward compatibility. In Java and Visual Basic, it has not been superseded.
    The web_find function is not supported for WAP scripts running in HTTP or Wireless Session Protocol (WSP) replay mode.

    例如Loadrunner自带的订票程序在登陆后有这么一段文字描述:

    Welcome, jojo, to the Mercury Tours reservation pages.
    Using the menu to the left, you can search for new flights to book, or review/edit the flights already booked. Don't forget to sign off when you're done!

    我们可以在对应页面的url脚本后面做如下的检查点:
     
    web_find("web_find","What=Don't forget to sign off when you're done!",LAST);

    运行脚本结果如下:

    Action.c(43): "web_find" successful. 1 occurrence(s) of "Don't forget to sign off when you're done!" found (RightOf="", LeftOf="")[MsgId: MMSG-27196]
     
    也可以这么增加:
     
    web_find("web_find","RightOf=Don't forget to s","LeftOf=gn off when you're done!","What=i",LAST);

     


    运行脚本结果如下:

    Action.c(46): "web_find" successful. 1 occurrence(s) of "i" found (RightOf="Don't forget to s", LeftOf="gn off when you're done!")[MsgId: MMSG-27196]

    这块有一点需要注意,RightOf和LeftOf并不是指右边和左边边界,而是指要查找的“i”在RightOf的右边,在LeftOf的左边。

    2、Web_reg_find

    Web_reg_find 是注册类型函数,它本身并不执行,不能通过它的返回值来作为事务的判断条件(因为 web_reg_find() 的返回值 0 和 1 表示 web_reg_find() 是否注册成功,并不代表查找的内容是否存在,也就是说无论查找的文本内容是否存在,都返回 0 。它是从返回的缓冲区扫描而不是在接收的页面中查找。这是比 web_find 更高效的一个函数。 web_reg_save_param 也是注册类函数,需要放到请求的页面之前,而且查找的内容是服务器返回的缓冲数据中查找,所以查找内容应该看 html 源代码的内容。
    下面同样做两个例子:

    例1:

     

    web_reg_find("Text=sign",LAST);

    运行脚本结果如下:

    Action.c(34): Registered web_reg_find successful for "Text=sign" (count=3)[MsgId: MMSG-26364]

    例2:
    利用 web_reg_find创建的参数 SaveCount ,作为判断条件
    Action()
    { 
      int HttpStatusCode; //这个放最上面
      
      //没有https,不用注释的函数
    	//web_set_sockets_option("SSL_VERSION","TLS");
    	//web_set_sockets_option("CLOSE_KEEPALIVE_CONNECTIONS", "1");
    
    	HttpStatusCode = web_get_int_property(HTTP_INFO_RETURN_CODE);
    	
    	lr_start_transaction("事务名称");
      
    	web_reg_find(
    		"Fail=NotFound",
    		"Search=All",
    		"SaveCount=para_count",
    		"Text=sign",
    		LAST);
    	
    	web_url("Home Button",
    	  "URL=http://127.0.0.1:1080/mercuryWebTours/welcome.pl?page=menus",
    	  "TargetFrame=body",
    	  "Resource=0",
    	  "RecContentType=text/html",
    	  "Referer=http://127.0.0.1:1080/mercuryWebTours/nav.pl?page=menu&in=itinerary",
    	  "Snapshot=t8.inf",
    	  "Mode=HTML",
    	  LAST);
    
    	if (atoi(lr_eval_string("{HttpStatusCode}")) > 0 && atoi(lr_eval_string("{para_count}"))>0){
    	  lr_end_transaction("事务名称", LR_PASS);
    	}else{
    	  lr_end_transaction("事务名称", LR_FAIL);
    	}
     	return 0;
    }
     
    在使用web_reg_find时有一点需要注意,如果抓取的是中文,不要用utf8格式,否则抓到的都是乱码,运行总是不会成功。/ 解决中文乱码如何抓取请看下面lr_convert_string_encoding 或http://bbs.51testing.com/thread-528130-1-1.html
    web_reg_find 不知道放哪,可以在创建脚本时点击tree按钮查看,查找关键词所在地位置,然后放入某web_url上面即可,ok
    乱码解决方案二:
    http://zhidao.baidu.com/question/400996257.html?loc_ans=981567177
    在loadrunner里设置了UTF-8之后,还要在run-time setting中做如下设置,设置Vuser—Run-time Settings-Browser-Browser Emulation-Change。如图:(以IE6为例)。然后,设置IE,查看-编码-钩上“自动选择”和Unicode(UTF-8)。 需要注意的是:在IE设置时,当选择Unicode(UTF-8)时,需要打开一个网页,设置才会生效,如果是空网页,则不生效。
     
    中文乱码检查点 解决方案三
    http://www.51testing.com/html/44/316844-845447.html
    在录制脚本时最好还是先看下网站的编码格式,然后设置相应的录制选项-支持字符集,确认是否启用UTF-8,以确保后续的中文检查点的正常运行。

    3、Web_image_check

    这个函数比较简单,写在对应的web_ur后面即可:

            web_url("Home Button",
                      "URL=http://127.0.0.1:1080/mercuryWebTours/welcome.pl?page=menus",
                      "TargetFrame=body",
                      "Resource=0",
                      "RecContentType=text/html",
                      "Referer=http://127.0.0.1:1080/mercuryWebTours/nav.pl?page=menu&in=itinerary",
                      "Snapshot=t8.inf",
                      "Mode=HTML",
                      LAST);
            web_image_check("web_image_check","src=/images/signoff.gif",LAST);

     


    执行结果如下:
    Action.c(42): "web_image_check" succeeded (1 occurrence(s) found. Alt="", Src="/images/signoff.gif")[MsgId: MMSG-27192]
    Action.c(42): web_image_check was successful[MsgId: MMSG-26392]

    这里说明一下对应的src可以在脚本执行后的日志里面找到,日志记录的是完整路径,src部分只要相对路径就可以了。
    ---------
    后面补充了张图片

     

     

     

     

     

    LoadRunner 设置检查点筛选出不是404页面的所有url

    文件:

    D:\TestCase\20120703_pre_prd_regfind\NewParam.dat

    内容:

    code
    您浏览的商品暂时无法显示

     

    文件:D:\TestCase\20120703_pre_prd_regfind\PrdUrl.dat

    内容:

    PrdUrl
    prd_10052_10051_-9_360224_.html
    prd_10052_0051_-7_362583_.html
    prd_10052_1001_-7_395182_.html
    prd_10052_10051_-7_414199_.html
    prd_10052_10051_-7_768624_.html
    prd_10052_10053_-7_203086_.html
    prd_10052_22001_-7_891931_.html
    prd_10052_10051_-8_1244601_.html
    prd_10052_10051_-20_1195773_.html
    prd_10052_10051_-7_767919_.html
    prd_10052_10051_-7_1528645_.html
    prd_10052_10051_-21_1149579_.html
    prd_10052_10051_-21_442736_.html
    prd_10052_0_-7_394662_.html
    prd_10052_10051_-7_771411_.html
    prd_10052_0_-7_122655_.html
    prd_10052_10051051_-7_1297622_.html
    prd_10052_10051_-23_175594000000000_.html

     

     

    文件:D:\TestCase\20120703_pre_prd_regfind\Action.c

    内容:

    #include "web_api.h"
    
    
    Action()
    {
    
    
         char tmp[100];
         long file;
         char * oid;
         char * i;
         file=fopen("D:\\wyg120709.txt","at+");
       
     lr_convert_string_encoding( lr_eval_string("{your_code}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"EncodedSearchTerm" );
       
     strcpy( tmp, lr_eval_string("{EncodedSearchTerm}") );
       
     lr_save_string( tmp, "sorvalue" );
    
    	web_reg_find("Fail=Found",
    		"Search=All",
    		"SaveCount=placeflag",
    		"Text={sorvalue}",
    		LAST);
    
    //     根据检查点控制结束事务e
    	lr_start_transaction("四级页面");
    	
    		web_url("{PrdUrl}",
    		"URL=http://b2cpre.***.com/emall/{PrdUrl}",
    		"Resource=0",
    		"RecContentType=text/html",
    		"Referer=",
    		"Snapshot=t1.inf",
    		"Mode=HTML",
    		EXTRARES,
    		LAST);
    
    	
         if((atoi(lr_eval_string("{placeflag}"))<1))
         {
         lr_end_transaction("四级页面",LR_PASS);
         i=lr_eval_string("{PrdUrl}\n");
         fputs(i,file);    
         }
         else
         lr_end_transaction("四级页面",LR_FAIL);
    
    	return 0;
    }
    
    

     

     

    loadrunner 错误筛选,参数化筛选,

    #include "web_api.h"
    Action()
    {
    long file;
    char * i;
    file=fopen("d:\\tongji.txt","at");
    
    	lr_start_transaction("四级页面-顾客最终购买");
    
    	web_reg_find("Fail=NotFound",
    				 "Search=All",
    				 "SaveCount=placeFlag",
    				 "Text=页面某固定返回值",
    				 LAST);
    	// 根据检查点控制结束事务
    
    	web_url("tuijianpre",
    		"URL=http://tuijianpre.cns****.com/recommend-portal/page/fourPage01.jsonp?sku={sku2}&sceneId=02",
    		"Resource=0",
    		"RecContentType=text/html",
    		"Referer=",
    		"Snapshot=t1.inf",
    		"Mode=HTML",
    		LAST);
    
    if((atoi(lr_eval_string("{placeFlag}"))<1))
    {
    lr_end_transaction("四级页面-顾客最终购买",LR_FAIL);
    }
    else
    {
    lr_end_transaction("四级页面-顾客最终购买",LR_PASS); 
    i=lr_eval_string("{sku2}\n");
    fputs(i,file);
    fclose(file);
    }
    	//lr_end_transaction("四级页面-顾客最终购买", LR_AUTO);
    
    //fclose(file)
    	return 0;
    
    }

     

    LoadRunner设置检查点的几种方法介绍

    发布时间: 2011-5-03 11:53 作者: 一米阳光做测试 来源: 51Testing软件测试网采编

    http://www.51testing.com/html/78/n-235278.html

    http://www.51testing.com/html/78/n-235278-2.html 

    前段时间在群里跟大家讨论一个关于性能测试的问题,谈到如何评估测试结果,有一个朋友谈到规范问题,让我颇有感触,他说他们公司每次执行压力测试的时候,都要求脚本中必须有检查点存在,不然测试结果将不被认可,这是他们公司的规范。其实,在做压力测试过程,我们很容易忽略很多东西,而且随着自身的技术演变,我们很容易去丢失掉一些很好的习惯,当我们再碰到这些问题的时候,我们才发现其实是我们太粗心大意了,所以说好的习惯要保持。这次我刚好也要接手一些性能工作,因此就如何规范设置检查点来谈谈一些基本的流程和方法。

      使用LoadRunner做压力测试,大致如下几个流程:

      1、明确测试目标

      2、录制测试脚本

      3、脚本优化、调试

      4、场景运行

      5、分析测试结果

      当然这里都是概况性的标题,但从这里我们可以明确的是测试脚本是整个压力测试过程中的重点步骤,如果测试脚本都不能确保正确与否,后面的测试过程就无从说起了。很多时候我们把脚本调试就简单的认为是脚本回放没有错误就认为脚本是没有问题的,这当然不能这么肯定,脚本调试是一个非常严谨的过程,我大致归纳如下几步:

      1、明确每一行脚本的作用,也就是说每一行脚本执行的功能是什么;

      2、删减不需要的脚本语句,比如在录制过程由于LR默认设置导致录制之后出现很多冗余的脚本,这些个脚本对我们的测试过程没有用途的应该删除掉,至于哪些是冗余就要具体分析了,所以说脚本录制完之后要分析脚本运行的过程,方能理解脚本执行的用途,不然在后面施压时运行错误,就会开始到处找问题,而又找不出问题;

      3、查找存在的关联并进行相关设置

      4、设置检查点,设置检查点的目的就是为了验证页面每次运行之后是否正确,设置检查点的过程总要通过不能的回放来进行验证检查点设置是否正确。

      5、通过测试目标明确脚本执行的目标事务,并添加事务;

      6、对需要进行并打操作的功能设置集合点

      7、根据实际情况设置ThinkTime

      8、在以上所有脚本调试步骤完成之后,设置迭代次数,通过在Vuser中设置多次迭代来验证脚本在多次循环运行时是否存在错误

      注意:在Vuser中运行和回放脚本的过程,要密切关注replay log,也就是回放日志,很多问题通常都暴露在回放日志中,只不过我们没有认真去检查,所以没发觉。因为大多数情况是我们在回放脚本之后只观察回放日志中有没有红色的错误提示信息,如果没有我们就认为我们的脚本是ok的,其实不然,很多时候一些隐藏的错误就在回放日志中可以被发现,比如回放日志中的Warning信息,也就是警告信息,这些信息一旦你不去理会它,它将在场景运行过程中开始频繁暴露出来,而在场景中报错之后我们就认为可能是系统有问题或者是测试过程存在其他问题等等,而很难去考虑到是脚本的问题,是脚本在Vuser中调试就存在的问题。还有的时候一些问题在一次脚本回放中就不能被发现,他需要通过Vuser中设置多次迭代才能在回放日志暴露出问题来,所以说我们通常的思维就是一旦测试脚本没有一次回放没有出现错误,就去场景中运行,结果在场景中哪怕是运行10个用户都还会报错,这就是问题的根源所在。

      下面还是重点说说检查点吧,三种常用的文本检查web_reg_find的方法:

      1、 将脚本切换到树结构,在page view页面上找到你要check的文本内容, 并执行鼠标右键,选择Add a text check.

      2、 通过Vuesr界面去设置检查点,如图所示:

    loadrunner_run-time_settings_ContentCheck.jpg 

      3、将脚本切换回代码界面, 在光标闪烁的上行,添加如下的代码:

      添加的代码根据你检查的方式不同而不同, 你可以选择其中之一即可。

      代码一:

      web_reg_find("Text=Payment Details",LAST);

      注:“Payment Details” 为你要检查的文本;

      脚本执行到此处,若在页面上找到了这几个字符串,那脚本继续执行下去;若没有找到,脚本将在此报错并且结束。

      代码二:

      web_reg_find("Text=Payment Details", "SaveCount=para_count", LAST); //check 的函数

      这里是要运行的页面脚本

      if (atoi(lr_eval_string("{para_count}"))>0)        //验证是否找到了页面上的要检查的字符串

      lr_output_message("Pass!");

      else

      lr_output_message("Failed!");

      注意:

      “Payment Details” 为你要检查的文本;

      脚本执行到此处,不管页面上是否存在你要检查的字符串,脚本都不会报错,而是执行下去。

      此段代码将找到的你要检查的字符串的个数,存为一个参数。 然后在页面代码的后面,通过检查这个参数的值是否大于0,来判断是否找到了你所要检查的字符串。

      注意:这里的测试结果均以200状态码返回,其失败的结果将在分析报告中进行分类标识。

      代码三:

      web_reg_find("Text=Payment Detdils", "Fail=NotFound",LAST);或者

      web_reg_find("Text=Payment Detdils", "Fail=Found",LAST);

      以上两段脚本就比较简洁,通过查询文本内容来决定此次运行的测试结果是否失败。

      注意:在使用检查点的时候我们还需要注意一些问题,通常我们都要设置一些中文检查点,但是LR默认不支持,如果你设置了中文检查点而报错,那你就应该注意了,在录制脚本的时候去掉默认设置的UTF-8选择,如下图所示:

    loadrunner_Tools_Recording_Options_UTF-8.jpg 

     

     

      并且还设置启用图片和文本检查点,如下图所示:

    loadrunner_run-time_settings_Preference_Checks.jpg

     

      以上就是设置检查点的全过程,设置检查点的目的不只是为了验证我们的脚本没有错误,而更重要的是一个规范问题,如何使得测试结果更具有说服力,那就所有的测试脚本中都添加检查点设置

      

     

    end

  • 相关阅读:
    BufferedImage学习记录一
    response总结一
    Externalizable接口
    request 总结一
    处理jsp显示文字过长问题
    验证码设计
    ORA01461: 仅能绑定要插入 LONG 列的 LONG 值
    MAP平台在单据中填写好部门后,关闭后重新打开,部门就没有了
    MAP平台设置节点选取范围
    MAP平台java.lang.StackOverflowError
  • 原文地址:https://www.cnblogs.com/lindows/p/14390258.html
Copyright © 2011-2022 走看看