﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-joan-文章分类-LR </title><link>http://www.blogjava.net/joan/category/33813.html</link><description>私は张で
QQ:774199038

</description><language>zh-cn</language><lastBuildDate>Sat, 08 May 2010 18:23:33 GMT</lastBuildDate><pubDate>Sat, 08 May 2010 18:23:33 GMT</pubDate><ttl>60</ttl><item><title>LR 中调用QTP 脚本</title><link>http://www.blogjava.net/joan/articles/320046.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Tue, 04 May 2010 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/320046.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/320046.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/320046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/320046.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/320046.html</trackback:ping><description><![CDATA[<span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 12px; color: #333333; line-height: 21px; font-family: Arial, Helvetica, sans-serif; text-align: left">&nbsp;&nbsp;&nbsp;&nbsp;
<div class="t_msgfont" id="postmessage_94516">Mercury Interactive&#8217;s icon-based tool for testing complex<br />
Web environments (Java applets, Flash, etc.). LoadRunner can<br />
run Vuser scripts created using QuickTest Professional. Note<br />
that this product must be purchased separately.</div>
<p style="margin: 10px 0px; line-height: 1.8em! important">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000; line-height: normal! important"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 12px; color: #333333; line-height: 21px; font-family: Arial, Helvetica, sans-serif; text-align: left">&nbsp; </p>
<p style="margin: 10px 0px; line-height: 1.8em! important">在LR中运行<a style="color: #333333; line-height: normal! important; text-decoration: underline" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">QTP</strong></span></a>脚本的注意事项</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">1、QTP的Tools--Options--Run的"Alow other<span class="Apple-converted-space">&nbsp;</span><a style="color: #333333; line-height: normal! important; text-decoration: underline" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">Mercury</strong></span></a><span class="Apple-converted-space">&nbsp;</span>products to run tests and components"选项要打勾；<br style="line-height: normal! important" />
2、在QTP脚本中设置事务，Services.StartTransaction "start"与Services.EndTransaction "start"<br style="line-height: normal! important" />
把需要在LR运行的脚本放在此事务里面；<br style="line-height: normal! important" />
3、在LR中运行时选择QTP脚本，文件扩展名为.usr的；<br style="line-height: normal! important" />
4、在LR中运行QTP脚本时，要把QTP关闭；<br style="line-height: normal! important" />
5、只能在LR的Controller中运行；不能在Virtual User Generator中打开及回放；<br style="line-height: normal! important" />
6、LR要使用global的license，单单WEB的license不行，会报错；<br style="line-height: normal! important" />
7、Controller运行中，<span style="color: red">只能执行1个虚拟用户</span>，大于1个以上的虚拟用户会提示错误；并发会报错&#8230;&#8230;<br style="line-height: normal! important" />
如果需要运行多个用户，只能在QTP脚本里设置循环及参数化来解决；</p>
<p style="margin: 10px 0px; line-height: 1.8em! important"></span></span></span>-----------------------------------------------------------------------------------------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么用<a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">LoadRunner</strong></span></a>做<a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">功能测试</strong></span></a>自动化？</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　1、lr是模拟浏览器给服务器直接发送请求，而<a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">QTP</strong></span></a>是模拟鼠标键盘的操作。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　故：LR脚本可以做验证流程的功能自动化，但是验证的大多是后台数据处理流程的正确性，QTP可以验证流程也可以验证UI。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　2、LR录制<a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">脚本</strong></span></a>是类C语言，QTP是vbscript。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　故：你若对c了如指掌自然也可用lr加入复杂的检查点完成功能自动化，QTP由于使用vbscript是windows嫡系子孙，调用一些wshell dom等可以很好的操作UI。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　3、最后一条：LR脚本比QTP脚本容易维护。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　4、qtp是基于对象库的，而LR是基于协议的，前者是属于<a style="color: #000000; line-height: normal! important; text-decoration: none" target="_self"><span style="line-height: normal! important; text-decoration: underline"><strong style="line-height: normal! important">黑盒测试</strong></span></a>范畴，前台进行处理，而后者是基于协议，是后台进行处理的。如果非得用LR也未尝不可，只是舍近求远，毕竟QTP是专业的自动化工具。另外做功能测试不可能不关注UI界面。</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　　5、QTP的检查点类型比较多，如下：</p>
<table style="font-size: 12px; line-height: normal" cellspacing="0" cellpadding="0" width="98%" align="center" border="1">
    <tbody style="line-height: normal">
        <tr style="line-height: normal">
            <td style="line-height: normal" colspan="3" height="25">
            <p style="margin: 10px 0px; line-height: 1.8em! important" align="center">QuickTest Professional提供了下列类型的检查点：</p>
            </td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">
            <p style="margin: 10px 0px; line-height: 1.8em! important" align="center">检查点类型</p>
            </td>
            <td style="line-height: normal">
            <p style="margin: 10px 0px; line-height: 1.8em! important" align="center">描述</p>
            </td>
            <td style="line-height: normal">
            <p style="margin: 10px 0px; line-height: 1.8em! important" align="center">用法示例</p>
            </td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">标准检查点</td>
            <td style="line-height: normal">检查对象的属性值</td>
            <td style="line-height: normal">检查是否选中某单选按钮</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">图像检查点</td>
            <td style="line-height: normal">检查图像的属性值</td>
            <td style="line-height: normal">检查图像源文件是否正确</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">表检查点</td>
            <td style="line-height: normal">检查表中的信息</td>
            <td style="line-height: normal">检查表单元格中的值是否正确</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">页面检查点</td>
            <td style="line-height: normal">检查网页的特性</td>
            <td style="line-height: normal">检查加载网页所需的时间，或者检查网页是否包含中断链接</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">文本/ 文本区域检查点</td>
            <td style="line-height: normal">检查文本字符串是否显示在网页或应用程序窗口中的适当位置</td>
            <td style="line-height: normal">检查预期的文本字符串是否显示在网页或对话框上的预期位置</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">位图检查点</td>
            <td style="line-height: normal">将网页或应用程序的某个区域捕获为位图后对其进行检查</td>
            <td style="line-height: normal">检查网页或网页的任何部分是否能按预期显示</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20"><a style="color: #000000; line-height: normal; text-decoration: none" target="_self"><span style="line-height: normal; text-decoration: underline"><strong style="line-height: normal">数据库</strong></span></a>检查点</td>
            <td style="line-height: normal">检查应用程序或网站所访问的数据库内容</td>
            <td style="line-height: normal">检查数据库查询中的值是否正确</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">可访问性检查点</td>
            <td style="line-height: normal">对网站区域进行识别，以检查是否符合508部分</td>
            <td style="line-height: normal">检查网页上的图像是否包含ALT属性（该属性是W3C Web内容可访问性规则所要求的）</td>
        </tr>
        <tr style="line-height: normal">
            <td style="line-height: normal" height="20">XML检查点</td>
            <td style="line-height: normal">检查XML文档的数据内容</td>
            <td style="line-height: normal">注意：XML文件检查点用于检查特定的XML文件；XML应用程序检查点用于检查网页中的XML文档</td>
        </tr>
    </tbody>
</table>
</span></span><br class="Apple-interchange-newline" />

<p>&nbsp;</p>
<p style="margin: 10px 0px; line-height: 1.8em! important">　<span style="font-size: 12pt">LR中运行QTP脚本</span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　1、运行准备：</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　1）勾选QTP的Tools--Options--Run的"Alow other Mercury products to run tests and components"</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　2）录制需要在lr中运行的QTP脚本，并且在QTP脚本中设置事务，Services.StartTransaction "start"与Services.EndTransaction "start"</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　2、运行QTP脚本</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　在LR中运行时选择QTP脚本，为QTP脚本存放目录下文件扩展名为.usr的文件。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　注：LR中运行QTP脚本时，只能有一个Vuser,否则将报错：</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　The load generator is currently running the maximum number of Vusers of this type</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　3、可能报错：</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　1）如果LR运行时报"LR没有相关的license"错，可以在LR里增加一个1000个的global license，注册号码为：AEACFSJI-YASEKJJKEAHJD-BCLBR</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　2）运行测试时，需要先将QTP关闭；</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　3）LR执行大于1个以上的虚拟用户时会提示：The load generator is currently running the maximum number of Vusers of this type，</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　所以，QTP脚本在LR中运行一台计算机只能运行一个GUI Vuser，如果要同时运行多个用户，可以QTP脚本里设置循环，循环可通过QTP的datatable设置需要运行的用户，或是在QTP里通过FOR，NEXT语句来设置次数。或是在controller里同时开启多个相同的脚本，然后分散在不同的电脑上运行，注意：各终端一定要开启LR的LR Agent Process及QTP的TOOS-Remote Agent代理服务。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　注1：设计供LR运行的测试用例应遵守以下规则：</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　LR不能运行嵌套操循环；</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　请勿包括对外部操作或其他外部资源（如外部数据表文件，环境变量文件，共享对象库等）的引用。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　注2：设计供业务流程监视器使用的测试时，应遵守以下规则：</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　对应的StartTransaction和EndTransaction语句必然包含在同一个操作内。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　业务流程监视器不使用QTP的setting-run中的循环设置，而是使用数据表中文件中的行数。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　注3：在LR的controll中，Run-time Settings中只有常规类别与子类别有效，回放选项不起任何作用。</span></span></span></p>
<p style="margin: 10px 0px; line-height: 1.8em! important"><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">　　如以下脚本：
<table style="border-right: #999999 1px solid; border-top: #999999 1px solid; font-size: 12px; border-left: #999999 1px solid; width: 548px; line-height: normal; border-bottom: #999999 1px solid; background-color: #dddddd" align="center" border="0">
    <tbody style="line-height: normal">
        <tr style="line-height: normal">
            <td style="line-height: normal">Services.StartTransaction "start"<br style="line-height: normal" />
            For i=1 To DataTable.GetSheet(dtLocalSheet).GetRowCount<span class="Apple-converted-space">&nbsp;</span><br style="line-height: normal" />
            Window("Tencent Traveler").WinEdit("Edit").SetSelection 0,19<br style="line-height: normal" />
            Window("Tencent Traveler").WinEdit("Edit").Set "<a style="color: #000000; line-height: normal; text-decoration: none" href="http://www.diy.com/">www.diy.com</a>"<br style="line-height: normal" />
            Window("Tencent Traveler").WinEdit("Edit").Type micReturn<br style="line-height: normal" />
            Window("Window").Page("产品介绍-建站易").Link("模板仓库").Click<br style="line-height: normal" />
            Window("Window").Page("模板仓库-建站易").Link("在线帮助").Click<br style="line-height: normal" />
            Window("Window").Page("在线帮助-建站易").Link("关于我们").Click<br style="line-height: normal" />
            datatable.GetSheet("Action1").setnextrow<br style="line-height: normal" />
            &nbsp;Next<br style="line-height: normal" />
            &nbsp;Services.EndTransaction "start"</td>
        </tr>
    </tbody>
</table>
</span></span></span></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000; line-height: normal! important"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 12px; color: #333333; line-height: 21px; font-family: Arial, Helvetica, sans-serif; text-align: left">
<p style="margin: 10px 0px; line-height: 1.8em! important">&nbsp;</p>
</span></span></span>
<img src ="http://www.blogjava.net/joan/aggbug/320046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2010-05-04 14:48 <a href="http://www.blogjava.net/joan/articles/320046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR 常见问题（收藏）</title><link>http://www.blogjava.net/joan/articles/297914.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Mon, 12 Oct 2009 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/297914.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/297914.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/297914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/297914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/297914.html</trackback:ping><description><![CDATA[<p>1.LoadRunner录制脚本时为什么不弹出IE浏览器?</p>
<p>　　当一台主机上安装多个浏览器时，LoadRunner录制脚本经常遇到不能打开浏览器的情况，可以用下面的方法来解决。</p>
<p>　　启动浏览器，打开Internet选项对话框，切换到高级标签，去掉&#8220;启用第三方浏览器扩展(需要重启动)&#8221;的勾选，然后再次运行VuGen即可解决问题</p>
<p>　　提示：通常安装Firefox等浏览器后，都会勾选上面得选项，导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。</p>
<p>　　2.录制Web脚本时，生成的脚本中存在乱码该如何解决?</p>
<p>　　录制脚本前，打开录制选项配置对话框Record-Options，进入到Advanced标签，先勾选&#8220;Support charset&#8221;，然后选择中支持UTF-8。再次录制，就不会出现中文乱码问题了。</p>
<p>　　3.HTML-based script与URL-based script的脚本有什么区别?</p>
<p>　　使用&#8220;HTML-based script&#8221;的模式录制脚本，VuGen为用户的每个HTML操作生成单独的步骤，这种脚本看上去比较直观;使用&#8220;URL-based script&#8221;模式录制脚本时，VuGen可以捕获所有作为用户操作结果而发送到<a title="服务器" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">服务器</a>的HTTP请求，然后为用户的每个请求分别生成对应方法。</p>
<p>　　通常，基于浏览器的Web应用会使用&#8220;HTML-based script&#8221;模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与<a title="服务器" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">服务器</a>进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行<a title="通信" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">通信</a>的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS<a title="安全" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">安全</a>协议，这时使用&#8220;URL-based script&#8221;模式进行录制。</p>
<p>　　4.为什么脚本中添加了检查方法Web-find，但是脚本回放时却没有执行?</p>
<p>　　由于检查点功能会耗费一定的资源，因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能，必须修改运行时的配置Run-time Setting。</p>
<p>　　进入&#8220;Run-time Setting&#8221;对话框，依次进入&#8220;Internet Protocol&#8594;Preferences&#8221;，勾选Checks下的&#8220;Enable Image and text check&#8221;选项即可。</p>
<p>　　检查执行结果时推荐使用web_reg_find方法。</p>
<p>　　5.运行时的Pacing设置主要影响什么?</p>
<p>　　Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法：上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。</p>
<p>　　根据实际需要设置迭代即可。通常，没有时间间隔会产生更大的压力。</p>
<p>　　6.运行时设置Log标签中，如果没有勾选&#8220;Enable logging&#8221;，则手工消息可以发送吗?</p>
<p>　　Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选，虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。</p>
<p>　 　7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常，而回放时报出错误提示&#8220;Error：server returned an incorrectly formatted SOAP response&#8221;。这时说明原因引起的?</p>
<p>　　造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷：如果服务器的<a title="操作系统" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">操作系统</a>是中文的，VuGen会自动将WSDL文件的头改为，因此会有上面的错误提示。</p>
<p>　　解决方法：把&#8220;LR80WebservicesFPI_setup.exe&#8221;和&#8220;lrunner_web_sevices_path_1.exe&#8221;两个补丁打上即可解决。</p>
<p>　　8.VuGen支持Netscape的客户证书吗?</p>
<p>　 　不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书，然后将其导入到Internet Explorer中，并确保以相同的顺序导出和导入这些证书。而且，在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。</p>
<p>　　9.VuGen会修改录制浏览器中的代理服务器设置吗?</p>
<p>　　会修改。 在开始录制基于浏览器的Web Vuser脚本时，VuGen首先会启动指定的浏览器。然后，VuGen会指示浏览器访问VuGen代理服务器。为此，VuGen会修改录制浏览器上的代 理服务器设置。默认情况下，VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后，VuGen会将原始代理服务器设置还原到该 录制浏览器中。因此，在VuGen进行录制的过程中，不可以更改代理服务器设置，否则将无法正常进行。</p>
<p>　　10.在LoadRunner脚本如何输出当前系统时间?</p>
<p>　　LoadRunner提供了char *ctime(const time_t *time)函数，调用参数为一个Long型的整数指针，用于存放返回时间的数值表示。</p>
<p>　　调用语句与返回值如下示例：</p>
<p>　　typedef long time_t;</p>
<p>　　Action()</p>
<p>　　{</p>
<p>　　time_t t;</p>
<p>　　lr_message(&#8220;Time in seconds since 1/1/70: %ld\n&#8221;,time(&amp;t));</p>
<p>　　lr_message(&#8220;System time and date: %s&#8221;,ctime(&amp;t));</p>
<p>　　}</p>
<p>　　输出结果为：</p>
<p>　　Time in seconds since 1/1/70: 1185329968</p>
<p>　　System time and date:Wed Jul 25 10:19:28 2007</p>
<p>　　11.一些Web虚拟用户脚本录制后立刻回放没有任何问题，但是当设置迭代次数大于1时，如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?</p>
<p>　 　这种现象多是由于在&#8220;Run-time Setting&#8221;的&#8220;Browse Emulation&#8221;的设置中，勾选了&#8220;Simulate a new user on each iteration&#8221;及其下面的选项&#8220;Clear cache on each iteration&#8221;这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。由于脚本迭代时，init和end只能执行一次，如果每次迭代 都模拟一个新的用户并清除缓存，则用户登录信息将一并清除，因此迭代时可能会发生错误。</p>
<p>　　12.虚拟客户脚本&#8220;Run-time Setting&#8221;中的线程和进程运行方式的区别?</p>
<p>　 　如果选择&#8220;Run Vuser as a process&#8221;，则场景运行时会为每一个虚拟用户创建一个进程;选择&#8220;Run Vuser as a thread&#8221;则将每个虚拟用户作为一个线程来运行，在任务管理器中只看到一个mmdrv.exe，这种方式的运行效率更高，能造成更大的压力，时默认选 项。</p>
<p>　　另外，如果启用了IP欺骗功能，则先在Controller中选中Tools菜单下的&#8220;Expert Mode&#8221;，然后将Tools菜单下的&#8220;Options&gt;General&#8221;标签页中的IP地址分配方式也设置为与Vuser运行方式一致，同为线程或进程方式。</p>
<p>　　13.在Controller中运行Web相关测试场景时，经常会有很多超时错误提示，如何处理这类问题?</p>
<p>　　这主要有脚本的默认超时设置引起。当回放Web脚本时，有时候由于服务器响应时间较长，会产生超时的错误。这时需要修改脚本的运行时配置。</p>
<p>　　进入&#8220;Run-time Setting&#8221;对话框后，依次进入&#8220;Internet Protocol&#8594;Preference&#8221;。然后点击&#8220;Options&#8230;&#8221;按钮，进入高级设置对话框，可以修改各类超时设置的默认值。</p>
<p>　　14.为什么Windows系统中的<a title="CPU" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">CPU</a>、<a title="内存" href="http://bangpai.taobao.com/group/thread/186587-1443714.htm#" target="_blank">内存</a>等资源仍然充足，但是模拟的用户数量却上不去?</p>
<p>　 　在Windows计算机的标准设置下，操作系统的默认限制只能使用几百个Vuser，这个限制与CPU或内存无关，主要是操作系统本身规定了默认的最大 线程数所导致。要想突破Windows这个限制，须修改Windows注册表。以Windows XP Professional为例。</p>
<p>　　(1)打开注册表后，进入注册表项HKEY_LOCAL_MACHINE中的下列关键字：System\CurrentControlSet\Control\Session Manager\SubSystems。</p>
<p>　　(2)找到Windows关键字，Windows关键字如下所示：</p>
<p>　　%SystemRoot%\system32\csrss.exe bjectDirectory=\Windows</p>
<p>　　SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1</p>
<p>　　ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2</p>
<p>　　ProfileControl=Off MaxRequestThreads=16</p>
<p>　　SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中，xxxx定义了系统范围堆的最大值(以KB为单位)，yyyy定义每个桌面堆得大小。</p>
<p>　　(3)将yyyy的设置从3072更改为8192(即8MB)，增加SharedSection参数值。</p>
<p>　　通过对注册表的更改，系统将允许运行更多的线程，因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制，而只受硬件和内部可伸缩性限制的约束。</p>
<img src ="http://www.blogjava.net/joan/aggbug/297914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-10-12 16:50 <a href="http://www.blogjava.net/joan/articles/297914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR在安装和卸载问题（转载）</title><link>http://www.blogjava.net/joan/articles/296429.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Fri, 25 Sep 2009 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/296429.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/296429.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/296429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/296429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/296429.html</trackback:ping><description><![CDATA[<h2 style="font-size: 10pt; color: #000000; font-family: Comic Sans MS">
<p>LR在安装和卸载问题</p>
<p>看到这个写的不错，先收藏下 <img alt="" src="/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absMiddle" border="0" /><br />
LR在安装和卸载问题上的一点总结 <br />
（一） 提示：" the link file .... may be corrupted or has illegated link string "的，提示重复多次均无法安装。 <br />
原因 ：你的 Loaderunner 的安装文件夹名写成中文了，造成 Lr 的安装教本无法识别路径，最终导致不断有这样的错误提示。 <br />
解决方案：把安装文件的目录名改为非中文就可以了。 <br />
（二）&nbsp; 没法完全卸载 <br />
要想把 LR 的老版本完全卸载，正确的步骤是： <br />
1.&nbsp; 停止所有的运行的 LR 的进程和服务（ including the Controller, VuGen, Analysis ， or the LoadRunner Agent Process/Service ） <br />
2.&nbsp; 备份已有的脚本，你的脚本有可能在你的默认安装路径下 <br />
3.&nbsp; 在控制面板的添加删除程序中，删除 LR ，并重启机器 <br />
4.&nbsp; 手动删除所有 LR 的文件夹，包括您的开始菜单里的 LR 快捷方式 <br />
5.&nbsp; 如果你的版本是 6.0 系列的，删除 Borland 文件夹（通常在 C:\Borland or C:\BDE&nbsp; 目录下） <br />
6.&nbsp; 搜索&nbsp;&nbsp;&nbsp; wlrun.* 、&nbsp;&nbsp;&nbsp; vugen.* ，除了安装文件夹中的文件，其他的都删除 <br />
7.&nbsp; 打开注册表，找到 <br />
如果只安装了 MI 公司的 LoadRunner 这一个产品，请删除： <br />
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive <br />
HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive <br />
否则请删除： <br />
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive\LoadRunner <br />
HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive\LoadRunner <br />
删除所有和 LR 有关的数值，除了你的 License2 或 License。 <br />
8.&nbsp; 清空回收站 <br />
实现以上步骤后，即可放心安装了，切记在重装后，一定要重启机器，因为一些必要信息要写入注册表。 <br />
(三)&nbsp; 卸载后 , 执行安装过程时出现" license security violation.Operation is not allowed "提示信息 , 安装失败 <br />
解决方案： <br />
1.&nbsp; 进入一台 Loadrunner 运行正常的电脑（安装路径要和你的相同）进入注册表，导出以下两个目录： <br />
HKEY_CURRENT_USER\Software\Mercury Interactive <br />
HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive <br />
2.&nbsp; 回到刚才安装不成功的电脑 , 进入注册表导入刚才这两个文件。 <br />
3.&nbsp; 再次执行安装。 <br />
建议：如果有用 Ghost 提前做 Ghost，或者为系统设置还原点。</p>
</h2>
<img src ="http://www.blogjava.net/joan/aggbug/296429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-09-25 15:31 <a href="http://www.blogjava.net/joan/articles/296429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用LR 监控Tomcat </title><link>http://www.blogjava.net/joan/articles/295020.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Mon, 14 Sep 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/295020.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/295020.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/295020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/295020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/295020.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS">loadrunner监控tomcat：<br />
<br />
第一种：<br />
LR本身是不支持的！有两种方式可以集成！<br />
1、自己写一个批处理程序去取tomcat的数据<br />
2、使用sitescope去执行这个批处理，然后采集数据<br />
3、使用LR与sitescope集成，然后读取数据<br />
<br />
第二种：<br />
1、通过LR去访问tomcat监控页<br />
2、然后通过关联取监控数据<br />
3、使用lr_user_data_point（）添加数据到图表中去<br />
<br />
这里用第二种具体解决方案如下：(监控tomcat服务器：<a href="http://127.0.0.1">http://127.0.0.1</a>)<br />
<br />
1、打开Tomcat的status页面，方法为编辑Tomcat的conf目录下的tomcat-users.xml文件，在文件中添加<br />
&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;tomcat-users&gt;<br />
&nbsp;&nbsp;&lt;role rolename="manager"/&gt;<br />
&nbsp;&nbsp;&lt;role rolename="admin"/&gt;<br />
&nbsp;&nbsp;&lt;user username="admin" password="" roles="admin,manager"/&gt;<br />
&lt;/tomcat-users&gt;<br />
<br />
<br />
2. LR 脚本<br />
-------------------------------------------<br />
</span></p>
<p><span style="font-family: Comic Sans MS">#include "web_api.h"<br />
#include "lrw_custom_body.h"</span></p>
<p><span style="color: red; font-family: Comic Sans MS">double atof (const char *string);&nbsp; <span style="font-family: Comic Sans MS"><span style="color: red; font-family: ">// 转格式，因为atof函数转换成double时数值都变了样<br />
</span></span></span><span style="font-family: Comic Sans MS">vuser_init(){<br />
return 0;</span></p>
<p><span style="font-family: Comic Sans MS">}<br />
<br />
Action6()<br />
{<br />
&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">//定义tomcat内存使用情况的监视器事务；</span></p>
<p><span style="font-family: Comic Sans MS">lr_start_transaction("monitor tomcat");&nbsp; </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">//保存3个参数；</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;web_reg_save_param("JVMFreeMemory",&nbsp;&nbsp; </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "LB=Free memory: ",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "RB= MB",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "Ord=1",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; LAST);&nbsp; </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; web_reg_save_param("JVMTotalMemory",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; "LB=Total memory: ",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; "RB= MB",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; "Ord=1",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; LAST);</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; web_reg_save_param("JVMMaxMemory",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "LB=Max memory: ",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "RB= MB",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp; "Ord=1",</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; LAST);</span></p>
<p><span style="font-family: Comic Sans MS">//通过LR去访问tomcat监控页</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp; web_set_user("admin","","127.0.0.1:8091");</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp; web_url("status", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "URL=http://127.0.0.1:8091/manager/status", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Resource=0", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "RecContentType=text/html", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Referer=", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Snapshot=t1.inf", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Mode=HTTP", </span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; LAST);</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; lr_end_transaction("monitor tomcat", LR_AUTO);</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;</span></p>
<p><span style="font-family: Comic Sans MS">// Tomcat JVM metrics&nbsp; 使用lr_user_data_point（）添加数据到图表中去</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; lr_user_data_point("Tomcat JVM Free memory", atof(lr_eval_string("{JVMFreeMemory}")));</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; lr_user_data_point("Tomcat JVM Total memory", atof(lr_eval_string("{JVMTotalMemory}")));</span></p>
<p><span style="font-family: Comic Sans MS">&nbsp;&nbsp;&nbsp; lr_user_data_point("Tomcat JVM Max memory", atof(lr_eval_string("{JVMMaxMemory}")));</span></p>
<p><br />
<span style="font-family: Comic Sans MS">&nbsp;return 0;</span></p>
<p><span style="font-family: Comic Sans MS">}<br />
<br />
<br />
<span style="color: red"><span style="color: red">运行日志可以看到监控到的tomcat 数据值</span></span><br />
-----------------------------------------<br />
<br />
虚拟用户脚本已启动<br />
正在开始操作 vuser_init。<br />
Web Turbo 重播 LoadRunner 8.1.0 for WINXP; Web 内部版本 4788&nbsp; &nbsp;[MsgId: MMSG-27143]<br />
运行时设置文件: "C:\Documents and Settings\joan\桌面\lr TEST\test20090907\\default.cfg"&nbsp; &nbsp;[MsgId: MMSG-27141]<br />
正在结束操作 vuser_init。<br />
正在运行 Vuser...<br />
正在开始迭代 1。<br />
正在开始操作 Action6。<br />
Action6.c(7): 通知: Transaction "monitor tomcat" started.<br />
Action6.c(13): 注册 web_reg_save_param 成功&nbsp; &nbsp;[MsgId: MMSG-26390]<br />
Action6.c(23): 注册 web_reg_save_param 成功&nbsp; &nbsp;[MsgId: MMSG-26390]<br />
Action6.c(35): 注册 web_reg_save_param 成功&nbsp; &nbsp;[MsgId: MMSG-26390]<br />
Action6.c(47): web_set_user 成功&nbsp; &nbsp;[MsgId: MMSG-26392]<br />
Action6.c(51): web_url("status") 已成功，6503 个正文字节，493 个标头字节，12 个成块开销字节&nbsp; &nbsp;[MsgId: MMSG-26385]<br />
Action6.c(69): 通知: Transaction "monitor tomcat" ended with "Pass" status (Duration: 0.2604 Wasted Time: 0.0001).<br />
<span style="color: red">Action6.c(75): 通知: Data Point "Tomcat JVM Free memory" value = 15.2500.<br />
Action6.c(77): 通知: Data Point "Tomcat JVM Total memory" value = 36.3300.<br />
Action6.c(79): 通知: Data Point "Tomcat JVM Max memory" value = 63.5600.</span><br />
正在结束操作 Action6。<br />
正在结束迭代 1。<br />
正在结束 Vuser...<br />
正在开始操作 vuser_end。<br />
正在结束操作 vuser_end。<br />
Vuser 已终止。<br />
<br />
</span></p>
 <img src ="http://www.blogjava.net/joan/aggbug/295020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-09-14 14:46 <a href="http://www.blogjava.net/joan/articles/295020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR中常用的C函数</title><link>http://www.blogjava.net/joan/articles/294248.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Tue, 08 Sep 2009 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/294248.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/294248.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/294248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/294248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/294248.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>LR中常用的C函数<br />
</p>
<p><br />
注意：<br />
将字符串中的数字转换为浮点数的函数，如果不事先声明，则转换有问题。<br />
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat</p>
<p>char *strcat ( char *to, const char *from ); </p>
<p>功能：链接两个字符串。</p>
<p>例子：</p>
<p>这个例子是用strcat链接字符串：zee和slo@hotmail.co</p>
<p>脚本如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; char test[1024], *a = "slo@hotmail.com";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; strcpy(test, "zee");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; strcat(test, a);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("We can see %s",test);</p>
<p><br />
运行后在executon　log中看到如下语句：</p>
<p>Starting action Action.<br />
Action.c(16): We can see zeeslo@hotmail.com</p>
<p>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strchr<br />
char *strchr ( const char *string, int c );</p>
<p>功能：返回字符串中指定字符后面的字符串。</p>
<p>例子：</p>
<p>这个例子是返回第一个出现e字符以后所有的字符，和最后一次出现e字符以后所有的字符。</p>
<p>脚本如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; char *string = "Zee is a tester";<br />
&nbsp;&nbsp;&nbsp;&nbsp; char *first_e, *last_e;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; first_e = (char *)strchr(string, 'e');<br />
&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("We can see the first occurrence of e: %s",first_e);<br />
&nbsp;&nbsp;&nbsp;&nbsp; last_e = (char *)strrchr(string, 'e');<br />
&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("We can see the last occurrence of e: %s", last_e);</p>
<p>运行后在executon　log中看到如下语句：<br />
Starting action Action.<br />
Action.c(12): We can see the first occurrence of e: ee is a tester<br />
Action.c(14): We can see the last occurrence of e: er<br />
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Strcmp＆stricmp<br />
int strcmp ( constchar *string1, const char *string2 );大小写敏感。<br />
int stricmp ( const char *string1, const char *string2 );大小写不敏感。</p>
<p>功能：比较字符串。</p>
<p>例子：</p>
<p>按是否区分大小写对比两个字符串，并打印出它们的大小关系。</p>
<p>脚本如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; int result;<br />
&nbsp;&nbsp;&nbsp;&nbsp; char tmp[20];<br />
&nbsp;&nbsp;&nbsp;&nbsp; char string1[] = "We can see the string:ZEE";<br />
&nbsp;&nbsp;&nbsp;&nbsp; char string2[] = "We can see the string:zee";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; result = strcmp( string1, string2 ); /*区分大小写，比较字符串 */</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if( result &gt; 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "大于" );<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if( result &lt; 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "小于" );<br />
&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "等于" );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message( "strcmp: String 1 %s string 2", tmp );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; result = stricmp( string1, string2 ); /* 不区分大小写，比较字符串 */ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if( result &gt; 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "大于" );<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if( result &lt; 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "小于" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( tmp, "等于" );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message( "stricmp: String 1 %s string 2", tmp );&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>运行后在executon　log中看到如下语句：<br />
Starting action Action.<br />
Action.c(22): strcmp: String 1 小于 string 2<br />
Action.c(33): stricmp: String 1 等于 string 2<br />
&nbsp;&nbsp; <br />
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy<br />
char *strcpy ( char *dest, const char *source );</p>
<p>功能：复制一个字符串到另一个字符串中。</p>
<p>例子：</p>
<p>复制一个字符串到字符数组中，并打印出来。</p>
<p>脚本如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; char test[1024];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; strcpy(test, "what can we see?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("%s", test);</p>
<p>运行后在executon　log中看到如下语句：<br />
Starting action Action.<br />
Action.c(10): what can we see?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Strdup&amp; strlwr<br />
char *strdup ( const char *string );</p>
<p>复制一个字符串。</p>
<p>char *strlwr ( char *string );</p>
<p>转换成小写字母。</p>
<p>例子：</p>
<p>在这个例子中，Vuser的组名被转换为小写字母。但是lr_whoami把组名作为静态buffer返回。这样的buffer不能被操作。如果有操作需要，就复制这个静态buffer。</p>
<p>脚本如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; int id;<br />
&nbsp;&nbsp;&nbsp;&nbsp; char *groupname_static, *groupname;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; /* 从VuGen中得到组名 */<br />
&nbsp;&nbsp;&nbsp;&nbsp; lr_whoami(&amp;id, &amp;groupname_static, NULL);<br />
&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("groupname=%s", groupname_static);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; /*复制这个静态组名以便我们可以操作它 */<br />
&nbsp;&nbsp;&nbsp;&nbsp; groupname = (char *)strdup(groupname_static);<br />
&nbsp;&nbsp;&nbsp;&nbsp; groupname = (char *)strlwr(groupname);<br />
&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("lower case groupname=%s", groupname);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; free(groupname);<br />
上述脚本用vugen保存为：CHANGE</p>
<p>在controller中运行（设置为总是发送消息）<br />
运行后在log中看到如下语句：<br />
Starting action Action.&nbsp;&nbsp;&nbsp; [MsgId: MMSG-15919]<br />
Action.c(11): groupname=CHANGE&nbsp;&nbsp;&nbsp;&nbsp; [MsgId: MMSG-17999]<br />
Action.c(16): lower case groupname=change&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [MsgId: MMSG-17999]<br />
6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Strlen<br />
size_t strlen ( constchar *string );</p>
<p>功能：返回字符串长度（bytes）.</p>
<p>例子：</p>
<p>这个例子很简单，就是得到一个字符串中的字符的个数。然后打印出来。</p>
<p>脚本如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; char *str = "Zee is a tester";<br />
&nbsp;&nbsp;&nbsp;&nbsp; unsigned int len;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; len = strlen(str);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("The sentence has %d letters",len);</p>
<p>运行后在log中看到如下语句：<br />
Action.c(13): The sentence has 15 letters<br />
7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Strncat<br />
char *strncat ( char *to_string, const char *from_string, size_t n );</p>
<p>把一个字符串连接到另一个字符串后面。</p>
<p>例子：</p>
<p>在这里，我随便写了两个字符串，用此函数把他们连接起来，并打印出来。</p>
<p>脚本如下：</p>
<p><br />
&nbsp;&nbsp; char str1[]="Zee is ";<br />
&nbsp;&nbsp;&nbsp; char str2[]="a tester.";<br />
&nbsp;&nbsp;&nbsp; lr_output_message("What can we see?");<br />
&nbsp;&nbsp;&nbsp; lr_output_message("The str1 is %s.",str1);</p>
<p>&nbsp;&nbsp;&nbsp; strncat(str1,str2,20);<br />
lr_output_message("The str1 is %s.",str1);</p>
<p><br />
运行后在log中看到如下语句：<br />
Action.c(9): What can we see?<br />
Action.c(10): The str1 is Zee is .<br />
Action.c(13): The str1 is Zee is a tester..<br />
注：我们可以看到，没有连接前的str1是：Zee is，连接后的字符串是：Zee is a tester。也可以看看strcat函数。<br />
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strncmp<br />
int strncmp ( constchar *string1, const char *string2, size_t n );</p>
<p>对比两个字符串的前n位。</p>
<p>例子：</p>
<p>对比两个字符串，并把对比结果打印出来。这里我和上面的strcmp一起写。</p>
<p>脚本如下：</p>
<p>&nbsp;&nbsp;&nbsp; char result;<br />
&nbsp;&nbsp;&nbsp; char str1[]="Zee is a tester.";<br />
&nbsp;&nbsp;&nbsp; char str2[]="Zee is a tester.";<br />
&nbsp;&nbsp;&nbsp; char str3[]="zee is a tester?";<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; result = strcmp(str1,str2);</p>
<p>&nbsp;&nbsp;&nbsp; if(result &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is greater than str2.");<br />
&nbsp;&nbsp;&nbsp; else if(result &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is less than str2.");<br />
&nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is equal to str2.");<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; result = strncmp( str1, str3 , 30);</p>
<p><br />
&nbsp;&nbsp;&nbsp; if(result &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is greater than str3.");<br />
&nbsp;&nbsp;&nbsp; else if(result &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is less than str3.");<br />
&nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_output_message("str1 is equal to str3.");</p>
<p>运行后在log中看到如下语句：<br />
Starting iteration 1.<br />
Starting action Action.<br />
Action.c(18): str1 is equal to str2.<br />
Action.c(28): str1 is less than str3. <br />
</p>
  <img src ="http://www.blogjava.net/joan/aggbug/294248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-09-08 09:28 <a href="http://www.blogjava.net/joan/articles/294248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR 报错误: C interpreter run time error: Error -- Unresolved symbol : Action. </title><link>http://www.blogjava.net/joan/articles/293886.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Fri, 04 Sep 2009 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/293886.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/293886.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/293886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/293886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/293886.html</trackback:ping><description><![CDATA[<p style="font-family: Comic Sans MS" align="justify">虚拟用户脚本已启动正在开始操作 vuser_init。正在结束操作 vuser_init。<br />
正在运行 Vuser... 正在开始迭代 1。<br />
正在开始操作 Action。<span style="color: #ff0000">错误: C interpreter run time error: Error -- Unresolved symbol : Action. </span><br />
正在结束 Vuser... 正在开始操作 vuser_end。<br />
正在结束操作 vuser_end。 Vuser 已终止。 <br />
<br />
解决方法：<br />
<br />
<br />
晕，<span style="color: #000000; font-family: Comic Sans MS">VuGen名称和脚本中的函数名称不对应</span> <img src="/CuteSoft_Client/CuteEditor/images/emdgust.gif" align="absMiddle" border="0"  alt="" /><br />
<br />
更改后，VUG 的脚本运行成功 ^ ^ <br />
<br />
虚拟用户脚本已启动<br />
正在开始操作 vuser_init。<br />
正在结束操作 vuser_init。<br />
正在运行 Vuser...<br />
正在开始迭代 1。<br />
正在开始操作 Action。<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 10253<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 8766<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 30926<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 4386<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 29132<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 6608<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 12016<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 18041<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 16336<br />
Action.c(11): &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Random Number: 1504<br />
正在结束操作 Action。<br />
正在结束迭代 1。<br />
正在结束 Vuser...<br />
正在开始操作 vuser_end。<br />
正在结束操作 vuser_end。<br />
Vuser 已终止。</p>
<img src ="http://www.blogjava.net/joan/aggbug/293886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-09-04 14:58 <a href="http://www.blogjava.net/joan/articles/293886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本录制的参数(Options)的配置详解说明 - loadrunner 8 负载测试、性能测试(Load Test)</title><link>http://www.blogjava.net/joan/articles/269572.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Fri, 08 May 2009 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/269572.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/269572.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/269572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/269572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/269572.html</trackback:ping><description><![CDATA[<strong>1 选择录制的方式(Recording Level)</strong> <br />
两个方式的区别，请参考另一个专题 <a href="http://www.java2000.net/p12413" target="_blank">http://www.java2000.net/p12413</a>&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2038" target="_blank"></a><img height="527" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled.jpg" width="730" border="0" /><br />
<br />
<br />
<strong><br />
2 选择浏览器(Browser)</strong> <br />
系统只支持IE浏览器，Firefox不支持，如果你安装有多个浏览器，且默认的不是IE,需要手工指定&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2039" target="_blank"></a><img height="527" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled2.jpg" width="730" border="0" /> <br />
<br />
<br />
<br />
<strong>3 设置代理方式</strong>（Recording Proxy)&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2040" target="_blank"></a><img alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled3.jpg" border="0" /> <br />
<br />
<br />
<br />
<strong>4 高级配置(Advanced)</strong> <br />
是否录制思考时间，已经思考时间的最低值，低于这个值的思考时间不录制 <br />
是否每个活动都重置上下文 <br />
完整的录制日志 <br />
在本地保存快照资源，性能会好 <br />
是否自动为每个页面的标题(Title)添加web_reg_find 方法 <br />
是否为每个大于400的异常自动填写注释 <br />
系统支持的字符集，如果设置错误，录制的脚本是乱码。&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2041" target="_blank"></a><img alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled4.jpg" border="0" /> <br />
<br />
<br />
<strong>4.1 文件头信息的录制</strong>(Headers)&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2042" target="_blank"></a><img height="316" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled5.jpg" width="404" border="0" /> <br />
<br />
<br />
<strong>4.2 文件类型的过滤</strong>(Content Type)&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2043" target="_blank"></a><img height="290" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled6.jpg" width="404" border="0" /> <br />
<br />
<br />
<strong>4.3 文件类型的过滤</strong>&nbsp;<br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2044" target="_blank"></a><img height="290" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled7.jpg" width="404" border="0" /> <br />
<br />
<br />
<strong>5 高级资源的配置，现成的应用</strong>&nbsp;<br />
<strong><img height="527" alt="" src="http://www.blogjava.net/images/blogjava_net/joan/untitled8.jpg" width="730" border="0" /></strong><br />
<a title="点击在新窗口打开此图片" href="http://www.java2000.net/redirectImage.jsp?id=2045" target="_blank"></a>&nbsp; 
<img src ="http://www.blogjava.net/joan/aggbug/269572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2009-05-08 11:39 <a href="http://www.blogjava.net/joan/articles/269572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LoadRunner录制脚本时提示默认浏览器不支持解决方法 </title><link>http://www.blogjava.net/joan/articles/239690.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Mon, 10 Nov 2008 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/239690.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/239690.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/239690.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/239690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/239690.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: LoadRunner录制脚本时提示默认浏览器不支持解决方法<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/joan/articles/239690.html'>阅读全文</a><img src ="http://www.blogjava.net/joan/aggbug/239690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2008-11-10 16:10 <a href="http://www.blogjava.net/joan/articles/239690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR function</title><link>http://www.blogjava.net/joan/articles/222369.html</link><dc:creator>joan</dc:creator><author>joan</author><pubDate>Fri, 15 Aug 2008 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/joan/articles/222369.html</guid><wfw:comment>http://www.blogjava.net/joan/comments/222369.html</wfw:comment><comments>http://www.blogjava.net/joan/articles/222369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/joan/comments/commentRss/222369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/joan/services/trackbacks/222369.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p style="text-indent: 2em">LR常用函数</p>
<p style="text-indent: 2em">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Intweb_reg_save_param("参数名","LB=左边界","RB=右边界",LAST);/注册函数，在参数值出现的前面使用，注册成功时返回值为0，注册失败时返回值为1。左右边界需根据TreeView里相关步骤的SeverResponse代码来确定。用以上函数能获取第一个符合条件的数值。</p>
<p style="text-indent: 2em">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; web_reg_save_param("参数名&#8221;,"LB=左边界&#8221;,"RB=右边界","Ord=All",LAST);/当参数有多个值时，加上"Ord=All&#8221;后可获取所有的数值。注册成功后，{参数名_count}表示取得的数值个数，{参数名_1}为第一个数值，{参数名_2}为第二个数值。</p>
<p style="text-indent: 2em">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_save_string(&#8220;字符串变量&#8221;,"参数名")/将字符变量里的值传递给指定参数。通过该函数来改变DataFile类型参数的数值。</p>
<p style="text-indent: 2em">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lr_eval_string("{参数名}")/取得参数的数值。可取得已注册参数或DataFile类型参数的数值。eval就是evaluation（估价, 评价, 赋值）的缩写。</p>
<p style="text-indent: 2em">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sprintf(char * string , const char*format_string[,args]);/字符串赋值函数</p>
<p style="text-indent: 2em">Action()</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">int index=56;</p>
<p style="text-indent: 2em">charfilename[64],*suffix="txt";</p>
<p style="text-indent: 2em">sprintf(filename,"log_%d.%s",index,suffix);</p>
<p style="text-indent: 2em">lr_output_message("Thenewfilenameis%s",filename);</p>
<p style="text-indent: 2em">return 0;</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">Output：Thenewfilenameislog_56.txt</p>
<p style="text-indent: 2em">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char*strcat(char*to,constchar*from);/将一字符串追加到另一字符串后面</p>
<p style="text-indent: 2em">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; web_find("find_time","What=2006-03-0118:21:16.882",LAST);/增加检查点,检查&#8220;2006-03-0118:21:16.882&#8221;这个字符串是否出现在当前页面上。find_time为自己任意输入的检查点名称。</p>
<p style="text-indent: 2em">8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事务函数</p>
<p style="text-indent: 2em">lr_end_sub_transaction/标记子事务的结束以便进行性能分析</p>
<p style="text-indent: 2em">lr_end_transaction/标记LoadRunner事务的结束</p>
<p style="text-indent: 2em">lr_end_transaction_instance/标记事务实例的结束以便进行性能分析</p>
<p style="text-indent: 2em">lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并发送错误消息</p>
<p style="text-indent: 2em">lr_get_trans_instance_duration/获取事务实例的持续时间（由它的句柄指定）</p>
<p style="text-indent: 2em">lr_get_trans_instance_wasted_time/获取事务实例浪费的时间（由它的句柄指定）</p>
<p style="text-indent: 2em">lr_get_transaction_duration/获取事务的持续时间（按事务的名称）</p>
<p style="text-indent: 2em">lr_get_transaction_think_time/获取事务的思考时间（按事务的名称）</p>
<p style="text-indent: 2em">lr_get_transaction_wasted_time/获取事务浪费的时间（按事务的名称）</p>
<p style="text-indent: 2em">lr_resume_transaction/继续收集事务数据以便进行性能分析</p>
<p style="text-indent: 2em">lr_resume_transaction_instance/继续收集事务实例数据以便进行性能分析</p>
<p style="text-indent: 2em">lr_set_transaction_instance_status/设置事务实例的状态</p>
<p style="text-indent: 2em">lr_set_transaction_status/设置打开事务的状态</p>
<p style="text-indent: 2em">lr_set_transaction_status_by_name/设置事务的状态</p>
<p style="text-indent: 2em">lr_start_sub_transaction/标记子事务的开始</p>
<p style="text-indent: 2em">lr_start_transaction/标记事务的开始</p>
<p style="text-indent: 2em">lr_start_transaction_instance/启动嵌套事务（由它的父事务的句柄指定）</p>
<p style="text-indent: 2em">lr_stop_transaction/停止事务数据的收集</p>
<p style="text-indent: 2em">lr_stop_transaction_instance/停止事务（由它的句柄指定）数据的收集</p>
<p style="text-indent: 2em">lr_wasted_time/消除所有打开事务浪费的时间</p>
<p style="text-indent: 2em">lr_end_sub_transaction/标记子事务的结束以便进行性能分析</p>
<p style="text-indent: 2em">r_end_transaction/标记LoadRunner事务的结束</p>
<p style="text-indent: 2em">lr_end_transaction_instance/标记事务实例的结束以便进行性能分析</p>
<p style="text-indent: 2em">lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并</p>
<p style="text-indent: 2em">9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令行分析函数</p>
<p style="text-indent: 2em">lr_get_attrib_double/检索脚本命令行中使用的double类型变量</p>
<p style="text-indent: 2em">lr_get_attrib_long/检索脚本命令行中使用的long类型变量</p>
<p style="text-indent: 2em">lr_get_attrib_string/检索脚本命令行中使用的字符串</p>
<p style="text-indent: 2em">10. 信息性函数</p>
<p style="text-indent: 2em">lr_user_data_point/记录用户定义的数据示例</p>
<p style="text-indent: 2em">lr_whoami/将有关Vuser脚本的信息返回给Vuser脚本</p>
<p style="text-indent: 2em">lr_get_host_name/返回执行Vuser脚本的主机名</p>
<p style="text-indent: 2em">lr_get_master_host_name/返回运行LoadRunnerController的计算机名</p>
<p style="text-indent: 2em">11. 字符串函数</p>
<p style="text-indent: 2em">lr_eval_string/用参数的当前值替换参数</p>
<p style="text-indent: 2em">lr_save_string/将以NULL结尾的字符串保存到参数中</p>
<p style="text-indent: 2em">lr_save_var/将变长字符串保存到参数中</p>
<p style="text-indent: 2em">lr_save_datetime/将当前日期和时间保存到参数中</p>
<p style="text-indent: 2em">lr_advance_param/前进到下一个可用参数</p>
<p style="text-indent: 2em">lr_decrypt/解密已编码的字符串</p>
<p style="text-indent: 2em">lr_eval_string_ext/检索指向包含参数数据的缓冲区的指针</p>
<p style="text-indent: 2em">lr_eval_string_ext_free/释放由lr_eval_string_ext分配的指针</p>
<p style="text-indent: 2em">lr_save_searched_string/在缓冲区中搜索字符串实例，并相对于该字符串实例，该缓冲区的一部分保存到参数中</p>
<p style="text-indent: 2em">12. 消息函数</p>
<p style="text-indent: 2em">lr_debug_message/将调试消息发送到输出窗口</p>
<p style="text-indent: 2em">lr_error_message/将错误消息发送到输出窗口</p>
<p style="text-indent: 2em">lr_get_debug_message/检索当前的消息类</p>
<p style="text-indent: 2em">lr_log_message/将输出消息直接发送到output.txt文件，此文件位于Vuser脚本目录中。该函数有助于防止输出消息干扰TCP/IP通信。</p>
<p style="text-indent: 2em">lr_output_message/将消息发送到输出窗口</p>
<p style="text-indent: 2em">lr_set_debug_message/为输出消息设置消息类</p>
<p style="text-indent: 2em">lr_vuser_status_message/生成格式化输出并将其打印到ControllerVuser状态区域。</p>
<p style="text-indent: 2em">lr_message/将消息发送到Vuser日志和输出窗口</p>
<p style="text-indent: 2em">13. 操作函数</p>
<p style="text-indent: 2em">web_custom_request允许您使用HTTP支持的任何方法来创建自定义HTTP请求</p>
<p style="text-indent: 2em">web_image在定义的图像上模拟鼠标单击</p>
<p style="text-indent: 2em">web_link在定义的文本链接上模拟鼠标单击</p>
<p style="text-indent: 2em">web_submit_data执行&#8220;无条件&#8221;或&#8220;无上下文&#8221;的表单</p>
<p style="text-indent: 2em">web_submit_form模拟表单的提交</p>
<p style="text-indent: 2em">web_url加载由&#8220;URL&#8221;属性指定的URL</p>
<p style="text-indent: 2em">14. 身份验证函数</p>
<p style="text-indent: 2em">身份验证函数web_set_certificate使Vuser使用在InternetExplorer注册表中列出的特定证书</p>
<p style="text-indent: 2em">身份验证函数web_set_certificate_ex指定证书和密钥文件的位置和格式信息</p>
<p style="text-indent: 2em">身份验证函数web_set_user指定Web服务器的登录字符串和密码，用于Web服务器上已验证用户身份的区域</p>
<p style="text-indent: 2em">15. 缓存函数</p>
<p style="text-indent: 2em">缓存函数web_cache_cleanup清除缓存模拟程序的内容</p>
<p style="text-indent: 2em">16. 检查函数</p>
<p style="text-indent: 2em">检查函数web_find在HTML页内搜索指定的文本字符串</p>
<p style="text-indent: 2em">检查函数web_global_verification在所有后面的HTTP请求中搜索文本字符串</p>
<p style="text-indent: 2em">检查函数web_image_check验证指定的图像是否存在于HTML页内</p>
<p style="text-indent: 2em">检查函数web_reg_find在后面的HTTP请求中注册对HTML源或原始缓冲区中文本字符串的搜索</p>
<p style="text-indent: 2em">17. 连接定义函数</p>
<p style="text-indent: 2em">连接定义函数web_disable_keep_alive禁用Keep-AliveHTTP连接</p>
<p style="text-indent: 2em">连接定义函数web_enable_keep_alive启用Keep-AliveHTTP连接</p>
<p style="text-indent: 2em">连接定义函数web_set_connections_limit设置Vuser在运行脚本时可以同时打开连接的最大数目</p>
<p style="text-indent: 2em">18. 并发组</p>
<p style="text-indent: 2em">web_concurrent_end标记并发组的结束</p>
<p style="text-indent: 2em">web_concurrent_start标记并发组的开始</p>
<p style="text-indent: 2em">19. cook函数</p>
<p style="text-indent: 2em">web_add_cookie添加新的Cookie或修改现有的Cookie</p>
<p style="text-indent: 2em">web_cleanup_cookies删除当前由Vuser存储的所有Cookie</p>
<p style="text-indent: 2em">web_remove_cookie删除指定的Cookie</p>
<p style="text-indent: 2em">20. 关联函数</p>
<p style="text-indent: 2em">web_create_html_param将HTML页上的动态信息保存到参数中。（LR6.5及更低版本）</p>
<p style="text-indent: 2em">web_create_html_param_ex基于包含在HTML页内的动态信息创建参数（使用嵌入边界）（LR6.5及更低版本）。</p>
<p style="text-indent: 2em">关联函数</p>
 <img src ="http://www.blogjava.net/joan/aggbug/222369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/joan/" target="_blank">joan</a> 2008-08-15 23:34 <a href="http://www.blogjava.net/joan/articles/222369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>