qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          LR 細節解析,為什么LR腳本會去訪問“腳本中不存在的“資源?

            結論

            到這里結論其實也就出來了。(結論只針對HTML-Based Mode錄制方式)

            HTML頁面中的資源,如頁面里寫的<img>(跟是不是在表格中無關...),是不會顯示在腳本中的。

            而外部鏈接中的資源,如<link type="text/css>連接的CSS文件中使用的圖片,是會通過EXTRARES屬性顯示在腳本中的。

            運行上面這個腳本,Replay Log中會顯示:

          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/bg_top.gif (specified by argument number 9)     [MsgId: MMSG-26577] 
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_bg.gif (specified by argument number 11)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_right.jpg (specified by argument number 13)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_m.gif (specified by argument number 15)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/button02.gif (specified by argument number 17)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_r.gif (specified by argument number 19)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/button01.gif (specified by argument number 21)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/nav_l.gif (specified by argument number 23)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_l.gif (specified by argument number 25)     [MsgId: MMSG-26577]
          Action3.c(8): Downloading resource http://search.thunisoft.com/skins/default/images/search_r.gif (specified by argument number 27)     [MsgId: MMSG-26577]

            細心的人可以發現,這個日志和第一步實驗中的不一樣呢。再次對比上面寫出的兩種Replay Log,可以發現一個是"Found resource ... in HTML ...",一個是"Downloading resource ..."(標記藍色兩處)

            這樣也可以解釋了。

            HTML文件內部的資源,不需要顯示在腳本中就可以下載,因為會在訪問這個頁面時“發現”。

            而外部鏈接的資源,必須在腳本中顯式寫出,才會去“下載”。

            所以EXTRARES屬性下面的資源,只要注釋掉相應的腳本,就可以避免該請求。

            而HTML頁面文件中的資源,則只能通過修改MODE="HTTP"屬性,或者改為URL-Based Mode錄制方式,才能避免請求。

            說到這,基本都清楚了,最后再翻一下官方文檔(Function Reference)吧。

          web_url

          EXTRARES:
          A demarcation parameter indicating that the next parameter will be a list of resource attributes.

          List of Resource Attributes:
          A list of resources generated by non–HTML mechanisms in the Web page. These include the resources requested by Javascript, ActiveX, Java applets and Flash. VuGen's Recording Options allow these elements either to be recorded within the current script step (the default mode) or recorded as separate steps (see "Recording in HTML–Based Mode" in the VuGen Online Book).

            再次驗證了我們的結論,EXTRARES中只顯示非HTML文件中的資源。

            問題描述

            同事遇到的一個問題,LR執行性能測試腳本時,總報出錯誤,無法訪問一個圖片的地址,但腳本中明明沒有對該資源的請求。

          Action4.c(12): Warning -27796: Failed to connect to server "10.11.204.35:80": [10060] Connection timed out      [MsgId: MWAR-27796]Action4.c(12): Warning -26000: Empty or no response for URL=http://10.11.204.35/iwebfiles/yqlj/26/107/10/4/361.gif      [MsgId: MWAR-26000]

            我查了一下,確實腳本中看不出問題,所有不相干的請求都刪掉了,頁面的請求中EXTRARES屬性中的資源列表也都刪掉了,只保留了主頁面的請求。但只要一執行,就會去訪問那個無法連接的資源。

            分析與實驗

            查看了該頁面的源文件,確實可以看到那個有問題的圖片鏈接,是寫在一個表格里的。于是很自然的猜測,是不是表格中的資源,錄制不到腳本中、但是又訪問了呢?

            這種問題,其實確信只要把錄制方式轉換為URL-Based Mode就肯定能解決,因為可以顯式的錄下所有請求。但還是想把HTML-Based Mode下的問題解決,于是做了一些測試。

            模擬那個問題頁面,創建測試用頁面。特意寫了兩個圖片資源做對比,一個普通的圖片,一個是放置在表格中的圖片超鏈接,測試訪問這個頁面錄制的腳本。

          <html> 
              <head>
                  <meta http-equiv="content-type" content="text/html;charset=gb2312">
                  <title>測試頁面</title>
              </head>
           
              <body>
                  <p>
                  普通的圖片
                  <img src=http://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg width="126" height="45" border="0"/>
                  </p>
                  <p>
                      <table border=2>
                      <tr>
                          <td>
                          表格中的圖片跳轉鏈接
                          </td>
                      </tr>
                      <tr> 
                          <td>
                          <a href=http://172.16.1.3/bbs/viewthread.php?tid=44597&extra=page%3D1###zoom target="_blank"><img src=http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg width="126" height="45" border="0"/></a>
                          </td>
                    </tr>
                      </table>
                  </p>
              </body>
          </html>

            創建如上的HTML,放到TOMCAT的ROOT目錄中,則可以通過tomcat訪問該頁面。

            測試:

            1、默認的HTML-Based Mode方式進行錄制,只錄到一個請求。

          web_url("test_mode.html", 
                  "URL=http://172.16.6.17:8080/test_mode.html",
                  "Resource=0",
                  "RecContentType=text/html",
                  "Referer=",
                  "Snapshot=t12.inf",
                  "Mode=HTML",
                  LAST);

            腳本中看不到對資源的請求,但實際運行時,還是會去獲取兩個圖片資源。通過Replay Log可以看到請求的證據:

          Action_HTML.c(7):Found resourcehttp://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg in HTML http://172.16.6.17:8080/test_mode.html     [MsgId: MMSG-26659]
          Action_HTML.c(7): Found resource http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg in HTML http://172.16.6.17:8080/test_mode.html     [MsgId: MMSG-26659]

           2、URL-Based Mode錄制方式,可以錄制到所有的請求,包括一個頁面請求,兩個圖片請求。

          web_url("test_mode.html",  
                  "URL=http://172.16.6.17:8080/test_mode.html", 
                  "Resource=0", 
                  "RecContentType=text/html", 
                  "Referer=", 
                  "Snapshot=t13.inf", 
                  "Mode=HTTP", 
                  LAST);

              web_concurrent_start(NULL);

              web_url("20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg", 
                  "URL=http://172.16.1.3/bbs/attachments/month_1110/20111008_3f1828e9b28294cb7f23Wu3TykOUV9RM.jpg", 
                  "Resource=1", 
                  "RecContentType=image/jpeg", 
                  "Referer=http://172.16.6.17:8080/test_mode.html", 
                  "Snapshot=t14.inf", 
                  LAST);

              web_url("20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg", 
                  "URL=http://172.16.1.3/bbs/attachments/month_1110/20111008_67cebe2ca85b66fe580cGUGESOM05AWo.jpg", 
                  "Resource=1", 
                  "RecContentType=image/jpeg", 
                  "Referer=http://172.16.6.17:8080/test_mode.html", 
                  "Snapshot=t15.inf", 
                  LAST);

              web_concurrent_end(NULL);

            對比兩種錄制方式可以發現,對主頁面的請求,兩個腳本的唯一差別就在Mode屬性為"HTML"還是"HTTP"(代碼中標記黃色處)。通過修改測試1(HTML-Based Mode),可以很容易的獲得以下信息:

            如果MODE="HTML",那么訪問頁面的請求,會自動去請求頁面上的資源。

            如果MODE="HTTP",那么會只請求這個頁面的HTML文件。

            但熟悉LR的人又肯定記得,在默認的HTML-Based Mode錄制模式下,web_url腳本中應該會記錄所請求的資源文件啊?在EXTRARES屬性后經常會看到"Url=/image/test.jpg"這樣的語句,那為什么出現問題的那個頁面,和我們的測試頁面錄下來的腳本確實沒記錄資源文件呢?

            要查明這點很容易,只要隨便找一個網站錄制一下,去看看腳本中記錄的資源文件有什么特點就知道了。

            用我們公司的搜索平臺做一下實驗,錄制主頁面如下。果然得到了我們期望的EXTRARES屬性,下面列出了很多資源文件。

          web_url("search.thunisoft.com",  
                  "URL=http://search.thunisoft.com/", 
                  "Resource=0", 
                  "RecContentType=text/html", 
                  "Referer=", 
                  "Snapshot=t16.inf", 
                  "Mode=HTML", 
                  EXTRARES, 
                  "Url=/skins/default/images/bg_top.gif", ENDITEM, 
                  "Url=/skins/default/images/nav_bg.gif", ENDITEM, 
                  "Url=/skins/default/images/nav_right.jpg", ENDITEM, 
                  "Url=/skins/default/images/search_m.gif", ENDITEM, 
                  "Url=/skins/default/images/button02.gif", ENDITEM, 
                  "Url=/skins/default/images/nav_r.gif", ENDITEM, 
                  "Url=/skins/default/images/button01.gif", ENDITEM, 
                  "Url=/skins/default/images/nav_l.gif", ENDITEM, 
                  "Url=/skins/default/images/search_l.gif", ENDITEM, 
                  "Url=/skins/default/images/search_r.gif", ENDITEM,
                  LAST);

            分析一下頁面的源文件,搜索腳本中出現的各個圖片名,居然發現一個都找不到!而源文件中出現的圖片文件,在腳本中又都沒記錄。

            那么繼續尋找腳本中圖片的來源吧。其實到這應該很自然的想到了CSS文件了吧,于是隨著源文件中的<link>找到連接文件,果然EXTRARES中的所有資源文件都找到了。

          posted on 2012-05-09 09:48 順其自然EVO 閱讀(528) 評論(0)  編輯  收藏 所屬分類: loadrunner

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 精河县| 惠安县| 凯里市| 基隆市| 钦州市| 东兴市| 固原市| 彰武县| 铅山县| 鄱阳县| 龙口市| 高碑店市| 陵川县| 克东县| 伊川县| 岳西县| 绩溪县| 镇赉县| 永吉县| 布尔津县| 闻喜县| 凤冈县| 昆山市| 巍山| 绥宁县| 汪清县| 彭山县| 武川县| 岳阳市| 襄垣县| 随州市| 武功县| 休宁县| 利川市| 宕昌县| 长海县| 锡林郭勒盟| 波密县| 霍城县| 金昌市| 松潘县|