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问题得到解决