自动化测试框架爱好者,非培训机构、非托、非盈利,纯个人!软件自动化测试交流 请加我QQ 459864689!更多自动化测试的信息请访问我的个人小站www.zhushangyuan.cn,专门研究selenium自动化测试框架的分享站点。

RPT8.0自定义HTTP请求

上一篇 / 下一篇  2009-05-17 23:34:48 / 个人分类:性能测试

继《LoadRunner之自定义HTTP请求》之后,就要开始《RPT8.0之自定义HTTP请求》了,
其实这个题目是不怎么合适的,但也不愿意再改。前文说过的很多话,不想也不会在这里再
重复。感兴趣的同学就需要了解前文提过的WebTours航班订票系统,了解动态数据关联等。对
于RPT8.0不熟悉的同学,继续看下去也是有困难的,RPT很基础的东西还是需要自己看的.下面
也写得能多简单就多简单,详细的文档会使用新的模板以后再维护,以下只是截图以及图片
说明的罗列,而没有多余解%*&~~~。

*`X;V7Z _l0
      使用RPT对WebTours系统录制取消预订航班的脚本,如下:
51Testing软件测试网*L\-}mo4`K`0Y
简单看一下脚本,在itenary.pl 对需要关联的数据进行引用,如图
 
51Testing软件测试网4orpoE(_ l C&p
在下面的http request中用引用对需要做关联数据的数据进行替换。如图
 
 
这些关联是使用系统机制自动做的,我们回放一下脚本,看看有什么错:
我们假如录制脚本的时候有5条记录,录制后还有4条,现在回放:
6aSh4K$c z Ly4S%E0点击"Run……"回放,打开 视图Ptotocol Date,查看视图Event Log选项卡,发现几条消息,如图
因为现在服务器响应的记录没有那么多。不过还是成功取消了预定,查一下Itineary现在记录还有3条了。
51Testing软件测试网7J-}x(B T_
  现在我们增加航班记录的数目,使超过录制脚本的时候记录数目,假设现在记录数目为6条,点击"Run……"以
Launch Test进行回放,打开视图Ptotocol Date,查看视图Event Log选项卡,OK,没有消息,但不要高兴
太早,我们检查一下Itineary,并没有成功的取消一条预定记录,看response content,如图
 
     想想也不难理解啊:服务器响应的记录数目超过脚本中关联的记录数目,有一部没能进行关联,那向服务发
送的请求不完整,服务器不能正常的处理。
 
     我们需要自己对动态数据进行关联,看看RPT提供什么样的支持吧,看看与LR9.5有什么不一样的,对于RPT8.0
我们使用Custom Code进行java编码来实现手到的动态数据关联。
    对请求进行处理,不再使用关联数据的参数进行替换了,在请求的data区域右键选择removeAll Subustitutions。51Testing软件测试网{2U+pR Y,WiNB
对响应不也要进行关联保存了。全部取消引用,右键选择已经关联的数据执行clear Reference操作。然后在响应数据
区点击右键,创建字段引用Create FieldReference,响应数据的颜色发生变化,右键属性,输入字段引用的名称为
FlightRefer,供我们的custom code做参数。
 
   选中请求insert costom code如图
   
    add 参数,选择fieldRefer。如图
      点击生成代码:维护代码,如图
###########################################################
截图是如此的不清晰,把代码贴上:
package test.custom;
import java.util.regex.Matcher;51Testing软件测试网s&y+hp ]5P
import java.util.regex.Pattern;
import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
/**
;rH4g v R9eE3OM0 * @author unknown
B[|W-]&u0 */
)T}j[i0public class CustomCode implements
B#cLt(~ Vm0  com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {
 /**
k5g#wAh%~$b"a-N(b0  * Instances of this will be created using the no-arg constructor.51Testing软件测试网$a0Js,T(]/J~@
  */51Testing软件测试网 R6n#L(jVL1u?
 public CustomCode() {51Testing软件测试网 RFTr}+] J
 }
 /**
x-t;@1`L/e]|j0  * For javadoc of ICustomCode2 and ITestExecutionServices interfaces, select 'Help Contents' in the
Q!d v.{S(c0  * Help menu and select 'Extending Rational Performance Tester functionality' -> 'Extending test execution with custom code'51Testing软件测试网 RUpolA
  */
$w~-kJ^.H0 public String exec(ITestExecutionServices tes, String[] args) {
/@8U3WF,C]7wb?0  StringBuffer sb = new StringBuffer();51Testing软件测试网O'HB B/K(JrR
  sb.append("1=on");51Testing软件测试网5\Ow Y-UMb
  String RegExpStr1 = "<[[^>].]*?name=\"flightID\"(([[^>].]*?value=\"(.*?)\")|(?:[[^>].]*?>))";
#kuA?6\0  String RegExpStr2="<[[^>].]*?name=\"].]*?value=\"(.*?)\">\\.cgifields\"(([[^>].]*?value=\"(.*?)\")|(?:[[^>].]*?>))";
5K$Xh G8R @0 51Testing软件测试网 JO&f ~ K_ z
  Pattern pattern1 = Pattern.compile(RegExpStr1, Pattern.DOTALL);
%j'Y0hv)Cl0  Pattern pattern2 = Pattern.compile(RegExpStr2, Pattern.DOTALL);51Testing软件测试网/{3bShQq2_;d
  Matcher matcher1 = pattern1.matcher(args[0]);51Testing软件测试网 e2i#K~b+gm
  Matcher matcher2 = pattern2.matcher(args[0]);
%\*s*r!SmI,g j0  while (matcher1.find()) {
g+UqyBV0   System.out.println(matcher1.group(3));51Testing软件测试网4e$}6vo/]
   sb.append("&flightID=" + matcher1.group(3));
(E6`2uk"F2Wu0  }
4r6[o{7TR2^J0  while (matcher2.find()) {
^]$ny2ja2Z-^0   System.out.println(matcher2.group(3));
:R l O Z5jiHwTo x'n4]0   sb.append("&.cgifields=" + matcher2.group(3));
Ah/}N Yh#i ?3v0  }51Testing软件测试网:c})y;C0r
  sb.append("&removeFlights.x=65&removeFlights.y=12");
  return sb.toString();51Testing软件测试网_-s/n3j(~%bgs6x?
 }
}51Testing软件测试网#~4RjST m9V-CH#z
############################################################
 
      使用java正则表达式从响应中提取我们在以后请求要使用到的数据,并组装在一起。请求代码替换为custom code如图
    好了,脚本编辑工作完成,回放脚本,脚本执行没有打印消息说关联错误什么的,查一下Itineary,也
成功的取消了预订记录。
-cF1q&z0iz0OVER!

TAG:

 

评分:0

我来说两句

Open Toolbar