﻿<?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>IT博客-www.testage.net---软件测试---RedHat Linux测试环境搭建---MYLIFE-随笔分类-软件测试-loadrunner专栏</title><link>http://www.cnitblog.com/jakiegu/category/5079.html</link><description>测试时代的gufeng</description><language>zh-cn</language><lastBuildDate>Fri, 07 Oct 2011 02:12:17 GMT</lastBuildDate><pubDate>Fri, 07 Oct 2011 02:12:17 GMT</pubDate><ttl>60</ttl><item><title>性能测试-根据Loadrunner官方说明来解释Vu的进程与线程区别</title><link>http://www.cnitblog.com/jakiegu/archive/2009/06/11/59284.html</link><dc:creator>Test8848-谷峰</dc:creator><author>Test8848-谷峰</author><pubDate>Thu, 11 Jun 2009 07:52:00 GMT</pubDate><guid>http://www.cnitblog.com/jakiegu/archive/2009/06/11/59284.html</guid><wfw:comment>http://www.cnitblog.com/jakiegu/comments/59284.html</wfw:comment><comments>http://www.cnitblog.com/jakiegu/archive/2009/06/11/59284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jakiegu/comments/commentRss/59284.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jakiegu/services/trackbacks/59284.html</trackback:ping><description><![CDATA[在Loadrunner里面生成Vu的方式有2种，在&#8220;Runtime settings&#8221;里面有设置，具体看下图，如果选择Run Vuser as a
<p>thread表示Vu按照一个线程生成，如果选择 Run Vuser as a process，则Vu按照进程（非多线程）方式生成<br><img src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/6.11111111.PNG" border=0><br>&nbsp; </p>
<p><span>下面我对上述的话做一个简单的翻译：</span></p>
<p><span>Loadrunner</span><span>支持多线程环境，使用多线程的方法能使每台负载生成器运行更多的</span><span>VU</span><span>，但是只有支持线程安全的协议，才能使用</span><span>Loadrunner</span><span>的</span><span>VU</span><span>并发方式</span></p>
<p><span>下表列出哪些协议不能支持线程并发</span></p>
<p><span>Sybase-Dblib,Infomix,Tuxedo,and PeopleSoft-Tuxedo</span></p>
<p><span>当使用进程并发是，在任务管理器中有</span><span>mdrv.exe</span><span>的进程，比如下图，我以</span><span>10</span><span>个</span><span>VU</span><span>用户并发，就会在任务管理器中出现</span><span>10</span><span>个</span><span>mmdrv</span><span>进程</span></p>
<p><img src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/6.222222222222222222222.JPG" border=0><br><br></p>
<div title="Print Page Break" style="FONT-SIZE: 1px; PAGE-BREAK-BEFORE: always; VERTICAL-ALIGN: middle; HEIGHT: 1px; BACKGROUND-COLOR: #c0c0c0">&nbsp; </div>
<p>&nbsp; </p>
<p><span>如果以多线程方式并发，只会出现一个</span><span>mmdrv</span><span>进程，一个进程可以支持</span><span>50VU</span><span>的线程并发，</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Loadrunner</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的参考帮助还说明了，如果采用多线程方式并发，</span><span lang=EN-US>Load Generator</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将会比多进程支持更多的用户，具体的一个</span><span lang=EN-US>VU</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">占用内存的取值根据</span><span lang=EN-US>Loadrunner</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的版本不同而不同。</span></p>
<p></span><img height=134 src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/6.22222222.PNG" width=99 border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;Loadrunner8.1<br><img src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/6.3333333.PNG" border=0></p>
<p>Loadrunner9.0<br>&nbsp; <span>由于本人对操作系统底层的原理并不是特别懂，我知道如果一个</span><span>VU</span><span>从外部访问的话都会以一个进程的方式请求和分配系统的资源，当</span><span>VU</span><span>并模拟成了线程的方式，我不知道仿真度上面是否有区别，还请知道的人多多提出自己的意见。<br></p>
<div title="Print Page Break" style="FONT-SIZE: 1px; PAGE-BREAK-BEFORE: always; VERTICAL-ALIGN: middle; HEIGHT: 1px; BACKGROUND-COLOR: #c0c0c0">&nbsp; </div>
</span><a href="http://www.cnitblog.com/jakiegu/"><br>文章最后附上进程和线程的区别，摘自baidu<br>进程和线程的区别：<br>解释一：<br>&nbsp;
<p><span>线程是一种操作系统对象，代表着一个进程中要被执行的代码的路径。每一个</span><span>WIN32</span><span>应用程序至少有一个线程</span><span>--</span><span>通常称</span><span>为住线程或默认线程</span><span>--</span><span>但应用程序可以自由地创建其他线程来执行其他任务！</span></p>
<p><span>进程是程序的一次动态执行过程，它对应了从代码加载、执行到执行完毕的一个完整过程，这个过程也是进程本身从产</span><span>生、发展到消亡的过程</span><span>线程是比进程更小的执行单位。一个进程在其执行过程能够中，可以产生</span> <span>多个线程，形成多条执行线索。每条线索，</span><span>即每个线程也有它自身的产生、存在和消亡过程，也是一个动态的概念。</span><span>一个程序应该只有一个进程吧，但是可以拥有多个线程。</span></p>
<p><span>可以说，一个执文件被运行后，就可以称为是一个进程了。但是进程只是存在内存中，实际上他是不会做任何事情的。</span><span>这个时候，起作用的就是线程了。线程是程序的执行者，一个程序至少有一个线程，但是在多线程的操作系统中，可以</span><span>有一个以上的线程。</span></p>
<p>&nbsp;<span>其实我们可以把线程看成是我们排队买肯德鸡吃（循环的排队，一直排下去，知道我不想买了，退出）。每人都有机会</span><span>到达队伍的最前端去买东西，这个就好比是线程，都有机会被程序执行。但是线程真正起作用的时候，就是我们在队伍</span><span>的最前端买东西到东西买完后，这一段时间，这是线程真正执行的阶段。</span><br><br>解释二：<br><span>进程和线程都是由操作系统所体现的程序运行的基本单元，系统利用该基本单元实现系统对应用的并发性。<br></span><span>进程和线程的区别在于：</span></p>
<p><span>简而言之</span><span>,</span><span>一个程序至少有一个进程</span><span>,</span><span>一个进程至少有一个线程</span><span>.</span><span>线程的划分尺度小于进程，使得多线程程序的并发性高。</span><span>另外，进程在执行过程中拥有独立的内存单元，而多个线程共享内存，从而极大地提高了程序的运行效率。</span><span>线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出</span> <span>口。但是</span><span>线程不能够独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。</span><span>从逻辑角度来看，多线程的意义在于一个应用程序中，有多个执行部分可以同时执行。但操作系统并没有将多个线程看</span><span>做多个独立的应用，来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。</span><span>进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动</span><span>,</span><span>进程是系统进行资源分配和调度的一个独立单位</span><span>. </span><span>线程是进程的一个实体</span><span>,</span><span>是</span><span>CPU</span><span>调度和分派的基本单位</span><span>,</span><span>它是比进程更小的能独立运行的基本单位</span><span>.</span><span>线程自己基本上不拥有</span><span>系统资源</span><span>,</span><span>只拥有一点在运行中必不可少的资源</span><span>(</span><span>如程序计数器</span><span>,</span><span>一组寄存器和栈</span><span>),</span><span>但是它可与同属一个进程的其他的线</span><span>程共享进程所拥有的全部资源</span><span>. </span><span>一个线程可以创建和撤销另一个线程</span><span>;</span><span>同一个进程中的多个线程之间可以并发执行</span><span>.<br></span></p>
<p><br>关于进程安全<br>&nbsp; </p>
<p><span>如果你的代码所在的进程中有多个线程在同时运行，而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的，而且其他的变量的值也和预期的是一样的，就是线程安全的。</span><span>或者说</span><span>:</span><span>一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性</span><span>,</span><span>也就是说我们不用考虑同步的问题。</span><span>线程安全问题都是由全局变量及静态变量引起的。</span><span>若每个线程中对全局变量、静态变量只有读操作，而无写操作，一般来说，这个全局变量是线程安全的；若有多个线程同时执行写操作，一般都需要考虑线程同步，否则就可能影响线程安全。</span></p>
<p><span>举例：</span></p>
<p><span>　比如一个</span><span> ArrayList </span><span>类，在添加一个元素的时候，它可能会有两步来完成：</span><span>1. </span><span>在</span><span> Items[Size] </span><span>的位置存放此元素；</span><span>2. </span><span>增大</span><span> Size </span><span>的值。</span><span> </span></p>
<p><span>　　在单线程运行的情况下，如果</span><span> Size = 0</span><span>，添加一个元素后，此元素在位置</span><span> 0</span><span>，而且</span><span> Size=1</span><span>；</span><span> </span></p>
<p><span>　　而如果是在多线程情况下，比如有两个线程，线程</span><span> A </span><span>先将元素存放在位置</span><span> 0</span><span>。但是此时</span><span> CPU </span><span>调度线程</span><span>A</span><span>暂停，线程</span><span> B </span><span>得到运行的机会。线程</span><span>B</span><span>也向此</span><span> ArrayList </span><span>添加元素，因为此时</span><span> Size </span><span>仍然等于</span><span> 0 </span><span>（注意哦，我们假设的是添加一个元素是要两个步骤哦，而线程</span><span>A</span><span>仅仅完成了步骤</span><span>1</span><span>），所以线程</span><span>B</span><span>也将元素存放在位置</span><span>0</span><span>。然后线程</span><span>A</span><span>和线程</span><span>B</span><span>都继续运行，都增加</span><span> Size </span><span>的值。</span><span> </span></p>
<p><span>　　那好，现在我们来看看</span><span> ArrayList </span><span>的情况，元素实际上只有一个，存放在位置</span><span> 0</span><span>，而</span><span> Size </span><span>却等于</span><span> 2</span><span>。这就是&#8220;线程不安全&#8221;了。</span><br><br>test8848-谷峰</a></p>
<img src ="http://www.cnitblog.com/jakiegu/aggbug/59284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jakiegu/" target="_blank">Test8848-谷峰</a> 2009-06-11 15:52 <a href="http://www.cnitblog.com/jakiegu/archive/2009/06/11/59284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>参数化--LoadRunner中文版帮助和英文版帮助有一点出入，各位测试工程师注意了</title><link>http://www.cnitblog.com/jakiegu/archive/2008/12/15/52645.html</link><dc:creator>Test8848-谷峰</dc:creator><author>Test8848-谷峰</author><pubDate>Mon, 15 Dec 2008 08:48:00 GMT</pubDate><guid>http://www.cnitblog.com/jakiegu/archive/2008/12/15/52645.html</guid><wfw:comment>http://www.cnitblog.com/jakiegu/comments/52645.html</wfw:comment><comments>http://www.cnitblog.com/jakiegu/archive/2008/12/15/52645.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/jakiegu/comments/commentRss/52645.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jakiegu/services/trackbacks/52645.html</trackback:ping><description><![CDATA[这几天看LR的中文版帮助，有一个地方总搞不明白。就是参数化file选项中sequentail+once选项的参数方式，中文版帮助如图<br><img height=384 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/LR1.jpg" width=626 border=0><br>英文版帮助如下<br><img height=560 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/LR12.jpg" width=845 border=0><br>业务说明：<br>以测试工程师的角色添加缺陷，并设置为3次迭代，设置并发为2个用户<br><img height=297 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/31111.jpg" width=539 border=0><br><img height=72 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/21111.jpg" width=1128 border=0><br>实际结果证明英文版还是对的，呵呵，广大测试朋友注意了<br><img height=322 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/result.jpg" width=721 border=0><br>
<img src ="http://www.cnitblog.com/jakiegu/aggbug/52645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jakiegu/" target="_blank">Test8848-谷峰</a> 2008-12-15 16:48 <a href="http://www.cnitblog.com/jakiegu/archive/2008/12/15/52645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LoadRunner端口映射</title><link>http://www.cnitblog.com/jakiegu/archive/2008/07/15/46746.html</link><dc:creator>Test8848-谷峰</dc:creator><author>Test8848-谷峰</author><pubDate>Tue, 15 Jul 2008 07:18:00 GMT</pubDate><guid>http://www.cnitblog.com/jakiegu/archive/2008/07/15/46746.html</guid><wfw:comment>http://www.cnitblog.com/jakiegu/comments/46746.html</wfw:comment><comments>http://www.cnitblog.com/jakiegu/archive/2008/07/15/46746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jakiegu/comments/commentRss/46746.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jakiegu/services/trackbacks/46746.html</trackback:ping><description><![CDATA[<p>LR的Port端口映射的视频演示<br></p>
<p><a href="http://www.tudou.com/programs/view/MSDYcTpzrfU/">http://www.tudou.com/programs/view/MSDYcTpzrfU/</a></p>
<img src ="http://www.cnitblog.com/jakiegu/aggbug/46746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jakiegu/" target="_blank">Test8848-谷峰</a> 2008-07-15 15:18 <a href="http://www.cnitblog.com/jakiegu/archive/2008/07/15/46746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LR监视器方面的2个问题和解决方案</title><link>http://www.cnitblog.com/jakiegu/archive/2008/05/15/43738.html</link><dc:creator>Test8848-谷峰</dc:creator><author>Test8848-谷峰</author><pubDate>Thu, 15 May 2008 04:12:00 GMT</pubDate><guid>http://www.cnitblog.com/jakiegu/archive/2008/05/15/43738.html</guid><wfw:comment>http://www.cnitblog.com/jakiegu/comments/43738.html</wfw:comment><comments>http://www.cnitblog.com/jakiegu/archive/2008/05/15/43738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jakiegu/comments/commentRss/43738.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jakiegu/services/trackbacks/43738.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>1.</span><span>监控</span><span>IIS</span><span>的时候，</span><span>counter</span><span>并没有出现在</span><span>add measurements</span><span>里面</span></p>
<p><img height=446 alt="" src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/1.GIF" width=1272 border=0><br><span></span></p>
<p><span>解决方案：</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td>
            <p align=left><a name=wp36392></a><span>Some Win 2000 counters cannot be monitored from an NT machine. </span></p>
            </td>
            <td>
            <p align=left><a name=wp36394></a><span>Run the Controller or Tuning Console on a Win 2000 machine.</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><span>2. add measurements</span><span>的时候出现了如下画面<br></span></p>
<p><img height=201 src="http://www.cnitblog.com/images/cnitblog_com/jakiegu/2.GIF" width=638 border=0><br></p>
<p><span>解决方案：</span></p>
<p><span>在</span><span>Server</span><span>上面创建一个用户，用户名和密码和监控机上面的要一样</span></p>
<img src ="http://www.cnitblog.com/jakiegu/aggbug/43738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jakiegu/" target="_blank">Test8848-谷峰</a> 2008-05-15 12:12 <a href="http://www.cnitblog.com/jakiegu/archive/2008/05/15/43738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>