﻿<?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--随笔分类-测试相关</title><link>http://www.blogjava.net/tacy/category/25673.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 31 May 2008 03:39:46 GMT</lastBuildDate><pubDate>Sat, 31 May 2008 03:39:46 GMT</pubDate><ttl>60</ttl><item><title>通过保存错误页面到日志中解决一些后台看不到异常的错误</title><link>http://www.blogjava.net/tacy/archive/2008/05/28/203659.html</link><dc:creator>tacy lee</dc:creator><author>tacy lee</author><pubDate>Wed, 28 May 2008 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/tacy/archive/2008/05/28/203659.html</guid><wfw:comment>http://www.blogjava.net/tacy/comments/203659.html</wfw:comment><comments>http://www.blogjava.net/tacy/archive/2008/05/28/203659.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tacy/comments/commentRss/203659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tacy/services/trackbacks/203659.html</trackback:ping><description><![CDATA[<p>有时候，我们可能希望看到lr的出错页面：比如lr出错，但是后台服务器没有错误日志，这时候，我们希望能看到错误页面的内容来判断问题出在什么地方，但是lr没有提供类似的功能  </p>
<p>我们可以通过一种变通的办法来实现：  </p>
<p>首先找到你出错的页面，保存该页面到参数里面：  </p>
<p>web_set_max_html_param_len(&#8220;2048&#8221;);  </p>
<p>web_reg_save_param(&#8220;FILED&#8221;,&#8221;LB=&#8221;,&#8221;RB=&#8221;,&#8221;Search=Body&#8221;,LAST);  </p>
<p>然后输出到日志里面： lr_output_message(&#8221;#######################################%s&#8221;,lr_eval_string(&#8221;{FILED}&#8221;));  </p>
<p>修改lr run-time的几个设置：  </p>
<p>1、Always send messages  </p>
<p>2、continue on error （这样才能保证运行lr_output_message)  </p>
<p>这样lr会把所有的lr_output_message输出保存到日志文件  </p>
<p>当然你不要下载资源文件，否则保存到的就不是html页面了，可能是一个gif :(  </p>
<p>最后，结合lr controller的错误信息，定位到出错的vuser id，查看该vuser的log文件就能看到错误页面了  </p>
<p>非常有效的一个小技巧，用它解决了一个难缠的问题。 </p>
<img src ="http://www.blogjava.net/tacy/aggbug/203659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tacy/" target="_blank">tacy lee</a> 2008-05-28 23:05 <a href="http://www.blogjava.net/tacy/archive/2008/05/28/203659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Classes冲突诊断</title><link>http://www.blogjava.net/tacy/archive/2007/12/21/169407.html</link><dc:creator>tacy lee</dc:creator><author>tacy lee</author><pubDate>Fri, 21 Dec 2007 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/tacy/archive/2007/12/21/169407.html</guid><wfw:comment>http://www.blogjava.net/tacy/comments/169407.html</wfw:comment><comments>http://www.blogjava.net/tacy/archive/2007/12/21/169407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tacy/comments/commentRss/169407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tacy/services/trackbacks/169407.html</trackback:ping><description><![CDATA[<p>作者：tacy lee</p> <p>由于大量开源框架的采用，Classes冲突的问题在我们的项目中越来越常见，下面写了一个简单的jsp，用来查找当前使用类的位置：</p> <div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">&lt;%@page contentType=<span style="color: #006080">"text/html; charset=gb2312"</span> %&gt;

&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Class conflict&lt;/title&gt;
  &lt;/head&gt;
  
  &lt;body&gt;
      Example input: com.primeton.tp.web.driver.webdriver.PageDriver&lt;br&gt;
    &lt;form action=<span style="color: #006080">"&lt;%=request.getRequestURI()%&gt; "</span> method=<span style="color: #006080">"post"</span>&gt;
      &lt;input type=<span style="color: #006080">"text"</span> name=<span style="color: #006080">"className"</span> size=<span style="color: #006080">"50"</span> &gt;&lt;br&gt;
      &lt;input type=<span style="color: #006080">"submit"</span> <span style="color: #0000ff">value</span>=<span style="color: #006080">"submit"</span>&gt;
    &lt;/form&gt;
    &lt;%
            String classLocation = <span style="color: #0000ff">null</span>;
            String className =request.getParameter(<span style="color: #006080">"className"</span>);

            <span style="color: #0000ff">if</span> ((className != <span style="color: #0000ff">null</span>) &amp;&amp; ((className = className.trim()).length() != 0)) {
              <span style="color: #0000ff">try</span>{
                classLocation = Class.forName(className).getProtectionDomain().getCodeSource().toString();
                }<span style="color: #0000ff">catch</span>(Throwable e){
                    log(<span style="color: #006080">"error="</span> + e, e);
                }

                <span style="color: #0000ff">if</span> (classLocation != <span style="color: #0000ff">null</span>) {
                    <span style="color: #0000ff">out</span>.println(<span style="color: #006080">"Class "</span> + className + <span style="color: #006080">" found in &lt;br&gt;"</span> + classLocation );
                }
              <span style="color: #0000ff">else</span> {
                  <span style="color: #0000ff">out</span>.println(<span style="color: #006080">"Class '"</span> + className + <span style="color: #006080">"' not found"</span> );
                }
            }
    %&gt;
  &lt;/body&gt;
&lt;html&gt;

</pre></div>
<p>&nbsp;</p>
<p>通过这个jsp页面可以输入需要查询的类</p>
<p>-----------------------------------------------------------------------------------------------------------------------------------------------------</p>
<p>另外，websphere可以通过下面两个方法来改变类的加载：</p>
<p>1、在"Applications" &gt;"Enterprise Applications" &gt;" yourear "&gt;" Class Loading and File Update Detection"</p>
<p>修改："Class loader mode" 为 "Parent Last"，这样应用类可以覆盖父装载器的类
<p>当然但如果你混合使用了被覆盖的类和没有被覆盖的类，则此操作有可能会导致 ClassCastException 或 LinkageErrors
<p>2、在"Servers" &gt; "Application servers" &gt; "yourserver" &gt; "Process Definition" &gt; "Java Virtual Machine"</p>
<p>添加CLASSPATH，让你的类先加载</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cab9dafe-a60e-4bed-bca0-67f8ad2913f3" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">del.icio.us Tags: <a href="http://del.icio.us/popular/websphere" rel="tag">websphere</a>,<a href="http://del.icio.us/popular/classloader" rel="tag">classloader</a>,<a href="http://del.icio.us/popular/troubleshooting" rel="tag">troubleshooting</a></div><img src ="http://www.blogjava.net/tacy/aggbug/169407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tacy/" target="_blank">tacy lee</a> 2007-12-21 18:05 <a href="http://www.blogjava.net/tacy/archive/2007/12/21/169407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入理解Loadrunner中的Browser Emulation</title><link>http://www.blogjava.net/tacy/archive/2007/11/06/158397.html</link><dc:creator>tacy lee</dc:creator><author>tacy lee</author><pubDate>Mon, 05 Nov 2007 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/tacy/archive/2007/11/06/158397.html</guid><wfw:comment>http://www.blogjava.net/tacy/comments/158397.html</wfw:comment><comments>http://www.blogjava.net/tacy/archive/2007/11/06/158397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tacy/comments/commentRss/158397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tacy/services/trackbacks/158397.html</trackback:ping><description><![CDATA[<h3>作者：tacy lee</h3> <p><strong>一：基本介绍</strong></p> <p>在Loadrunner的使用中，对于Run-time Settings下的browser emulation设置是比较容易让人产生困惑的地方。下面我们结合sniffer来具体看看每个选项的用途，以及对测试的影响。 <p><a href="http://www.blogjava.net/images/blogjava_net/tacy/WindowsLiveWriter/LoadrunnerBrowserEmulation_461/clip_image002_2.gif"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="248" alt="clip_image002" src="http://www.blogjava.net/images/blogjava_net/tacy/WindowsLiveWriter/LoadrunnerBrowserEmulation_461/clip_image002_thumb.gif" width="573" border="0"></a> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Browser Emulation 图</p> <p><strong>二：案例和工具</strong></p> <p><b>1. </b><b>测试案例：</b> <p>打开网站首页两次，对比不同Browser Emulation设置下loadrunner的行为，脚本如下。 <div class="csharpcode-wrapper"><pre class="csharpcode">Action()
{
    web_url(<span class="str">"www.primeton.com"</span>, 
        <span class="str">"URL=http://www.primeton.com/"</span>, 
        <span class="str">"Resource=0"</span>, 
        <span class="str">"RecContentType=text/html"</span>, 
        <span class="str">"Referer="</span>, 
        <span class="str">"Snapshot=t2.inf"</span>, 
        <span class="str">"Mode=HTML"</span>, 
        LAST);

    web_url(<span class="str">"www.primeton.com"</span>, 
        <span class="str">"URL=http://www.primeton.com/"</span>, 
        <span class="str">"Resource=0"</span>, 
        <span class="str">"RecContentType=text/html"</span>, 
        <span class="str">"Referer="</span>, 
        <span class="str">"Snapshot=t2.inf"</span>, 
        <span class="str">"Mode=HTML"</span>, 
        LAST);

    <span class="kwrd">return</span> 0;
}
</pre></div>
<p>
<p><b>2. </b><b>sniffer</b><b>工具</b>
<p>开源工具：Wireshark(前身是ethereal)（www.wireshark.org）
<p><strong>三：测试过程</strong></p>
<p>为了方便描述，我们约定用：
<p><i>A</i><i>代表Simulate browser cache</i>
<p><i>B</i><i>代表Cache URLs requiring content(HTMLs)</i>
<p><i>C</i><i>代表Check for newer versions of stored pages every visit to the page</i>
<p><i>D</i><i>代表Download non-HTML resources</i>
<p><i>E</i><i>代表Simulate a new user on each iteratioin</i>
<p><i>F</i><i>代表Clear cache on each iteration</i>
<p>首先设置Run Logic中的iteration为2。让Action运行两次，看看循环运行脚本两次，数据包和连接数的变化。
<p><b>1. </b><b>去掉所有选项</b>
<p>结果：共获取数据包95个，建立连接1个（红色标识），断开连接1个（蓝色标识）
<div class="csharpcode-wrapper">
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">No.     Time        Source            Destination       Protocol Info
      <font color="#ff0000">1 0.000000    192.168.1.61      203.81.29.137     TCP      13835 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
</font>      2 0.036053    203.81.29.137     192.168.1.61      TCP      http &gt; 13835 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
     <font color="#0000ff">92 1.415887    192.168.1.61      203.81.29.137     TCP      13835 &gt; http [FIN, ACK] Seq=817 Ack=71762 Win=257760 Len=0
</font>     94 1.449960    203.81.29.137     192.168.1.61      TCP      http &gt; 13835 [FIN, ACK] Seq=71762 Ack=818 Win=16464 Len=0
</pre></div></div>
<p>
<p>在这种情况下，数据包非常少（没有选择下载资源文件入css,js,gif等），而且你可以看到，打开4次首页，只建立了一个tcp连接。
<p>这时，你即使选择A，发现数据包的数量量页没有变化，因为cache主要还是针对资源文件
<p><b>2. </b><b>选择E(F)</b>
<p>结果：共获取数据包102个，建立连接2个（红色标识），断开连接2个（蓝色标识）</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">No.     Time        Source            Destination       Protocol Info
      <font color="#ff0000">1 0.000000    192.168.1.61      203.81.29.137     TCP      13886 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
</font>      2 0.037013    203.81.29.137     192.168.1.61      TCP      http &gt; 13886 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">     48 0.618117    192.168.1.61      203.81.29.137     TCP      13886 &gt; http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
</font><font color="#ff0000">     49 0.644106    192.168.1.61      203.81.29.137     TCP      13887 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
</font>     51 0.651919    203.81.29.137     192.168.1.61      TCP      http &gt; 13886 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0
     53 0.676377    203.81.29.137     192.168.1.61      TCP      http &gt; 13887 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">     99 1.310379    192.168.1.61      203.81.29.137     TCP      13887 &gt; http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0</font>
101 1.347949    203.81.29.137     192.168.1.61      TCP      http &gt; 13887 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0
</pre></div>
<p>在这种情况下，数据包非常少（没有选择下载资源文件入css,js,gif等），对比第一种情况，你会发现它建立了两个连接，这就是E的作用，它对于每次迭代都当成一个新的用户，需要重新建立连接。
<p><b>3. </b><b>选择DE(F)</b>
<p>结果：共获取数据包1782个，建立连接6个（红色标识），断开连接6个（蓝色标识）</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">No.     Time        Source            Destination       Protocol Info
      <font color="#ff0000">1 0.000000    192.168.1.61      203.81.29.137     TCP      14016 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
</font>      2 0.037911    203.81.29.137     192.168.1.61      TCP      http &gt; 14016 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#ff0000">      6 0.107432    192.168.1.61      203.81.29.137     TCP      14017 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2</font>
      9 0.141816    203.81.29.137     192.168.1.61      TCP      http &gt; 14017 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">    426 3.334889    192.168.1.61      203.81.29.137     TCP      14017 &gt; http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
</font>    428 3.372253    203.81.29.137     192.168.1.61      TCP      http &gt; 14017 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
<font color="#ff0000">    448 4.395488    192.168.1.61      203.81.29.137     TCP      14020 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
</font>    457 4.439604    203.81.29.137     192.168.1.61      TCP      http &gt; 14020 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">    859 7.593610    192.168.1.61      203.81.29.137     TCP      14016 &gt; http [FIN, ACK] Seq=2849 Ack=377404 Win=257484 Len=0</font>
    870 7.659680    203.81.29.137     192.168.1.61      TCP      http &gt; 14016 [FIN, ACK] Seq=377404 Ack=2850 Win=15935 Len=0
<font color="#0000ff">    888 8.511308    192.168.1.61      203.81.29.137     TCP      14020 &gt; http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0
</font>    890 8.549451    203.81.29.137     192.168.1.61      TCP      http &gt; 14020 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0
<font color="#ff0000">    892 8.566246    192.168.1.61      203.81.29.137     TCP      14022 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2</font>
    893 8.601893    203.81.29.137     192.168.1.61      TCP      http &gt; 14022 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#ff0000">    899 8.702628    192.168.1.61      203.81.29.137     TCP      14023 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2</font>
    904 8.741807    203.81.29.137     192.168.1.61      TCP      http &gt; 14023 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">   1298 11.809456   192.168.1.61      203.81.29.137     TCP      14022 &gt; http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
</font>   1310 11.878665   203.81.29.137     192.168.1.61      TCP      http &gt; 14022 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
<font color="#ff0000">   1341 12.771707   192.168.1.61      203.81.29.137     TCP      14026 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2</font>
   1348 12.813950   203.81.29.137     192.168.1.61      TCP      http &gt; 14026 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
<font color="#0000ff">   1759 16.032952   192.168.1.61      203.81.29.137     TCP      14023 &gt; http [FIN, ACK] Seq=3151 Ack=367918 Win=257484 Len=0
</font>   1761 16.068296   203.81.29.137     192.168.1.61      TCP      http &gt; 14023 [FIN, ACK] Seq=367918 Ack=3152 Win=17280 Len=0
<font color="#0000ff">   1779 16.983042   192.168.1.61      203.81.29.137     TCP      14026 &gt; http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0</font>
   1781 17.016836   203.81.29.137     192.168.1.61      TCP      http &gt; 14026 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0
</pre></div>
<p>
<p>在这种情况下，数据包的数量非常大，连接也很多，由于没有cache功能，每次打开页面都需要重新下载所有的资源文件。
<p><b>4. </b><b>选择ADE</b>
<p>结果：共获取数据包525个，建立连接3个，断开连接3个(不再标识了，syn即为连接请求，fin即为断开请求）</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">No.     Time        Source            Destination       Protocol Info
      1 0.000000    192.168.1.61      203.81.29.137     TCP      14189 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
      2 0.033657    203.81.29.137     192.168.1.61      TCP      http &gt; 14189 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
      6 0.100636    192.168.1.61      203.81.29.137     TCP      14190 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
      9 0.133703    203.81.29.137     192.168.1.61      TCP      http &gt; 14190 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    429 3.383748    192.168.1.61      203.81.29.137     TCP      14190 &gt; http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
    431 3.418556    203.81.29.137     192.168.1.61      TCP      http &gt; 14190 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
    471 4.352071    192.168.1.61      203.81.29.137     TCP      14189 &gt; http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
    472 4.380312    192.168.1.61      203.81.29.137     TCP      14192 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    474 4.389778    203.81.29.137     192.168.1.61      TCP      http &gt; 14189 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
    476 4.413220    203.81.29.137     192.168.1.61      TCP      http &gt; 14192 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    522 5.078068    192.168.1.61      203.81.29.137     TCP      14192 &gt; http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
524 5.115099    203.81.29.137     192.168.1.61      TCP      http &gt; 14192 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0
</pre></div>
<p>
<p>在这种情况下，cache发挥作用，数据包对比第三种情况大大减少，几乎等于打开一次首页的数据量（449个数据包），只有第一次打开页面需要完整下载页面（包括资源文件），后面的三次打开页面都只要下载HTML页面（不包括资源文件）。
<p><b></b>
<p><b>5. </b><b>选择ADEF</b>
<p>选择F之后我们看看结果：共获取数据包942个，建立连接4个，断开连接4个</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4; max-height: 200px"><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">No.     Time        Source            Destination       Protocol Info
      1 0.000000    192.168.1.61      203.81.29.137     TCP      14292 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
      2 0.034524    203.81.29.137     192.168.1.61      TCP      http &gt; 14292 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
      6 0.102314    192.168.1.61      203.81.29.137     TCP      14294 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
      9 0.139752    203.81.29.137     192.168.1.61      TCP      http &gt; 14294 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    426 3.791111    192.168.1.61      203.81.29.137     TCP      14294 &gt; http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
    428 3.824970    203.81.29.137     192.168.1.61      TCP      http &gt; 14294 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
    468 6.213276    192.168.1.61      203.81.29.137     TCP      14292 &gt; http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
    469 6.244052    192.168.1.61      203.81.29.137     TCP      14297 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    471 6.249564    203.81.29.137     192.168.1.61      TCP      http &gt; 14292 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
    473 6.279647    203.81.29.137     192.168.1.61      TCP      http &gt; 14297 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    479 6.374967    192.168.1.61      203.81.29.137     TCP      14298 &gt; http [SYN] Seq=0 Len=0 MSS=1460 WS=2
    484 6.419597    203.81.29.137     192.168.1.61      TCP      http &gt; 14298 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
    897 9.858493    192.168.1.61      203.81.29.137     TCP      14297 &gt; http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
    899 9.895188    203.81.29.137     192.168.1.61      TCP      http &gt; 14297 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
    939 12.840029   192.168.1.61      203.81.29.137     TCP      14298 &gt; http [FIN, ACK] Seq=1806 Ack=226090 Win=257760 Len=0
    941 12.876120   203.81.29.137     192.168.1.61      TCP      http &gt; 14298 [FIN, ACK] Seq=226090 Ack=1807 Win=17076 Len=0
</pre></div>
<p>在这种情况下，由于选择了F，在迭代的时候清除了cache，所以每次迭代都需要重新下载资源文件。数据包差不多等于第三种情况的一半，约等于打开两次首页的数据量（449×2个数据包）。
<p><b>6. </b><b>关于BC</b><b>选项</b>
<p><b>C</b><b>的解释（<i>Check for newer versions of stored pages every visit to the page</i></b><b><i>）</i></b>
<p>C比较容易理解，类似IE设置中的每次检查，如果不设置C，LR对于已经cache的文件就不会重新向服务器请求，如果选择C，你就可以在数据包中发现很多304信息。
<p><b>B</b><b>的解释（<i>Cache URLs requiring content(HTMLs)</i></b><b><i>）</i></b>
<p>LR对于资源文件的cache并不会真正cache在内存中或者在磁盘上，这个选项表示：对于一些需要用到的关联，校验，页面解析内容真正cache在内存中，减少客户端的重复工作。
<p>当然如果你想把GIF也cache到内存中，你可以在Advanced中设置，选择Specify URL requiring content in addition to HTML pages，加入条目image/gif，并勾选。当Vuser运行的时候，你可以对比一下mmdrv.exe进程的内存消耗（内存占用会更多）。
<p><strong>四： 结论</strong></p>
<p>通过上面的测试分析，我们大概知道了每个选项的真正含义，你需要根据你的测试目的来选择合适的设置：
<p>1、 对于一个具体的应用测试，对于前端Web Server不可忽略，缺省设置非常合适，不需要调整（有时候需要考虑把C选上）
<p>注意：很多人在录制脚本的时候，习惯把登入操作放到vuser_init中，这时候缺省设置可能会抛错，建议把这类的操作都放入到action中
<p>2、 如果你更关注后端应用服务器的性能或者说做一些架构的验证分析，那你缺省设置对于你来说就不合适了，你需要选择取消所有的设置项。
<p>当然你也可以根据自己的具体情况做不同调整，但是一定要真正理解这些选项的具体含义才能做到不犯错误</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:43f1a708-fd47-4b59-8033-b797c73b30b6" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">del.icio.us Tags: 
		<a href="http://del.icio.us/popular/performance" rel="tag">performance</a>
		, 
		<a href="http://del.icio.us/popular/testing" rel="tag">testing</a>
		, 
		<a href="http://del.icio.us/popular/loadrunner" rel="tag">loadrunner</a>
		</div><img src ="http://www.blogjava.net/tacy/aggbug/158397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tacy/" target="_blank">tacy lee</a> 2007-11-06 00:19 <a href="http://www.blogjava.net/tacy/archive/2007/11/06/158397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 编译异常解决一则</title><link>http://www.blogjava.net/tacy/archive/2007/11/05/158376.html</link><dc:creator>tacy lee</dc:creator><author>tacy lee</author><pubDate>Mon, 05 Nov 2007 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/tacy/archive/2007/11/05/158376.html</guid><wfw:comment>http://www.blogjava.net/tacy/comments/158376.html</wfw:comment><comments>http://www.blogjava.net/tacy/archive/2007/11/05/158376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tacy/comments/commentRss/158376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tacy/services/trackbacks/158376.html</trackback:ping><description><![CDATA[<p></p> <p>编译的时候出现java抛如下异常：</p> <p>java.nio.BufferOverflowException<br> at java.nio.Buffer.nextPutIndex(Buffer.java:419)<br> at java.nio.HeapCharBuffer.put(HeapCharBuffer.java:145)<br> at com.sun.tools.javac.parser.Scanner.decode(Scanner.java:405)<br> at com.sun.tools.javac.parser.Scanner.&lt;init&gt;(Scanner.java:304)<br> at com.sun.tools.javac.parser.Scanner.&lt;init&gt;(Scanner.java:238)<br> at com.sun.tools.javac.parser.Scanner$Factory.newScanner(Scanner.java:72)<br> at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:254)<br> at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:281)<br> at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:399)<br> at com.sun.tools.javac.main.Main.compile(Main.java:592)<br> at com.sun.tools.javac.main.Main.compile(Main.java:544)<br> at com.sun.tools.javac.Main.compile(Main.java:67)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br> at java.lang.reflect.Method.invoke(Method.java:585)<br> at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:55)<br> at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:936)<br> at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:758)<br> at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)<br> at org.apache.tools.ant.Task.perform(Task.java:364)<br> at org.apache.tools.ant.Target.execute(Target.java:341)<br> at org.apache.tools.ant.Target.performTasks(Target.java:369)<br> at org.apache.tools.ant.Project.executeTarget(Project.java:1214)<br> at com.primeton.studio.compile.java.bizlets.BizletProcessor.startAnt(BizletProcessor.java:327)<br> at com.primeton.studio.compile.java.bizlets.BizletProcessor.prepareclass(BizletProcessor.java:419)<br> at com.primeton.studio.compile.java.bizlets.BizletProcessor.init(BizletProcessor.java:374)<br> at com.primeton.studio.compile.java.bizlets.BizletProcessor.build(BizletProcessor.java:130)<br> at com.primeton.studio.compile.frame.ProjectProcessor.buildBizlets(ProjectProcessor.java:161)<br> at com.primeton.studio.compile.frame.ProjectProcessor.build(ProjectProcessor.java:115)<br> at com.primeton.studio.compile.frame.SimpleBuilder.build(SimpleBuilder.java:195)<br> at com.primeton.studio.compile.frame.SimpleBuilder.build(SimpleBuilder.java:182)<br> at com.primeton.studio.compile.frame.SimpleBuilder.main(SimpleBuilder.java:265)</p> <p>查了一下，估计是java采用gbk字符集（缺省windows的中文字符集），导致stack区溢出（明显没对国际化测试不足嘛） <p>解决问题的方法就是修改系统的缺省区域设置为English既可。</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b7c8b618-e1d8-44f4-a821-7773688d6956" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">del.icio.us Tags:  		<a href="http://del.icio.us/popular/java" rel="tag">java</a> 		,  		<a href="http://del.icio.us/popular/ant" rel="tag">ant</a> 		,  		<a href="http://del.icio.us/popular/build" rel="tag">build</a> 		,  		<a href="http://del.icio.us/popular/tips" rel="tag">tips</a> 		</div><img src ="http://www.blogjava.net/tacy/aggbug/158376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tacy/" target="_blank">tacy lee</a> 2007-11-05 22:37 <a href="http://www.blogjava.net/tacy/archive/2007/11/05/158376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>