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

RPT8.0自定义HTTP请求

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

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

5qrh/J w)G0在下面的http request中用引用对需要做关联数据的数据进行替换。如图
 
 
这些关联是使用系统机制自动做的,我们回放一下脚本,看看有什么错:
我们假如录制脚本的时候有5条记录,录制后还有4条,现在回放:
7S l8]6W!u ?S A,|3Z0点击"Run……"回放,打开 视图Ptotocol Date,查看视图Event Log选项卡,发现几条消息,如图
因为现在服务器响应的记录没有那么多。不过还是成功取消了预定,查一下Itineary现在记录还有3条了。

Z@3n8xb0T0  现在我们增加航班记录的数目,使超过录制脚本的时候记录数目,假设现在记录数目为6条,点击"Run……"以
Launch Test进行回放,打开视图Ptotocol Date,查看视图Event Log选项卡,OK,没有消息,但不要高兴
太早,我们检查一下Itineary,并没有成功的取消一条预定记录,看response content,如图
 
     想想也不难理解啊:服务器响应的记录数目超过脚本中关联的记录数目,有一部没能进行关联,那向服务发
送的请求不完整,服务器不能正常的处理。
 
     我们需要自己对动态数据进行关联,看看RPT提供什么样的支持吧,看看与LR9.5有什么不一样的,对于RPT8.0
我们使用Custom Code进行java编码来实现手到的动态数据关联。
    对请求进行处理,不再使用关联数据的参数进行替换了,在请求的data区域右键选择removeAll Subustitutions。
%}S)eW&a/MX,s"f0对响应不也要进行关联保存了。全部取消引用,右键选择已经关联的数据执行clear Reference操作。然后在响应数据
区点击右键,创建字段引用Create FieldReference,响应数据的颜色发生变化,右键属性,输入字段引用的名称为
FlightRefer,供我们的custom code做参数。
 
   选中请求insert costom code如图
   
    add 参数,选择fieldRefer。如图
      点击生成代码:维护代码,如图
###########################################################
截图是如此的不清晰,把代码贴上:
package test.custom;
import java.util.regex.Matcher;51Testing软件测试网S;uN3lrm \
import java.util.regex.Pattern;
import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
/**51Testing软件测试网'Y:W5}e.h |
 * @author unknown51Testing软件测试网YZ2`1pi{9Uq.|
 */51Testing软件测试网Z;GJ;_D3~D1\&S
public class CustomCode implements51Testing软件测试网J],M5L Va+]A(EO
  com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {
 /**
B&h0Y:m,xo0  * Instances of this will be created using the no-arg constructor.
k:D d [n0  */
5{)L\B d{S0 public CustomCode() {51Testing软件测试网!|b?}R:nX"H
 }
 /**
e(z7Q.KDr+y `0  * For javadoc of ICustomCode2 and ITestExecutionServices interfaces, select 'Help Contents' in the51Testing软件测试网 N | uN4B5_Y
  * Help menu and select 'Extending Rational Performance Tester functionality' -> 'Extending test execution with custom code'
Ic&[6co6|0  */51Testing软件测试网;Pc n2H/x
 public String exec(ITestExecutionServices tes, String[] args) {51Testing软件测试网b8r|,z0^z,~ U:OB6Y.M
  StringBuffer sb = new StringBuffer();51Testing软件测试网6a7JG%k(~
  sb.append("1=on");51Testing软件测试网2o"kwA8RyiY
  String RegExpStr1 = "<[[^>].]*?name=\"flightID\"(([[^>].]*?value=\"(.*?)\")|(?:[[^>].]*?>))";51Testing软件测试网qS.FeE tf;~1S
  String RegExpStr2="<[[^>].]*?name=\"].]*?value=\"(.*?)\">\\.cgifields\"(([[^>].]*?value=\"(.*?)\")|(?:[[^>].]*?>))";
q!I1zY/B/Dg(D0 51Testing软件测试网:oNwmZ)Z _
  Pattern pattern1 = Pattern.compile(RegExpStr1, Pattern.DOTALL);51Testing软件测试网UZd1R RYSV
  Pattern pattern2 = Pattern.compile(RegExpStr2, Pattern.DOTALL);51Testing软件测试网 }h3x2i8i$M
  Matcher matcher1 = pattern1.matcher(args[0]);51Testing软件测试网5c,w AQk|r+P.Y d
  Matcher matcher2 = pattern2.matcher(args[0]);51Testing软件测试网YU-{d'j,r
  while (matcher1.find()) {
9|Z"B l h0   System.out.println(matcher1.group(3));51Testing软件测试网4Fd2F;]Cdee @S1zV
   sb.append("&flightID=" + matcher1.group(3));51Testing软件测试网{mz&S2r;H
  }
w)o3T B:C l2J0  while (matcher2.find()) {
p;Kw)itc"g0   System.out.println(matcher2.group(3));
8Og%itbR xu`B)W0   sb.append("&.cgifields=" + matcher2.group(3));51Testing软件测试网0CRT7N d;D
  }51Testing软件测试网u]5CO+MET
  sb.append("&removeFlights.x=65&removeFlights.y=12");
  return sb.toString();
'i0A}|aS)q0 }
}51Testing软件测试网C!z'A+b}
############################################################
 
      使用java正则表达式从响应中提取我们在以后请求要使用到的数据,并组装在一起。请求代码替换为custom code如图
    好了,脚本编辑工作完成,回放脚本,脚本执行没有打印消息说关联错误什么的,查一下Itineary,也
成功的取消了预订记录。51Testing软件测试网VE-{v1[e
OVER!

TAG:

 

评分:0

我来说两句

Open Toolbar