ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩亚洲一区二区,亚洲一区二区日韩,亚洲欧洲精品在线http://www.aygfsteel.com/joan/category/33813.html¿Uã¯å¼ ã§ QQ:774199038 zh-cnSat, 08 May 2010 18:23:33 GMTSat, 08 May 2010 18:23:33 GMT60LR 中调用QTP 脚本http://www.aygfsteel.com/joan/articles/320046.htmljoanjoanTue, 04 May 2010 06:48:00 GMThttp://www.aygfsteel.com/joan/articles/320046.htmlhttp://www.aygfsteel.com/joan/comments/320046.htmlhttp://www.aygfsteel.com/joan/articles/320046.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/320046.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/320046.html    
Mercury Interactive’s icon-based tool for testing complex
Web environments (Java applets, Flash, etc.). LoadRunner can
run Vuser scripts created using QuickTest Professional. Note
that this product must be purchased separately.

     

在LR中运è¡?a style="color: #333333; line-height: normal! important; text-decoration: underline" target="_self">QTP脚本的注意事™å?/p>

1、QTPçš„Tools--Options--Runçš?Alow other Mercury products to run tests and components"选项要打勾;
2、在QTP脚本中设¾|®äº‹åŠ¡ï¼ŒServices.StartTransaction "start"与Services.EndTransaction "start"
把需要在LR˜qè¡Œçš„脚本放在此事务里面åQ?br style="line-height: normal! important" /> 3、在LR中运行时选择QTP脚本åQŒæ–‡ä»¶æ‰©å±•名ä¸?usr的;
4、在LR中运行QTP脚本æ—Óž¼Œè¦æŠŠQTP关闭åQ?br style="line-height: normal! important" /> 5、只能在LRçš„Controller中运行;不能在Virtual User Generator中打开å?qi¨¢ng)回放ï¼?br style="line-height: normal! important" /> 6、LR要ä‹É用globalçš„licenseåQŒå•单WEBçš„license不行åQŒä¼š(x¨¬)报错åQ?br style="line-height: normal! important" /> 7、Controller˜qè¡Œä¸­ï¼Œåªèƒ½æ‰§è¡Œ1个虚拟用æˆ?/span>åQŒå¤§äº?个以上的虚拟用户ä¼?x¨¬)提½Cºé”™è¯¯ï¼›òq¶å‘ä¼?x¨¬)报é?#8230;…
å¦‚æžœéœ€è¦è¿è¡Œå¤šä¸ªç”¨æˆøP¼Œåªèƒ½åœ¨QTP脚本里设¾|®åó@环及(qi¨¢ng)参数化来解决åQ?/p>

-----------------------------------------------------------------------------------------------------------------------------------------------------------
       ä¸ÞZ»€ä¹ˆç”¨LoadRunnerå?a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self">功能‹¹‹è¯•自动化?

  1、lr是模拟浏览器¾l™æœåŠ¡å™¨ç›´æŽ¥å‘é€è¯·æ±‚ï¼Œè€?a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self">QTP是模拟鼠标键盘的操作ã€?/p>

  故:(x¨¬)LR脚本可以做验证流½E‹çš„功能自动化,但是验证的大多是后台数据处理‹¹ç¨‹çš„æ­£¼‹®æ€§ï¼ŒQTP可以验证‹¹ç¨‹ä¹Ÿå¯ä»¥éªŒè¯UIã€?/p>

  2、LR录制脚本是类C语言åQŒQTP是vbscriptã€?/p>

  故:(x¨¬)你若对cäº?ji¨£n)如指掌自然也可用lr加入复杂的检查点完成功能自动化,QTPç”׃ºŽä½¿ç”¨vbscript是windows嫡系子孙åQŒè°ƒç”¨ä¸€äº›wshell dom½{‰å¯ä»¥å¾ˆå¥½çš„æ“ä½œUIã€?/p>

  3、最后一条:(x¨¬)LR脚本比QTP脚本å®ÒŽ(gu¨©)˜“¾l´æŠ¤ã€?/p>

  4、qtp是基于对象库的,而LR是基于协议的åQŒå‰è€…是属于黑盒‹¹‹è¯•范畴åQŒå‰å°è¿›è¡Œå¤„理,而后者是åŸÞZºŽåè®®åQŒæ˜¯åŽå°˜q›è¡Œå¤„理的。如果非得用LR也未ž®ä¸å¯ï¼Œåªæ˜¯èˆè¿‘求远åQŒæ¯•竟QTP是专业的自动化工兗÷€‚另外做功能‹¹‹è¯•不可能不å…Ïx³¨UI界面ã€?/p>

  5、QTP的检查点¾cÕdž‹æ¯”较多,如下åQ?/p>

QuickTest Professional提供äº?ji¨£n)下列类型的‹‚€(g¨¨)查点åQ?/p>

‹‚€(g¨¨)查点¾cÕdž‹

描述

用法½CÞZ¾‹

标准‹‚€(g¨¨)查点 ‹‚€(g¨¨)查对象的属性å€?/td> ‹‚€(g¨¨)查是否选中某单选按é’?/td>
囑փ‹‚€(g¨¨)查点 ‹‚€(g¨¨)查图像的属性å€?/td> ‹‚€(g¨¨)查图像源文äšg是否正确
表检查点 ‹‚€(g¨¨)查表中的信息 ‹‚€(g¨¨)查表单元æ ég¸­çš„值是否正¼‹?/td>
™åµé¢‹‚€(g¨¨)查点 ‹‚€(g¨¨)查网™å늚„ç‰ÒŽ(gu¨©)€?/td> ‹‚€(g¨¨)查加载网™å‰|‰€éœ€çš„æ—¶é—ß_(d¨¢)¼Œæˆ–者检查网™å‰|˜¯å¦åŒ…含中断链æŽ?/td>
文本/ 文本区域‹‚€(g¨¨)查点 ‹‚€(g¨¨)查文本字½W¦ä¸²æ˜¯å¦æ˜„¡¤ºåœ¨ç½‘™å‰|ˆ–应用½E‹åº½H—口中的适当位置 ‹‚€(g¨¨)查预期的文本字符串是否显½Cºåœ¨¾|‘页或对话框上的预期位置
位图‹‚€(g¨¨)查点 ž®†ç½‘™å‰|ˆ–应用½E‹åºçš„æŸä¸ªåŒºåŸŸæ•èŽ·äØ“(f¨´)位图后对其进行检æŸ?/td> ‹‚€(g¨¨)查网™å‰|ˆ–¾|‘页的ä“Q何部分是否能按预期显½C?/td>
数据åº?/strong>‹‚€(g¨¨)查点 ‹‚€(g¨¨)查应用程序或¾|‘站所讉K—®çš„æ•°æ®åº“内容 ‹‚€(g¨¨)查数据库查询中的值是否正¼‹?/td>
可访问性检查点 对网站区域进行识别,以检查是否符å?08部分 ‹‚€(g¨¨)查网™åµä¸Šçš„图像是否包含ALT属性(该属性是W3C Web内容可访问性规则所要求的)(j¨ª)
XML‹‚€(g¨¨)查点 ‹‚€(g¨¨)查XML文档的数据内å®?/td> 注意åQšXMLæ–‡äšg‹‚€(g¨¨)查点用于‹‚€(g¨¨)查特定的XMLæ–‡äšgåQ›XML应用½E‹åº‹‚€(g¨¨)查点用于‹‚€(g¨¨)查网™åµä¸­çš„XML文档

 

 LR中运行QTP脚本

  1、运行准备:(x¨¬)

  1åQ‰å‹¾é€‰QTPçš„Tools--Options--Runçš?Alow other Mercury products to run tests and components"

  2åQ‰å½•刉™œ€è¦åœ¨lr中运行的QTP脚本åQŒåƈ且在QTP脚本中设¾|®äº‹åŠ¡ï¼ŒServices.StartTransaction "start"与Services.EndTransaction "start"

  2、运行QTP脚本

  在LR中运行时选择QTP脚本åQŒäØ“(f¨´)QTP脚本存放目录下文件扩展名ä¸?usr的文件ã€?/span>

  注:(x¨¬)LR中运行QTP脚本æ—Óž¼Œåªèƒ½æœ‰ä¸€ä¸ªVuser,否则ž®†æŠ¥é”™ï¼š(x¨¬)

  The load generator is currently running the maximum number of Vusers of this type

  3、可能报错:(x¨¬)

  1åQ‰å¦‚æžœLR˜qè¡Œæ—¶æŠ¥"LR没有相关的license"错,可以在LR里增加一ä¸?000个的global licenseåQŒæ³¨å†Œå·ç äØ“(f¨´)åQšAEACFSJI-YASEKJJKEAHJD-BCLBR

  2åQ‰è¿è¡Œæµ‹è¯•æ—¶åQŒéœ€è¦å…ˆž®†QTP关闭åQ?/span>

  3åQ‰LR执行大于1个以上的虚拟用户时会(x¨¬)提示åQšThe load generator is currently running the maximum number of Vusers of this typeåQ?/span>

  所以,QTP脚本在LR中运行一台计½Ž—机只能˜qè¡Œä¸€ä¸ªGUI VuseråQŒå¦‚果要同时˜qè¡Œå¤šä¸ªç”¨æˆ·åQŒå¯ä»¥QTP脚本里设¾|®åó@环,循环可通过QTPçš„datatable讄¡½®éœ€è¦è¿è¡Œçš„用户åQŒæˆ–是在QTP里通过FORåQŒNEXT语句来设¾|®æ¬¡æ•°ã€‚或是在controller里同时开启多个相同的脚本åQŒç„¶åŽåˆ†æ•£åœ¨ä¸åŒçš„电(sh¨´)脑上˜qè¡ŒåQŒæ³¨æ„ï¼š(x¨¬)各终端一定要开启LRçš„LR Agent Processå?qi¨¢ng)QTPçš„TOOS-Remote Agent代理服务ã€?/span>

  æ³?åQšè®¾è®¡ä¾›LR˜qè¡Œçš„æµ‹è¯•用例应遵守以下规则åQ?/span>

  LR不能˜qè¡ŒåµŒå¥—操åó@环;

  请勿包括对外部操作或其他外部资源åQˆå¦‚外部数据表文ä»Óž¼ŒçŽ¯å¢ƒå˜é‡æ–‡äšgåQŒå…±äº«å¯¹è±¡åº“½{‰ï¼‰(j¨ª)的引用ã€?/span>

  æ³?åQšè®¾è®¡ä¾›ä¸šåŠ¡‹¹ç¨‹ç›‘视器ä‹É用的‹¹‹è¯•æ—Óž¼Œåº”遵守以下规则:(x¨¬)

  对应的StartTransaction和EndTransaction语句必然包含在同一个操作内�/span>

  业务‹¹ç¨‹ç›‘视器不使用QTPçš„setting-run中的循环讄¡½®åQŒè€Œæ˜¯ä½¿ç”¨æ•°æ®è¡¨ä¸­æ–‡äšg中的行数ã€?/span>

  æ³?åQšåœ¨LRçš„controll中,Run-time Settings中只有常规类别与子类别有效,回放选项不è“vä»ÖM½•作用ã€?/span>

  如以下脚本:(x¨¬)
Services.StartTransaction "start"
For i=1 To DataTable.GetSheet(dtLocalSheet).GetRowCount 
Window("Tencent Traveler").WinEdit("Edit").SetSelection 0,19
Window("Tencent Traveler").WinEdit("Edit").Set " Window("Tencent Traveler").WinEdit("Edit").Type micReturn
Window("Window").Page("产品介绍-建站�).Link("模板仓库").Click
Window("Window").Page("模板仓库-建站�).Link("在线帮助").Click
Window("Window").Page("在线帮助-建站�).Link("关于我们").Click
datatable.GetSheet("Action1").setnextrow
 Next
 Services.EndTransaction "start"

 

 



joan 2010-05-04 14:48 发表评论
]]>
LR 常见问题åQˆæ”¶è—ï¼‰(j¨ª)http://www.aygfsteel.com/joan/articles/297914.htmljoanjoanMon, 12 Oct 2009 08:50:00 GMThttp://www.aygfsteel.com/joan/articles/297914.htmlhttp://www.aygfsteel.com/joan/comments/297914.htmlhttp://www.aygfsteel.com/joan/articles/297914.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/297914.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/297914.html1.LoadRunnerå½•åˆ¶è„šæœ¬æ—¶äØ“(f¨´)什么不弹出IE‹¹è§ˆå™?

  当一åîC¸»æœÞZ¸Šå®‰è£…多个‹¹è§ˆå™¨æ—¶åQŒLoadRunner录制脚本¾lå¸¸é‡åˆ°ä¸èƒ½æ‰“å¼€‹¹è§ˆå™¨çš„æƒ…况åQŒå¯ä»¥ç”¨ä¸‹é¢çš„æ–¹æ³•来解决ã€?/p>

  启动‹¹è§ˆå™¨ï¼Œæ‰“å¼€Internet选项对话框,切换到高¾U§æ ‡½{¾ï¼ŒåŽÀLމ“启用½W¬ä¸‰æ–ÒŽ(gu¨©)µè§ˆå™¨æ‰©å±•(需要重启动)”的勾选,然后再次˜qè¡ŒVuGen卛_¯è§£å†³é—®é¢˜

  提示åQšé€šå¸¸å®‰è£…Firefox½{‰æµè§ˆå™¨åŽï¼Œéƒ½ä¼š(x¨¬)å‹ùN€‰ä¸Šé¢å¾—选项åQŒå¯¼è‡´ä¸èƒ½æ­£å¸¸å½•制。因此徏议运行LoadRunner得主æœÞZ¸Šä¿æŒä¸€ä¸ªå¹²å‡€çš„æµ‹è¯•环境ã€?/p>

  2.录制Web脚本æ—Óž¼Œç”Ÿæˆçš„脚本中存在ä¹Þq è¯¥å¦‚何解å†?

  录制脚本前,打开录制选项配置对话框Record-OptionsåQŒè¿›å…¥åˆ°Advanced标签åQŒå…ˆå‹ùN€?#8220;Support charset”åQŒç„¶åŽé€‰æ‹©ä¸­æ”¯æŒUTF-8。再‹Æ¡å½•åˆÓž¼Œž®×ƒ¸ä¼?x¨¬)出çŽîC¸­æ–‡äؕ码问题了(ji¨£n)ã€?/p>

  3.HTML-based script与URL-based script的脚本有什么区�

  使用“HTML-based script”的模式录制脚本,VuGen为用æˆïL(f¨¥ng)š„æ¯ä¸ªHTML操作生成单独的步骤,˜q™ç§è„šæœ¬çœ‹ä¸ŠåŽÀL¯”较直è§?使用“URL-based script”模式录制脚本æ—Óž¼ŒVuGen可以捕获所有作为用æˆäh“ä½œç»“果而发送到服务å™?/a>çš„HTTPè¯äh±‚åQŒç„¶åŽäØ“(f¨´)用户的每个请求分别生成对应方法ã€?/p>

  通常åQŒåŸºäºŽæµè§ˆå™¨çš„Web应用ä¼?x¨¬)ä‹Éç?#8220;HTML-based script”模式来录制脚æœ?而没有基于浏览器的Web应用、Web应用中包含了(ji¨£n)ä¸?a title="服务å™? target="_blank">服务å™?/a>˜q›è¡Œäº¤äº’çš„Java Applet、基于浏览器的应用中包含äº?ji¨£n)向服务器进è?a title="通信" target="_blank">通信的JavaScript/VBScript代码、基于浏览器的应用中使用äº?ji¨£n)HTTPS安全协议åQŒè¿™æ—¶ä‹Éç”?#8220;URL-based script”模式˜q›è¡Œå½•制ã€?/p>

  4.ä¸ÞZ»€ä¹ˆè„šæœ¬ä¸­æ·ÕdŠ äº?ji¨£n)检查方法Web-findåQŒä½†æ˜¯è„šæœ¬å›žæ”¾æ—¶å´æ²¡æœ‰æ‰§è¡?

  ç”׃ºŽ‹‚€(g¨¨)查点功能ä¼?x¨¬)耗费一定的资源åQŒå› æ­¤LoadRunner默认关闭äº?ji¨£n)对文本及(qi¨¢ng)图像的‹‚€(g¨¨)查。要惛_¼€å¯æ£€æŸ¥åŠŸèƒ½ï¼Œå¿…é¡»ä¿®æ”¹˜qè¡Œæ—¶çš„配置Run-time Settingã€?/p>

  ˜q›å…¥“Run-time Setting”对话框,依次˜q›å…¥“Internet Protocol→Preferences”åQŒå‹¾é€‰Checks下的“Enable Image and text check”选项卛_¯ã€?/p>

  ‹‚€(g¨¨)查执行结果时推荐使用web_reg_findæ–ÒŽ(gu¨©)³•ã€?/p>

  5.˜qè¡Œæ—¶çš„Pacing讄¡½®ä¸»è¦å½±å“ä»€ä¹?

  Pacing主要用来讄¡½®é‡å¤˜q­ä»£è„šæœ¬çš„é—´éš”æ—¶é—´ã€‚å…±æœ‰ä¸‰¿Uæ–¹æ³•:(x¨¬)上次˜q­ä»£¾l“束后立åˆÕd¼€å§‹ã€ä¸Š‹Æ¡è„P代结束后½{‰å¾…固定旉™—´ã€æŒ‰å›ºå®šæˆ–随机的旉™—´é—´éš”开始执行新的è„P代ã€?/p>

  æ ÒŽ(gu¨©)®å®žé™…需要设¾|®è„P代即可。通常åQŒæ²¡æœ‰æ—¶é—´é—´éš”会(x¨¬)产生更大的压力ã€?/p>

  6.˜qè¡Œæ—¶è®¾¾|®Log标签中,如果没有å‹ùN€?#8220;Enable logging”åQŒåˆ™æ‰‹å·¥æ¶ˆæ¯å¯ä»¥å‘送吗?

  Enable logging选项仅媄(ji¨£ng)响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果ä‹É用lr_message、lr_output_message、lr_error_message,仍然ä¼?x¨¬)记录其发出的消息ã€?/p>

   7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“ErroråQšserver returned an incorrectly formatted SOAP response”。这时说明原因引èµïL(f¨¥ng)š„?

  造成˜q™ç§æƒ…况的主要原因是LoadRunner 8.0çš„VuGen在录制Web Serviceåè®®çš„è„šæœ¬æ—¶å­˜åœ¨ä¸€ä¸ªç¼ºé™øP¼š(x¨¬)如果服务器的操作¾pȝ»Ÿæ˜¯ä¸­æ–‡çš„åQŒVuGenä¼?x¨¬)自动将WSDLæ–‡äšgçš„å¤´æ”¹äØ“(f¨´)åQŒå› æ­¤ä¼š(x¨¬)有上面的错误提示ã€?/p>

  解决æ–ÒŽ(gu¨©)³•åQšæŠŠ“LR80WebservicesFPI_setup.exe”å’?#8220;lrunner_web_sevices_path_1.exe”两个补丁打上卛_¯è§£å†³ã€?/p>

  8.VuGen支持Netscape的客戯‚¯ä¹¦å—?

   不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客æˆïL(f¨¥ng)«¯è¯ä¹¦ã€‚录制脚本时可以先从Netscape中导出所需的证书,然后ž®†å…¶å¯¼å…¥åˆ°Internet Explorer中,òq¶ç¡®ä¿ä»¥ç›¸åŒçš„顺序导出和导入˜q™äº›è¯ä¹¦ã€‚而且åQŒåœ¨æ¯å°ž®†è¦å½•制或运行需要证书的Web Vuser脚本的计½Ž—机上都要重复执行前面的˜q‡ç¨‹ã€?/p>

  9.VuGenä¼?x¨¬)修改录制浏览器中的代理服务器设¾|®å—?

  ä¼?x¨¬)修攏V€?在开始录制基于浏览器的Web Vuser脚本æ—Óž¼ŒVuGen首先ä¼?x¨¬)启动指定的‹¹è§ˆå™¨ã€‚然后,VuGenä¼?x¨¬)指½Cºæµè§ˆå™¨è®‰K—®VuGenä»£ç†æœåŠ¡å™¨ã€‚äØ“(f¨´)此,VuGenä¼?x¨¬)修改录制浏览器上的ä?理服务器讄¡½®ã€‚默认情况下åQŒVuGenä¼?x¨¬)立卛_°†ä»£ç†æœåŠ¡å™¨è®¾¾|®æ›´æ”¹äØ“(f¨´)Localhost:7777。录制之后,VuGenä¼?x¨¬)将原始代理服务器设¾|®è¿˜åŽŸåˆ°è¯?录制‹¹è§ˆå™¨ä¸­ã€‚因此,在VuGen˜q›è¡Œå½•制的过½E‹ä¸­åQŒä¸å¯ä»¥æ›´æ”¹ä»£ç†æœåŠ¡å™¨è®¾¾|®ï¼Œå¦åˆ™ž®†æ— æ³•正常进行ã€?/p>

  10.在LoadRunner脚本如何输出当前¾pȝ»Ÿæ—‰™—´?

  LoadRunner提供äº?ji¨£n)char *ctime(const time_t *time)函数åQŒè°ƒç”¨å‚æ•îCØ“(f¨´)一个Long型的整数指针åQŒç”¨äºŽå­˜æ”¾è¿”å›žæ—¶é—´çš„æ•°å€ÆD¡¨½Cºã€?/p>

  调用语句与返回值如下示例:(x¨¬)

  typedef long time_t;

  Action()

  {

  time_t t;

  lr_message(“Time in seconds since 1/1/70: %ld\n”,time(&t));

  lr_message(“System time and date: %s”,ctime(&t));

  }

  输出¾l“果为:(x¨¬)

  Time in seconds since 1/1/70: 1185329968

  System time and date:Wed Jul 25 10:19:28 2007

  11.一些Web虚拟用户脚本录制后立åˆÕd›žæ”¾æ²¡æœ‰ä“Q何问题,但是当设¾|®è„P代次数大äº?æ—Óž¼Œå¦‚æžœ˜q›è¡Œå›žæ”¾åˆ™åªèƒ½æˆåŠŸè„P代一‹Æ¡ã€‚䨓(f¨´)什么从½W¬äºŒ‹Æ¡è„P代开始发生错è¯?

   ˜q™ç§çŽ°è±¡å¤šæ˜¯ç”׃ºŽåœ?#8220;Run-time Setting”çš?#8220;Browse Emulation”的设¾|®ä¸­åQŒå‹¾é€‰äº†(ji¨£n)“Simulate a new user on each iteration”å?qi¨¢ng)其下面的选项“Clear cache on each iteration”˜q™ä¸¤ä¸ªé€‰é¡¹çš„含义是每次˜q­ä»£æ—¶æ¨¡æ‹Ÿä¸€ä¸ªæ–°çš„用户及(qi¨¢ng)每次˜q­ä»£æ—¶æ¸…除缓存。由于脚本è„P代时åQŒinitå’Œend只能执行一‹Æ¡ï¼Œå¦‚果每次˜q­ä»£ éƒ½æ¨¡æ‹Ÿä¸€ä¸ªæ–°çš„ç”¨æˆ·åÆˆæ¸…é™¤¾~“å­˜åQŒåˆ™ç”¨æˆ·ç™Õd½•信息ž®†ä¸€òq¶æ¸…除,因此˜q­ä»£æ—¶å¯èƒ½ä¼š(x¨¬)发生错误ã€?/p>

  12.虚拟客户脚本“Run-time Setting”中的¾U¿ç¨‹å’Œè¿›½E‹è¿è¡Œæ–¹å¼çš„区别?

   如果选择“Run Vuser as a process”åQŒåˆ™åœºæ™¯˜qè¡Œæ—¶ä¼š(x¨¬)为每一个虚拟用户创å»ÞZ¸€ä¸ªè¿›½E?选择“Run Vuser as a thread”åˆ™å°†æ¯ä¸ªè™šæ‹Ÿç”¨æˆ·ä½œäØ“(f¨´)一个线½E‹æ¥˜qè¡ŒåQŒåœ¨ä»ÕdŠ¡½Ž¡ç†å™¨ä¸­åªçœ‹åˆîC¸€ä¸ªmmdrv.exeåQŒè¿™¿Uæ–¹å¼çš„˜qè¡Œæ•ˆçŽ‡æ›´é«˜åQŒèƒ½é€ æˆæ›´å¤§çš„压力,旉™»˜è®¤é€?™åV€?/p>

  另外åQŒå¦‚果启用了(ji¨£n)IP‹Æºéª—功能åQŒåˆ™å…ˆåœ¨Controller中选中Tools菜单下的“Expert Mode”åQŒç„¶åŽå°†Tools菜单下的“Options>General”标签™åµä¸­çš„IP地址分配方式也设¾|®äØ“(f¨´)与Vuser˜qè¡Œæ–¹å¼ä¸€è‡ß_(d¨¢)¼ŒåŒäØ“(f¨´)¾U¿ç¨‹æˆ–è¿›½E‹æ–¹å¼ã€?/p>

  13.在Controller中运行W(xu¨¦)eb相关‹¹‹è¯•场景æ—Óž¼Œ¾lå¸¸ä¼?x¨¬)有很多­‘…时错误提示åQŒå¦‚何处理这¾c»é—®é¢?

  ˜q™ä¸»è¦æœ‰è„šæœ¬çš„é»˜è®¤è¶…æ—¶è®¾¾|®å¼•èµ—÷€‚当回放W(w¨£ng)eb脚本æ—Óž¼Œæœ‰æ—¶å€™ç”±äºŽæœåŠ¡å™¨å“åº”æ—‰™—´è¾ƒé•¿åQŒä¼š(x¨¬)产生­‘…时的错误。这旉™œ€è¦ä¿®æ”¹è„šæœ¬çš„˜qè¡Œæ—‰™…¾|®ã€?/p>

  ˜q›å…¥“Run-time Setting”对话框后åQŒä¾‹Æ¡è¿›å…?#8220;Internet Protocol→Preference”。然后点å‡?#8220;Options…”按钮åQŒè¿›å…¥é«˜¾U§è®¾¾|®å¯¹è¯æ¡†åQŒå¯ä»¥ä¿®æ”¹å„¾c»è¶…时设¾|®çš„默认倹{€?/p>

  14.ä¸ÞZ»€ä¹ˆWindows¾pȝ»Ÿä¸­çš„CPUã€?a title="内存" target="_blank">内存½{‰èµ„源仍然充­‘»I¼Œä½†æ˜¯æ¨¡æ‹Ÿçš„用æˆäh•°é‡å´ä¸Šä¸åŽ?

   在Windows计算机的标准讄¡½®ä¸‹ï¼Œæ“ä½œ¾pȝ»Ÿçš„默认限制只能ä‹É用几百个VuseråQŒè¿™ä¸ªé™åˆ¶ä¸ŽCPU或内存无养I¼Œä¸»è¦æ˜¯æ“ä½œç³»¾lŸæœ¬íw«è§„定了(ji¨£n)默认的最å¤?¾U¿ç¨‹æ•°æ‰€å¯ÆD‡´ã€‚要想突破Windows˜q™ä¸ªé™åˆ¶åQŒé¡»ä¿®æ”¹Windows注册表。以Windows XP Professionalä¸ÞZ¾‹ã€?/p>

  (1)打开注册表后åQŒè¿›å…¥æ³¨å†Œè¡¨™å¹HKEY_LOCAL_MACHINE中的下列关键字:(x¨¬)System\CurrentControlSet\Control\Session Manager\SubSystemsã€?/p>

  (2)扑ֈ°Windows关键字,W(xu¨¦)indows关键字如下所½Cºï¼š(x¨¬)

  %SystemRoot%\system32\csrss.exe bjectDirectory=\Windows

  SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1

  ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2

  ProfileControl=Off MaxRequestThreads=16

  SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义äº?ji¨£n)ç³»¾lŸèŒƒå›´å †çš„æœ€å¤§å€?以KB为单ä½?åQŒyyyy定义每个桌面堆得大小ã€?/p>

  (3)ž®†yyyy的设¾|®ä»Ž3072更改ä¸?192(å?MB)åQŒå¢žåŠ SharedSection参数倹{€?/p>

  通过å¯ÒŽ(gu¨©)³¨å†Œè¡¨çš„æ›´æ”¹ï¼Œ¾pȝ»Ÿž®†å…è®¸è¿è¡Œæ›´å¤šçš„¾U¿ç¨‹åQŒå› è€Œå¯ä»¥åœ¨è®¡ç®—æœÞZ¸Š˜qè¡Œæ›´å¤šçš„Vuserã€‚è¿™æ„å‘³ç€èƒ½å¤Ÿæ¨¡æ‹Ÿçš„æœ€å¤§åÆˆå‘ç”¨æˆäh•°é‡å°†ä¸å—Windows操作¾pȝ»Ÿçš„限åˆÓž¼Œè€Œåªå—硬件和内部可äŽ×¾~©æ€§é™åˆ¶çš„¾U¦æŸã€?/p>

joan 2009-10-12 16:50 发表评论
]]>
LR在安装和卸蝲问题åQˆè{载)(j¨ª)http://www.aygfsteel.com/joan/articles/296429.htmljoanjoanFri, 25 Sep 2009 07:31:00 GMThttp://www.aygfsteel.com/joan/articles/296429.htmlhttp://www.aygfsteel.com/joan/comments/296429.htmlhttp://www.aygfsteel.com/joan/articles/296429.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/296429.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/296429.html

LR在安装和卸蝲问题

看到˜q™ä¸ªå†™çš„不错åQŒå…ˆæ”¶è—ä¸?
LR在安装和卸蝲问题上的一ç‚ÒŽ(gu¨©)€È»“
åQˆä¸€åQ?提示åQ? the link file .... may be corrupted or has illegated link string "的,提示重复多次均无法安装ã€?
原因 åQšä½ çš?Loaderunner 的安装文件夹名写成中文了(ji¨£n)åQŒé€ æˆ Lr 的安装教本无法识别èµ\径,最¾lˆå¯¼è‡´ä¸æ–­æœ‰˜q™æ ·çš„错误提½Cºã€?
解决æ–ÒŽ(gu¨©)¡ˆåQšæŠŠå®‰è£…æ–‡äšgçš„ç›®å½•åæ”¹äØ“(f¨´)非中文就可以äº?ji¨£n)ã€?
åQˆäºŒåQ?nbsp; 没法完全卸蝲
要想æŠ?LR 的老版本完全卸载,正确的步骤是åQ?
1.  停止所有的˜qè¡Œçš?LR 的进½E‹å’ŒæœåŠ¡åQ?including the Controller, VuGen, Analysis åQ?or the LoadRunner Agent Process/Service åQ?
2.  备䆾已有的脚本,你的脚本有可能在你的默认安装路径ä¸?
3.  在控刉™¢æ¿çš„æ·ÕdŠ åˆ é™¤½E‹åºä¸­ï¼Œåˆ é™¤ LR åQŒåƈ重启机器
4.  手动删除所æœ?LR 的文件夹åQŒåŒ…括æ?zh¨¨n)¨çš„开始菜单里çš?LR 快捷方式
5.  如果你的版本æ˜?6.0 ¾pÕdˆ—的,删除 Borland æ–‡äšg夹(通常åœ?C:\Borland or C:\BDE  目录下)(j¨ª)
6.  搜烦(ch¨³)    wlrun.* ã€?nbsp;   vugen.* åQŒé™¤äº?ji¨£n)安装文件夹中的文äšgåQŒå…¶ä»–的都删é™?
7.  打开注册表,扑ֈ°
如果只安装了(ji¨£n) MI 公司çš?LoadRunner ˜q™ä¸€ä¸ªäñ”品,请删除:(x¨¬)
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive
否则请删除:(x¨¬)
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive\LoadRunner
HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive\LoadRunner
删除所有和 LR 有关的数å€û|¼Œé™¤äº†(ji¨£n)ä½ çš„ License2 æˆ?Licenseã€?
8.  清空回收ç«?
实现以上步骤后,卛_¯æ”‘Ö¿ƒ(j¨©)安装äº?ji¨£n),切记在重装后åQŒä¸€å®šè¦é‡å¯æœºå™¨åQŒå› ä¸ÞZ¸€äº›å¿…要信息要写入注册表ã€?
(ä¸?  卸蝲å?, 执行安装˜q‡ç¨‹æ—¶å‡ºçŽ? license security violation.Operation is not allowed "提示信息 , 安装å¤ÞpÓ|
解决æ–ÒŽ(gu¨©)¡ˆåQ?
1.  ˜q›å…¥ä¸€å?Loadrunner ˜qè¡Œæ­£å¸¸çš„电(sh¨´)脑(安装路径要和你的相同åQ‰è¿›å…¥æ³¨å†Œè¡¨åQŒå¯¼å‡ÞZ»¥ä¸‹ä¸¤ä¸ªç›®å½•:(x¨¬)
HKEY_CURRENT_USER\Software\Mercury Interactive
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
2.  回到刚才安装不成功的ç”?sh¨´)è„?, ˜q›å…¥æ³¨å†Œè¡¨å¯¼å…¥åˆšæ‰è¿™ä¸¤ä¸ªæ–‡äšgã€?
3.  再次执行安装ã€?
廸™®®åQšå¦‚果有ç”?Ghost 提前å?GhoståQŒæˆ–è€…äØ“(f¨´)¾pȝ»Ÿè®„¡½®˜q˜åŽŸç‚V€?/p>

joan 2009-09-25 15:31 发表评论
]]>
用LR 监控Tomcat http://www.aygfsteel.com/joan/articles/295020.htmljoanjoanMon, 14 Sep 2009 06:46:00 GMThttp://www.aygfsteel.com/joan/articles/295020.htmlhttp://www.aygfsteel.com/joan/comments/295020.htmlhttp://www.aygfsteel.com/joan/articles/295020.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/295020.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/295020.htmlloadrunner监控tomcatåQ?br />
½W¬ä¸€¿Uï¼š(x¨¬)
LR本èín是不支持的!有两¿Uæ–¹å¼å¯ä»¥é›†æˆï¼
1、自己写一个批处理½E‹åºåŽÕd–tomcat的数æ?br /> 2、ä‹É用sitescopeåŽÀL‰§è¡Œè¿™ä¸ªæ‰¹å¤„理åQŒç„¶åŽé‡‡é›†æ•°æ?br /> 3、ä‹É用LR与sitescope集成åQŒç„¶åŽè¯»å–æ•°æ?br />
½W¬äºŒ¿Uï¼š(x¨¬)
1、通过LR去访问tomcat监控™å?br /> 2、然后通过兌™”取监控数æ?br /> 3、ä‹É用lr_user_data_pointåQˆï¼‰(j¨ª)æ·ÕdŠ æ•°æ®åˆ°å›¾è¡¨ä¸­åŽ?br />
˜q™é‡Œç”¨ç¬¬äºŒç§å…·ä½“解决æ–ÒŽ(gu¨©)¡ˆå¦‚下åQ?监控tomcat服务器:(x¨¬)http://127.0.0.1)

1、打开Tomcatçš„status™åµé¢åQŒæ–¹æ³•䨓(f¨´)¾~–辑Tomcatçš„conf目录下的tomcat-users.xmlæ–‡äšgåQŒåœ¨æ–‡äšg中添åŠ?br /> <?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="" roles="admin,manager"/>
</tomcat-users>


2. LR 脚本
-------------------------------------------

#include "web_api.h"
#include "lrw_custom_body.h"

double atof (const char *string);  // è½¬æ ¼å¼ï¼Œå› äØ“(f¨´)atof函数转换成double时数值都变了(ji¨£n)æ ?br /> vuser_init(){
return 0;

}

Action6()
{
 

//定义tomcat内存使用情况的监视器事务åQ?/span>

lr_start_transaction("monitor tomcat"); 

 

//保存3个参敎ͼ›

 web_reg_save_param("JVMFreeMemory",  

     "LB=Free memory: ",

     "RB= MB",

     "Ord=1",

   LAST); 

   web_reg_save_param("JVMTotalMemory",

   "LB=Total memory: ",

   "RB= MB",

   "Ord=1",

   LAST);

 

    web_reg_save_param("JVMMaxMemory",

     "LB=Max memory: ",

     "RB= MB",

     "Ord=1",

    LAST);

//通过LR去访问tomcat监控™å?/span>

   web_set_user("admin","","127.0.0.1:8091");

 

  web_url("status",

        "URL=http://127.0.0.1:8091/manager/status",

        "Resource=0",

        "RecContentType=text/html",

        "Referer=",

        "Snapshot=t1.inf",

        "Mode=HTTP",

    LAST);

 

    lr_end_transaction("monitor tomcat", LR_AUTO);

 

// Tomcat JVM metrics  使用lr_user_data_pointåQˆï¼‰(j¨ª)æ·ÕdŠ æ•°æ®åˆ°å›¾è¡¨ä¸­åŽ?/span>

    lr_user_data_point("Tomcat JVM Free memory", atof(lr_eval_string("{JVMFreeMemory}")));

    lr_user_data_point("Tomcat JVM Total memory", atof(lr_eval_string("{JVMTotalMemory}")));

    lr_user_data_point("Tomcat JVM Max memory", atof(lr_eval_string("{JVMMaxMemory}")));


 return 0;

}


˜qè¡Œæ—¥å¿—可以看到监控到的tomcat 数据å€?/span>
-----------------------------------------

虚拟用户脚本已启åŠ?br /> 正在开始操ä½?vuser_initã€?br /> Web Turbo 重播 LoadRunner 8.1.0 for WINXP; Web 内部版本 4788   [MsgId: MMSG-27143]
˜qè¡Œæ—¶è®¾¾|®æ–‡ä»? "C:\Documents and Settings\joan\桌面\lr TEST\test20090907\\default.cfg"   [MsgId: MMSG-27141]
正在¾l“束操作 vuser_initã€?br /> 正在˜qè¡Œ Vuser...
正在开始è„Pä»?1ã€?br /> 正在开始操ä½?Action6ã€?br /> Action6.c(7): 通知: Transaction "monitor tomcat" started.
Action6.c(13): 注册 web_reg_save_param 成功   [MsgId: MMSG-26390]
Action6.c(23): 注册 web_reg_save_param 成功   [MsgId: MMSG-26390]
Action6.c(35): 注册 web_reg_save_param 成功   [MsgId: MMSG-26390]
Action6.c(47): web_set_user 成功   [MsgId: MMSG-26392]
Action6.c(51): web_url("status") 已成功,6503 个正文字节,493 个标头字节,12 个成块开销字节   [MsgId: MMSG-26385]
Action6.c(69): 通知: Transaction "monitor tomcat" ended with "Pass" status (Duration: 0.2604 Wasted Time: 0.0001).
Action6.c(75): 通知: Data Point "Tomcat JVM Free memory" value = 15.2500.
Action6.c(77): 通知: Data Point "Tomcat JVM Total memory" value = 36.3300.
Action6.c(79): 通知: Data Point "Tomcat JVM Max memory" value = 63.5600.

正在¾l“束操作 Action6ã€?br /> 正在¾l“束˜q­ä»£ 1ã€?br /> 正在¾l“束 Vuser...
正在开始操ä½?vuser_endã€?br /> 正在¾l“束操作 vuser_endã€?br /> Vuser 已终止ã€?br />



joan 2009-09-14 14:46 发表评论
]]>
LR中常用的C函数http://www.aygfsteel.com/joan/articles/294248.htmljoanjoanTue, 08 Sep 2009 01:28:00 GMThttp://www.aygfsteel.com/joan/articles/294248.htmlhttp://www.aygfsteel.com/joan/comments/294248.htmlhttp://www.aygfsteel.com/joan/articles/294248.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/294248.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/294248.html 

LR中常用的C函数


注意åQ?br /> ž®†å­—½W¦ä¸²ä¸­çš„æ•°å­—转换为æÕQç‚ÒŽ(gu¨©)•°çš„函敎ͼŒå¦‚果不事先声明,则è{换有问题ã€?br /> 1       strcat

char *strcat ( char *to, const char *from );

功能åQšé“¾æŽ¥ä¸¤ä¸ªå­—½W¦ä¸²ã€?/p>

例子åQ?/p>

˜q™ä¸ªä¾‹å­æ˜¯ç”¨strcat链接字符ä¸ÔŒ¼š(x¨¬)zeeå’Œslo@hotmail.co

脚本如下åQ?/p>

     char test[1024], *a = "slo@hotmail.com";

     strcpy(test, "zee");

     strcat(test, a);

     lr_output_message("We can see %s",test);


˜qè¡ŒåŽåœ¨executon log中看到如下语句:(x¨¬)

Starting action Action.
Action.c(16): We can see zeeslo@hotmail.com

2       strchr
char *strchr ( const char *string, int c );

功能åQšè¿”回字½W¦ä¸²ä¸­æŒ‡å®šå­—½W¦åŽé¢çš„字符丌Ӏ?/p>

例子åQ?/p>

˜q™ä¸ªä¾‹å­æ˜¯è¿”回第一个出现e字符以后所有的字符åQŒå’Œæœ€åŽä¸€‹Æ¡å‡ºçްe字符以后所有的字符ã€?/p>

脚本如下åQ?br />      char *string = "Zee is a tester";
     char *first_e, *last_e;

     first_e = (char *)strchr(string, 'e');
     lr_output_message("We can see the first occurrence of e: %s",first_e);
     last_e = (char *)strrchr(string, 'e');
     lr_output_message("We can see the last occurrence of e: %s", last_e);

˜qè¡ŒåŽåœ¨executon log中看到如下语句:(x¨¬)
Starting action Action.
Action.c(12): We can see the first occurrence of e: ee is a tester
Action.c(14): We can see the last occurrence of e: er
3       StrcmpåQ†stricmp
int strcmp ( constchar *string1, const char *string2 );大小写敏感�br /> int stricmp ( const char *string1, const char *string2 );大小写不敏感�/p>

功能åQšæ¯”è¾ƒå­—½W¦ä¸²ã€?/p>

例子åQ?/p>

按是否区分大ž®å†™å¯ÒŽ(gu¨©)¯”两个字符ä¸ÔŒ¼Œòq¶æ‰“印出它们的大ž®å…³¾p…R€?/p>

脚本如下åQ?br />      int result;
     char tmp[20];
     char string1[] = "We can see the string:ZEE";
     char string2[] = "We can see the string:zee";

     result = strcmp( string1, string2 ); /*区分大小写,比较字符ä¸?*/

     if( result > 0 )
          strcpy( tmp, "大于" );
     else if( result < 0 )
          strcpy( tmp, "ž®äºŽ" );
     else
          strcpy( tmp, "½{‰äºŽ" );

     lr_output_message( "strcmp: String 1 %s string 2", tmp );

     result = stricmp( string1, string2 ); /* 不区分大ž®å†™åQŒæ¯”较字½W¦ä¸² */

     if( result > 0 )
          strcpy( tmp, "大于" );
     else if( result < 0 )
          strcpy( tmp, "ž®äºŽ" );
     else
          strcpy( tmp, "½{‰äºŽ" );

     lr_output_message( "stricmp: String 1 %s string 2", tmp );    

˜qè¡ŒåŽåœ¨executon log中看到如下语句:(x¨¬)
Starting action Action.
Action.c(22): strcmp: String 1 ž®äºŽ string 2
Action.c(33): stricmp: String 1 ½{‰äºŽ string 2
  
4       strcpy
char *strcpy ( char *dest, const char *source );

功能åQšå¤åˆ¶ä¸€ä¸ªå­—½W¦ä¸²åˆ°å¦ä¸€ä¸ªå­—½W¦ä¸²ä¸­ã€?/p>

例子åQ?/p>

复制一个字½W¦ä¸²åˆ°å­—½W¦æ•°¾l„中åQŒåƈ打印出来ã€?/p>

脚本如下åQ?/p>

     char test[1024];

     strcpy(test, "what can we see?       ");

     lr_output_message("%s", test);

˜qè¡ŒåŽåœ¨executon log中看到如下语句:(x¨¬)
Starting action Action.
Action.c(10): what can we see?      
5       Strdup& strlwr
char *strdup ( const char *string );

复制一个字½W¦ä¸²ã€?/p>

char *strlwr ( char *string );

转换成小写字母�/p>

例子åQ?/p>

在这个例子中åQŒVuser的组名被转换为小写字母。但是lr_whoami把组名作为静(r¨´n)态buffer˜q”回。这æ ïL(f¨¥ng)š„buffer不能被操作。如果有操作需要,ž®±å¤åˆ¶è¿™ä¸ªé™(r¨´n)态bufferã€?/p>

脚本如下åQ?/p>

     int id;
     char *groupname_static, *groupname;

     /* 从VuGen中得到组å?*/
     lr_whoami(&id, &groupname_static, NULL);
     lr_output_message("groupname=%s", groupname_static);

     /*复制˜q™ä¸ªé?r¨´n)态组名以便我们可以操作它 */
     groupname = (char *)strdup(groupname_static);
     groupname = (char *)strlwr(groupname);
     lr_output_message("lower case groupname=%s", groupname);

     free(groupname);
上述脚本用vugen保存为:(x¨¬)CHANGE

在controller中运行(讄¡½®ä¸ºæ€ÀL˜¯å‘送消息)(j¨ª)
˜qè¡ŒåŽåœ¨log中看到如下语句:(x¨¬)
Starting action Action.    [MsgId: MMSG-15919]
Action.c(11): groupname=CHANGE     [MsgId: MMSG-17999]
Action.c(16): lower case groupname=change      [MsgId: MMSG-17999]
6       Strlen
size_t strlen ( constchar *string );

功能åQšè¿”回字½W¦ä¸²é•¿åº¦åQˆbytesåQ?

例子åQ?/p>

˜q™ä¸ªä¾‹å­å¾ˆç®€å•,ž®±æ˜¯å¾—到一个字½W¦ä¸²ä¸­çš„字符的个数。然后打印出来ã€?/p>

脚本如下åQ?/p>

     char *str = "Zee is a tester";
     unsigned int len;

     len = strlen(str);

     lr_output_message("The sentence has %d letters",len);

˜qè¡ŒåŽåœ¨log中看到如下语句:(x¨¬)
Action.c(13): The sentence has 15 letters
7       Strncat
char *strncat ( char *to_string, const char *from_string, size_t n );

把一个字½W¦ä¸²˜qžæŽ¥åˆ°å¦ä¸€ä¸ªå­—½W¦ä¸²åŽé¢ã€?/p>

例子åQ?/p>

在这里,我随便写äº?ji¨£n)两个字½W¦ä¸²åQŒç”¨æ­¤å‡½æ•°æŠŠä»–们˜qžæŽ¥èµäh¥åQŒåƈ打印出来ã€?/p>

脚本如下åQ?/p>


   char str1[]="Zee is ";
    char str2[]="a tester.";
    lr_output_message("What can we see?");
    lr_output_message("The str1 is %s.",str1);

    strncat(str1,str2,20);
lr_output_message("The str1 is %s.",str1);


˜qè¡ŒåŽåœ¨log中看到如下语句:(x¨¬)
Action.c(9): What can we see?
Action.c(10): The str1 is Zee is .
Action.c(13): The str1 is Zee is a tester..
注:(x¨¬)我们可以看到åQŒæ²¡æœ‰è¿žæŽ¥å‰çš„str1是:(x¨¬)Zee isåQŒè¿žæŽ¥åŽçš„å­—½W¦ä¸²æ˜¯ï¼š(x¨¬)Zee is a tester。也可以看看strcat函数ã€?br /> 8       strncmp
int strncmp ( constchar *string1, const char *string2, size_t n );

å¯ÒŽ(gu¨©)¯”两个字符串的前n位ã€?/p>

例子åQ?/p>

å¯ÒŽ(gu¨©)¯”两个字符ä¸ÔŒ¼Œòq¶æŠŠå¯ÒŽ(gu¨©)¯”¾l“果打印出来。这里我和上面的strcmp一起写ã€?/p>

脚本如下åQ?/p>

    char result;
    char str1[]="Zee is a tester.";
    char str2[]="Zee is a tester.";
    char str3[]="zee is a tester?";
   
    result = strcmp(str1,str2);

    if(result > 0)
         lr_output_message("str1 is greater than str2.");
    else if(result < 0)
         lr_output_message("str1 is less than str2.");
    else
         lr_output_message("str1 is equal to str2.");
  
    result = strncmp( str1, str3 , 30);


    if(result > 0)
         lr_output_message("str1 is greater than str3.");
    else if(result < 0)
         lr_output_message("str1 is less than str3.");
    else
         lr_output_message("str1 is equal to str3.");

˜qè¡ŒåŽåœ¨log中看到如下语句:(x¨¬)
Starting iteration 1.
Starting action Action.
Action.c(18): str1 is equal to str2.
Action.c(28): str1 is less than str3.



joan 2009-09-08 09:28 发表评论
]]>
LR 报错è¯? C interpreter run time error: Error -- Unresolved symbol : Action. http://www.aygfsteel.com/joan/articles/293886.htmljoanjoanFri, 04 Sep 2009 06:58:00 GMThttp://www.aygfsteel.com/joan/articles/293886.htmlhttp://www.aygfsteel.com/joan/comments/293886.htmlhttp://www.aygfsteel.com/joan/articles/293886.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/293886.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/293886.html虚拟用户脚本已启动正在开始操ä½?vuser_init。正在结束操ä½?vuser_initã€?br /> 正在˜qè¡Œ Vuser... 正在开始è„Pä»?1ã€?br /> 正在开始操ä½?Actionã€?span style="color: #ff0000">错误: C interpreter run time error: Error -- Unresolved symbol : Action.
正在¾l“束 Vuser... 正在开始操ä½?vuser_endã€?br /> 正在¾l“束操作 vuser_endã€?Vuser 已终止ã€?

解决æ–ÒŽ(gu¨©)³•åQ?br />

晕,VuGen名称和脚本中的函数名¿UîC¸å¯¹åº”

更改后,VUG 的脚本运行成�^ ^

虚拟用户脚本已启åŠ?br /> 正在开始操ä½?vuser_initã€?br /> 正在¾l“束操作 vuser_initã€?br /> 正在˜qè¡Œ Vuser...
正在开始è„Pä»?1ã€?br /> 正在开始操ä½?Actionã€?br /> Action.c(11): >>>>>>>>>> Random Number: 10253
Action.c(11): >>>>>>>>>> Random Number: 8766
Action.c(11): >>>>>>>>>> Random Number: 30926
Action.c(11): >>>>>>>>>> Random Number: 4386
Action.c(11): >>>>>>>>>> Random Number: 29132
Action.c(11): >>>>>>>>>> Random Number: 6608
Action.c(11): >>>>>>>>>> Random Number: 12016
Action.c(11): >>>>>>>>>> Random Number: 18041
Action.c(11): >>>>>>>>>> Random Number: 16336
Action.c(11): >>>>>>>>>> Random Number: 1504
正在¾l“束操作 Actionã€?br /> 正在¾l“束˜q­ä»£ 1ã€?br /> 正在¾l“束 Vuser...
正在开始操ä½?vuser_endã€?br /> 正在¾l“束操作 vuser_endã€?br /> Vuser 已终止ã€?/p>

joan 2009-09-04 14:58 发表评论
]]>
脚本录制的参æ•?Options)的配¾|®è¯¦è§£è¯´æ˜?- loadrunner 8 负蝲‹¹‹è¯•、性能‹¹‹è¯•(Load Test)http://www.aygfsteel.com/joan/articles/269572.htmljoanjoanFri, 08 May 2009 03:39:00 GMThttp://www.aygfsteel.com/joan/articles/269572.htmlhttp://www.aygfsteel.com/joan/comments/269572.htmlhttp://www.aygfsteel.com/joan/articles/269572.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/269572.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/269572.html1 选择录制的方å¼?Recording Level)
两个方式的区别,请参考另一个专é¢?http://www.java2000.net/p12413 




2 选择‹¹è§ˆå™?Browser)

¾pȝ»Ÿåªæ”¯æŒIE‹¹è§ˆå™¨ï¼ŒFirefox不支持,如果你安装有多个‹¹è§ˆå™¨ï¼Œä¸”默认的不是IE,需要手工指å®?nbsp;




3 讄¡½®ä»£ç†æ–¹å¼åQˆRecording Proxy) 




4 高çñ”配置(Advanced)
是否录制思考时é—ß_(d¨¢)¼Œå·²ç»æ€è€ƒæ—¶é—´çš„æœ€ä½Žå€û|¼Œä½ŽäºŽ˜q™ä¸ªå€¼çš„æ€è€ƒæ—¶é—´ä¸å½•制
是否每个‹zÕdŠ¨éƒ½é‡¾|®ä¸Šä¸‹æ–‡
完整的录制日�
在本åœîC¿å­˜å¿«ç…§èµ„源,性能ä¼?x¨¬)å¥?
是否自动为每个页面的标题(Title)æ·ÕdŠ web_reg_find æ–ÒŽ(gu¨©)³•
是否为每个大�00的异常自动填写注�
¾pȝ»Ÿæ”¯æŒçš„å­—½W¦é›†åQŒå¦‚果设¾|®é”™è¯¯ï¼Œå½•制的脚本是ä¹Þq ã€?nbsp;



4.1 æ–‡äšg头信息的录制(Headers) 



4.2 æ–‡äšg¾cÕdž‹çš„过æ»?/strong>(Content Type) 



4.3 æ–‡äšg¾cÕdž‹çš„过æ»?/strong> 



5 高çñ”资源的配¾|®ï¼ŒçŽ°æˆçš„åº”ç”?/strong> 

 

]]>
LoadRunner录制脚本时提½Cºé»˜è®¤æµè§ˆå™¨ä¸æ”¯æŒè§£å†Ïx–¹æ³?http://www.aygfsteel.com/joan/articles/239690.htmljoanjoanMon, 10 Nov 2008 08:10:00 GMThttp://www.aygfsteel.com/joan/articles/239690.htmlhttp://www.aygfsteel.com/joan/comments/239690.htmlhttp://www.aygfsteel.com/joan/articles/239690.html#Feedback4http://www.aygfsteel.com/joan/comments/commentRss/239690.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/239690.html  é˜…读全文

]]>
LR functionhttp://www.aygfsteel.com/joan/articles/222369.htmljoanjoanFri, 15 Aug 2008 15:34:00 GMThttp://www.aygfsteel.com/joan/articles/222369.htmlhttp://www.aygfsteel.com/joan/comments/222369.htmlhttp://www.aygfsteel.com/joan/articles/222369.html#Feedback0http://www.aygfsteel.com/joan/comments/commentRss/222369.htmlhttp://www.aygfsteel.com/joan/services/trackbacks/222369.html 

LR常用函数

1.         Intweb_reg_save_param("参数å?,"LB=左边ç•?,"RB=双™¾¹ç•?,LAST);/注册函数åQŒåœ¨å‚数值出现的前面使用åQŒæ³¨å†ŒæˆåŠŸæ—¶˜q”回å€égØ“(f¨´)0åQŒæ³¨å†Œå¤±è´¥æ—¶˜q”回å€égØ“(f¨´)1。左双™¾¹ç•Œéœ€æ ÒŽ(gu¨©)®TreeView里相å…Ïx­¥éª¤çš„SeverResponse代码来确定。用以上函数能获取第一个符合条件的数倹{€?/p>

2.         web_reg_save_param("参数å?#8221;,"LB=左边ç•?#8221;,"RB=双™¾¹ç•?,"Ord=All",LAST);/当参数有多个值时åQŒåŠ ä¸?Ord=All”后可获取所有的数倹{€‚注册成功后åQŒ{参数名_count}表示取得的数å€ég¸ªæ•ŽÍ¼Œ{参数名_1}为第一个数å€û|¼Œ{参数名_2}为第二个数倹{€?/p>

3.         lr_save_string(“字符串变é‡?#8221;,"参数å?)/ž®†å­—½W¦å˜é‡é‡Œçš„å€ég¼ é€’给指定参数。通过该函数来改变DataFile¾cÕdž‹å‚数的数倹{€?/p>

4.         lr_eval_string("{参数名}")/取得参数的数倹{€‚可取得已注册参数或DataFile¾cÕdž‹å‚数的数倹{€‚evalž®±æ˜¯evaluationåQˆä¼°ä»? 评ä­h(hu¨¢n), 赋å€û|¼‰(j¨ª)的羃写ã€?/p>

5.         int sprintf(char * string , const char*format_string[,args]);/字符串赋值函æ•?/p>

Action()

{

int index=56;

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

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

lr_output_message("Thenewfilenameis%s",filename);

return 0;

}

OutputåQšThenewfilenameislog_56.txt

6.         char*strcat(char*to,constchar*from);/ž®†ä¸€å­—符串追加到另一字符串后é?/p>

7.         web_find("find_time","What=2006-03-0118:21:16.882",LAST);/增加‹‚€(g¨¨)查点,‹‚€(g¨¨)æŸ?#8220;2006-03-0118:21:16.882”˜q™ä¸ªå­—符串是否出现在当前™åµé¢ä¸Šã€‚find_time䏸™‡ªå·×ƒ“Q意输入的‹‚€(g¨¨)查点名称ã€?/p>

8.       事务函数

lr_end_sub_transaction/标记子事务的¾l“束以便˜q›è¡Œæ€§èƒ½åˆ†æž

lr_end_transaction/标记LoadRunner事务的结�/p>

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

lr_fail_trans_with_error/ž®†æ‰“开事务的状态设¾|®äØ“(f¨´)LR_FAILòq¶å‘送错误消æ?/p>

lr_get_trans_instance_duration/获取事务实例的持¾l­æ—¶é—ß_(d¨¢)¼ˆç”±å®ƒçš„句柄指定)(j¨ª)

lr_get_trans_instance_wasted_time/获取事务实例‹¹ªè´¹çš„æ—¶é—ß_(d¨¢)¼ˆç”±å®ƒçš„句柄指定)(j¨ª)

lr_get_transaction_duration/获取事务的持¾l­æ—¶é—ß_(d¨¢)¼ˆæŒ‰äº‹åŠ¡çš„åç§°åQ?/p>

lr_get_transaction_think_time/获取事务的思考时é—ß_(d¨¢)¼ˆæŒ‰äº‹åŠ¡çš„åç§°åQ?/p>

lr_get_transaction_wasted_time/获取事务‹¹ªè´¹çš„æ—¶é—ß_(d¨¢)¼ˆæŒ‰äº‹åŠ¡çš„åç§°åQ?/p>

lr_resume_transaction/¾l§ç®‹æ”‰™›†äº‹åŠ¡æ•°æ®ä»¥ä¾¿˜q›è¡Œæ€§èƒ½åˆ†æž

lr_resume_transaction_instance/¾l§ç®‹æ”‰™›†äº‹åŠ¡å®žä¾‹æ•°æ®ä»¥ä¾¿˜q›è¡Œæ€§èƒ½åˆ†æž

lr_set_transaction_instance_status/讄¡½®äº‹åŠ¡å®žä¾‹çš„çŠ¶æ€?/p>

lr_set_transaction_status/讄¡½®æ‰“开事务的状æ€?/p>

lr_set_transaction_status_by_name/讄¡½®äº‹åŠ¡çš„çŠ¶æ€?/p>

lr_start_sub_transaction/标记子事务的开�/p>

lr_start_transaction/标记事务的开�/p>

lr_start_transaction_instance/启动嵌套事务åQˆç”±å®ƒçš„父事务的句柄指定åQ?/p>

lr_stop_transaction/停止事务数据的收�/p>

lr_stop_transaction_instance/停止事务åQˆç”±å®ƒçš„句柄指定åQ‰æ•°æ®çš„æ”‰™›†

lr_wasted_time/消除所有打开事务‹¹ªè´¹çš„æ—¶é—?/p>

lr_end_sub_transaction/标记子事务的¾l“束以便˜q›è¡Œæ€§èƒ½åˆ†æž

r_end_transaction/标记LoadRunner事务的结�/p>

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

lr_fail_trans_with_error/ž®†æ‰“开事务的状态设¾|®äØ“(f¨´)LR_FAILòq?/p>

9.      命ä×o(h¨´)行分析函æ•?/p>

lr_get_attrib_double/‹‚€(g¨¨)索脚本命令行中ä‹É用的double¾cÕdž‹å˜é‡

lr_get_attrib_long/‹‚€(g¨¨)索脚本命令行中ä‹É用的long¾cÕdž‹å˜é‡

lr_get_attrib_string/‹‚€(g¨¨)索脚本命令行中ä‹É用的字符ä¸?/p>

10. 信息性函�/p>

lr_user_data_point/记录用户定义的数据示�/p>

lr_whoami/ž®†æœ‰å…³Vuser脚本的信息返回给Vuser脚本

lr_get_host_name/˜q”回执行Vuser脚本的主机名

lr_get_master_host_name/˜q”回˜qè¡ŒLoadRunnerController的计½Ž—机å?/p>

11. 字符串函�/p>

lr_eval_string/用参数的当前值替换参�/p>

lr_save_string/ž®†ä»¥NULL¾l“尾的字½W¦ä¸²ä¿å­˜åˆ°å‚æ•îC¸­

lr_save_var/ž®†å˜é•¿å­—½W¦ä¸²ä¿å­˜åˆ°å‚æ•îC¸­

lr_save_datetime/ž®†å½“前日期和旉™—´ä¿å­˜åˆ°å‚æ•îC¸­

lr_advance_param/前进åˆîC¸‹ä¸€ä¸ªå¯ç”¨å‚æ•?/p>

lr_decrypt/解密已编码的字符�/p>

lr_eval_string_ext/‹‚€(g¨¨)索指向包含参数数据的¾~“冲区的指针

lr_eval_string_ext_free/释放由lr_eval_string_ext分配的指�/p>

lr_save_searched_string/在缓冲区中搜索字½W¦ä¸²å®žä¾‹åQŒåƈ相对于该字符串实例,该缓冲区的一部分保存到参æ•îC¸­

12. 消息函数

lr_debug_message/ž®†è°ƒè¯•消息发送到输出½H—口

lr_error_message/ž®†é”™è¯¯æ¶ˆæ¯å‘送到输出½H—口

lr_get_debug_message/‹‚€(g¨¨)索当前的消息¾c?/p>

lr_log_message/ž®†è¾“出消息直接发送到output.txtæ–‡äšgåQŒæ­¤æ–‡äšg位于Vuser脚本目录中。该函数有助于防止输出消息干扰TCP/IP通信ã€?/p>

lr_output_message/ž®†æ¶ˆæ¯å‘送到输出½H—口

lr_set_debug_message/䏸™¾“出消息设¾|®æ¶ˆæ¯ç±»

lr_vuser_status_message/ç”Ÿæˆæ ¼å¼åŒ–è¾“å‡ºåÆˆž®†å…¶æ‰“印到ControllerVuser状态区域ã€?/p>

lr_message/ž®†æ¶ˆæ¯å‘送到Vuser日志和输出窗å?/p>

13. 操作函数

web_custom_request允许æ‚(zh¨¨n)¨ä‹É用HTTP支持的ä“Q何方法来创徏自定义HTTPè¯äh±‚

web_image在定义的囑փä¸Šæ¨¡æ‹Ÿé¼ æ ‡å•å‡?/p>

web_link在定义的文本链接上模拟鼠标单�/p>

web_submit_data执行“无条ä»?#8221;æˆ?#8220;无上下文”的表å?/p>

web_submit_form模拟表单的提�/p>

web_url加蝲ç”?#8220;URL”属性指定的URL

14. íw«ä†¾éªŒè¯å‡½æ•°

íw«ä†¾éªŒè¯å‡½æ•°web_set_certificate使Vuser使用在InternetExplorer注册表中列出的特定证ä¹?/p>

íw«ä†¾éªŒè¯å‡½æ•°web_set_certificate_ex指定证书和密钥文件的位置和格式信æ?/p>

íw«ä†¾éªŒè¯å‡½æ•°web_set_user指定Web服务器的ç™Õd½•字符串和密码åQŒç”¨äºŽWeb服务器上已验证用戯‚ín份的区域

15. ¾~“存函数

¾~“存函数web_cache_cleanup清除¾~“存模拟½E‹åºçš„内å®?/p>

16. ‹‚€(g¨¨)查函æ•?/p>

‹‚€(g¨¨)查函数web_find在HTML™åµå†…搜烦(ch¨³)指定的文本字½W¦ä¸²

‹‚€(g¨¨)查函数web_global_verification在所有后面的HTTPè¯äh±‚中搜索文本字½W¦ä¸²

‹‚€(g¨¨)查函数web_image_check验证指定的图像是否存在于HTML™åµå†…

‹‚€(g¨¨)查函数web_reg_find在后面的HTTPè¯äh±‚中注册对HTML源或原始¾~“冲åŒÞZ¸­æ–‡æœ¬å­—符串的搜烦(ch¨³)

17. ˜qžæŽ¥å®šä¹‰å‡½æ•°

˜qžæŽ¥å®šä¹‰å‡½æ•°web_disable_keep_alive¼›ç”¨Keep-AliveHTTP˜qžæŽ¥

˜qžæŽ¥å®šä¹‰å‡½æ•°web_enable_keep_alive启用Keep-AliveHTTP˜qžæŽ¥

˜qžæŽ¥å®šä¹‰å‡½æ•°web_set_connections_limit讄¡½®Vuser在运行脚本时可以同时打开˜qžæŽ¥çš„æœ€å¤§æ•°ç›?/p>

18. òq¶å‘¾l?/p>

web_concurrent_end标记òq¶å‘¾l„çš„¾l“束

web_concurrent_start标记òq¶å‘¾l„的开å§?/p>

19. cook函数

web_add_cookieæ·ÕdŠ æ–°çš„Cookie或修改现有的Cookie

web_cleanup_cookies删除当前由Vuser存储的所有Cookie

web_remove_cookie删除指定的Cookie

20. å…Œ™”函数

web_create_html_paramž®†HTML™åµä¸Šçš„动态信息保存到参数中。(LR6.5å?qi¨¢ng)更低版本ï¼?j¨ª)

web_create_html_param_exåŸÞZºŽåŒ…含在HTML™åµå†…的动态信息创建参敎ͼˆä½¿ç”¨åµŒå…¥è¾¹ç•ŒåQ‰ï¼ˆLR6.5å?qi¨¢ng)更低版本ï¼?j¨ª)ã€?/p>

å…Œ™”函数



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÎߺþÊÐ| èϳÇÏØ| ãòÏªÏØ| ÄÏÁêÏØ| ÔªÀÊÇø| Èð°²ÊÐ| ºôͼ±ÚÏØ| ÑïÖÐÊÐ| »¯ÖÝÊÐ| ÌÆÉ½ÊÐ| ÇåÐìÏØ| ÁúÁêÏØ| ºôͼ±ÚÏØ| ÑïÖÐÊÐ| ÍпËÍÐÏØ| ¶´¿ÚÏØ| ËìÄþÊÐ| ×Ô¹±ÊÐ| Èê³ÇÏØ| Áú¿ÚÊÐ| µ¤ÑôÊÐ| ³µÖÂ| ÁÖÖÜÏØ| Ò˶¼ÊÐ| ËçÀâÏØ| Çíº£ÊÐ| ¶õ¶û¶à˹ÊÐ| ͨÖÝÇø| ¸»Æ½ÏØ| ¾¸½­ÊÐ| Íú²ÔÏØ| ÇåºÓÏØ| Ë«ÇÅÇø| ³Î½­ÏØ| ±¾ÏªÊÐ| ½ú³Ç| ¶«ÖÁÏØ| ½ÒÎ÷ÏØ| ̨ÍåÊ¡| ¤´¨ÏØ| Ó¯½­ÏØ|