继《
LoadRunner之自定义HTTP请求》之后,就要开始《RPT8.0之自定义HTTP请求》了,
其实这个题目是不怎么合适的,但也不愿意再改。前文说过的很多话,不想也不会在这里再
重复。感兴趣的同学就需要了解前文提过的WebTours航班订票系统,了解动态数据关联等。对
于RPT8.0不熟悉的同学,继续看下去也是有困难的,RPT很基础的东西还是需要自己看的.下面
也写得能多简单就多简单,详细的文档会使用新的模板以后再维护,以下只是截图以及图片
说明的罗列,而没有多余解%*&~~~。
51Testing软件测试网0E3V}[Q:g
使用RPT对WebTours系统录制取消预订航班的脚本,如下:
51Testing软件测试网{"yZkq7M
简单看一下脚本,在itenary.pl 对需要关联的数据进行引用,如图
5qrh/J
w)G0在下面的http request中用引用对需要做关联数据的数据进行替换。如图
这些关联是使用系统机制自动做的,我们回放一下脚本,看看有什么错:
我们假如录制脚本的时候有5条记录,录制后还有4条,现在回放:
7S l8]6W!u?SA,|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],M5LVa+]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 the
51Testing软件测试网N|
uN4B5_Y * Help menu and select 'Extending
Rational Performance Tester functionality' -> 'Extending test execution with custom code'
Ic&[6co6|0 */
51Testing软件测试网;Pcn2H/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,wAQk|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%i tbR xu `B)W0 sb.append("&.cgifields=" + matcher2.group(3));
51Testing软件测试网0C RT7Nd;D }
51Testing软件测试网u]5CO+M ET 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!