• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 軟件測試中性能測試工具Silk Performer的會話

    發表于:2009-05-08來源:作者:點擊數: 標簽:軟件測試性能測試工具silkSilk
    HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向 服務器 請求下載某些文件,無論是客戶端還是服務器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的。session機制則是又一種在客戶端與服務器之間保持狀態的 解決方案
    HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向服務器請求下載某些文件,無論是客戶端還是服務器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的。session機制則是又一種在客戶端與服務器之間保持狀態的解決方案。session機制是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。 
          一.Session機制

      當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識 ,稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。

      保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給服務器。一般這個cookie的名字都是類似于SEEESIONID。比如weblogic對于web應用程序生成的cookie:JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID。IIS對于web應用程序生成的cookie:ASP.NET_SessionId=r4fbxvayqhjj3z45thwyfqv1,它的名字是ASP.NET_SessionId。
      由于cookie可以被人為的禁止,必須有其它機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的后面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現形式為:http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
    另一種是作為查詢字符串附加在URL后面,表現形式為http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
      這兩種方式對于用戶來說是沒有區別的,只是服務器在解析的時候處理的方式不同,采用第一種方式也有利于把session id的信息和正常程序參數區分開來。為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑后面都包含這個session id。
      另一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如下面的表單<form name=\"testform\" action=\"/xxx\">
    <input type=\"text\">
    </form>
    在被傳遞給客戶端之前將被改寫成
    <form name=\"testform\" action=\"/xxx\">
    <input type=\"hidden\" name=\"jsessionid\" 

    value=\"ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764\">
    <input type=\"text\">
    </form>

      不過目前這種技術現在已較少應用。實際上這種技術可以簡單的用對action應用URL重寫來代替。

          二.Performer性能測試中session解決方案

      使用Performer進行web應用性能測試時,如果應用服務器是通過url或者表單隱藏字段來保存sessionid,那在錄制好腳本之后,可以使用TrueLog Explorer中的Customize Session Handling將錄制捕獲的服務器端返回html文檔跟回放的產生的html文檔進行對比,從中要到每次動態生成的不一樣的sessionid,將其加以參數化后就能解決問題。對于使用cookie存放sessionid的方式,由于TrueLog Explorer對比的是錄制跟回放時的html文檔,可能無法查找到錄制跟回放時的sessionid差異,例如IIS在服務器跟客戶端的交互中將sessionid放在http頭中。此時,performer為了保持服務器跟客戶端的會話狀態,采用了為每個虛擬用戶維護一個cookie database,且cookie database不支持跨transaction,即如果登錄跟業務操作分開錄制再兩個transaction中時,登錄transaction中的cookie database會在該transaction執行完后被清空,業務操作所在的transaction無法沿用登錄transaction的cookie database,此時必須恢復cookie database至登錄transaction結束時的狀態,performer提供了一系列操作cookie database的函數,如下是一個實現方案。
      function StoreCookies(lcookies:array of string;lncookie:number)
      var
        lflag  :string;
        lhcookie  :boolean;
      begin
        lncookie := 0;
        lhcookie := WebCookieListFirst(lflag, STRING_COMPLETE); 
        while lhCookie do
          lncookie := lncookie + 1;
          lhCookie := WebCookieListNext(lflag, STRING_COMPLETE);
          lcookies[lncookie] := lflag;
        end;
      end StoreCookies;
    function RepairCookies(lcookies:array of string;lncookie:number)
      var
        lcount  :number;
        ldomain  :string;
        lpath  :string;
        lurl  :string;
      begin
        if lncookie <> 0 then
          for lcount := 1 to lncookie do   

    StrSearchDelimited(ldomain,STRING_COMPLETE, [Page]
                                 lcookies[lcount], \"domain=\",
                                 1,\";\",1,STR_SEARCH_FIRST);
            StrSearchDelimited(lurl,STRING_COMPLETE,
                                lcookies[lcount],\"path=\",
                                1,\";\",1,STR_SEARCH_FIRST);
            lurl := \"http://\" + ldomain + lpath;
            WebCookieSet(lcookies[lcount],lurl);
          end; 
        end;  
      end RepairCookies;

      StoreCookies函數用在登錄transaction結束處,將當前cookie database中所有的cookie保存進全局字符串數組中,供后面的RepaireCookies函數使用。RepaireCookies函數用在業務transaction的開始處,恢復cookie database,session問題得到解決

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>