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問題得到解決