LR腳本回放,日誌中提示警告: Warning -27796   和   Warning -26000

問題描述

  六人會遇到的一個問題,LR執行性能測試腳本時,回放日誌總報出警告,無法訪問一個IP地址,但腳本中明明沒有對該資源的請求。以下借用一個大牛的經驗來分析下原因:

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 resource 
"http://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中的所有資源文件都找到了。

  結論

  到這裏結論其實也就出來了。(結論只針對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文件中的資源


轉載自以下大牛,講的很細緻,希望能給路過的看官一點點啓發和幫助。


作者:薛定諤的破貓

出處:http://www.cnblogs.com/twocats/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章