51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6881|回复: 1
打印 上一主题 下一主题

[原创] loadrunner的javascript-vuser脚本使用及讨论

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-10 12:23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
日前测试一个电子表单,用户通过ie内嵌插件,展示表单,表单内容包括模版和数据,插件是delphi开发的插件,生成的ocx控件放在windows目录下,ie打开链接的页面后,通过点击展现按钮,向服务器端请求数据,返回一个模版和数据的xml格式的文件,通过插件ocx分离出的exe可执行文件,读取该xml进行ie内的模版展示。其中返回该xml文件后,和服务器端以及数据库就停止了任何的交互过程。用户希望得到从点击展现到展现完成的时间。针对这个开始做性能测试,动了不少脑筋。虽然展现过程只和客户端的配置有关,但是如果返回的xml数据以及该插件在执行过程中,对客户端的cpu等考验很大,是不能接受的。lr使用web等协议我都没有实现,后面我会说到原因。后来由于测试使用的ie页是静态页面,中间包含了插件向javascript的接口函数,因此就动了使用javascript-vuser的念头。使用javascript-vuser的宿主除了windows环境外,还有lr的环境,初步的脚本如下:
function Action()
{ //" TO DO: Place your business process/action code here
  var   sArr=[];  
  var   i=0;  
  sArr[i++]="<html><head><title>测试页</title></head>";  
  sArr[i++]="<script   language='Javascript'>";  
  sArr[i++]="function  loadForm()";  
  sArr[i++]="{";  
  sArr[i++]="var fa = document.getElementById('File');";//File为下面的object的id名
  sArr[i++]="fa.init();        ";  
  sArr[i++]="fa.SetServerUrl('http://127.0.0.1:7001');";  
  sArr[i++]="var fn='test';";
  sArr[i++]="fa.Roles='all';";  
  sArr[i++]="fa.LoadFromFile(fn);";   
  sArr[i++]="}";  
  sArr[i++]="</script>";  
  sArr[i++]="<body   onLoad=\"loadForm();\"   bgcolor=#eeeeee   language=javascript>";
  //sArr[i++]="<body    bgcolor=#eeeeee   language=javascript>";
  sArr[i++]="<input type='button' onclick='loadForm();' value='装入表单'>";
  sArr[i++]="<object classid='clsid:-----'>
  ---------
  </object></body></html>";

  var   myIE=new   ActiveXObject("InternetExplorer.Application");  //启动创建ie对象的应用程序
  //var WshShell=new ActiveXObject("WScript.Shell");
  var lr = new ActiveXObject("LoadRunner.LrApi");    //同样,lr的对象。
  myIE.Visible   =   false;             //窗口不可见
  myIE.Navigate("about:blank");         //空白页打开
// myIE.Navigate("www.google.cn");
  var   oDoc=myIE.document;      //ie的document属性
  oDoc.open();
  lr.rendezvous("2");
  lr.start_transaction("5");
  try  
  {       oDoc.write(sArr.join("\n"));         
  }  
  catch(e)  
  {      // oDoc.write(e);
  }  
  finally  
  {       oDoc.close();
          myIE.Quit();
         // lr.sleep(2000);
          lr.end_transaction("5", lr.AUTO);
          myIE=null;  
  }      return(lr.PASS);
}
到这里,有些问题仍然存在疑惑,希望得到大家的指点。
1 该脚本中通过Navigate打开ie,执行的过程是多线程的,计算时间上不够准确,很多时候,lr在执行完onload前就已经退出transaction了。这个还需要改进。如何判断onload执行完毕还没有头绪。
2 通过Navigate打开ie获取document对象,好像只能在myIE.Navigate("about:blank")时才能打开,如果是myIE.Navigate("www.google.cn")等其它页时则提示javasript内部错误,可能的错误原因,是不能创建该document对象。如果能够获取后者的document对象就好了。
3 可以考虑加入javascript模拟鼠标点击按钮“装入表单”,不过在1,2解决后再考虑3就比较合适。
4 使用web等协议没有实现的原因,是因为点击展现以后,系统只开启了该exe的进程,提示正在装载,而表单并不展现,后面的客户端的过程lr是不能录制的,如果用手工编写脚本的话,通过java实现了取得xml的过程,到了读取数据的时候,需要和delphi的控件打交道。通过咨询开发人员,这里delphi不是生成dll文件的,只能生成exe内置于ocx中,目前我知道能够通过本地调用dll,但整个展示的过程不光是调用一个delphi的函数,有很多都需要参与。一个delhpi函数生成一个dll,如果多个函数,而且相互有参数的关联,很难实现。因此dll这个方法被搁置了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-7-10 13:38:03 | 只看该作者
对deiphi不熟悉,不知道有没有可以给建议的朋友。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-10-6 22:28 , Processed in 0.105630 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表