使用自定义代码对数据池进行随机访问
上一篇 / 下一篇 2006-12-08 09:05:39 / 精华(2) / 置顶(2) / 个人分类:软件测试技术
9[$q$zuW0[关键字]代码 数据池51Testing软件测试网6KJ M l$`/]yY%M
为了更加稳健的测试,可以用自定义代码使 Performance Tester 随机化。目前,Performance Tester 数据池中的元素只能按照顺序进行访问。这篇文章讨论了作者如何创建自定义的 Performance Tester 代码,并用随机数据访问来实现数据池。这篇文章提供的了 RPTDataPool 类,以及如何实现它的详细说明。
9t}N^9Q'gSjx0
t F%M8S"Z jN%m0 注意:这篇文章适用于 IBM® Rational® Performance Tester Version 6.1.2.00251Testing软件测试网Q8y/k@:}u
^3I [ WE0 好的测试不仅仅是重复执行相同的动作。为了更好的模拟实际用户的动作,测试人员可以利用IBM Rational Performance Tester 中的数据池。这是远超出使用静态记录测试的一步,因为它允许测试为每个执行来选择不同的变量。例如,无论什么时候应用软件要求用户输入搜索条件,比如一个电影的名字,一个标题或者标题的一个部分都可以从数据池中选择。51Testing软件测试网v:LQ3kOI@"f A
51Testing软件测试网5s M{&dC)GO+R-~6MQ1x0u
目前Rational Performance Tester数据池仅仅是顺序存储。在这个电影搜索的例子中,每次你运行这个测试时,相同电影名称的搜寻都是以相同的顺序来进行处理的。通过对要搜索的标题进行随机选择,可以提高测试的稳健性。
0F)] hp](v#Y0
3Wc5uM.J-e0 数据池文本文件51Testing软件测试网AD?^.i`FzI
51Testing软件测试网 ^w a(cmJ(d-Y&Y
在i5/OS系统测试环境中,IBM测试自动化小组自从2004年就一直在将Mercury LoadRunner的脚本转换到 Rational Performance Tester。为了随机化i5/OS测试的变量选择,我们创建了一个 Rational Performance Tester自定义代码的包,来对数据池中的元素进行随机存储。这个执行一点都没有用到 Rational Performance Tester数据池的特性。相反,Rational Performance Tester DataPool 类读取的文本文件中包含要使用的数据池条目。51Testing软件测试网{j`4Zp5WK_m
-M:S\M&P+d q Ev:G0 这个将选择元素随机化的数据池文件是一个每行仅包含一个元素的纯文本文件。用Rational Performance Tester来实现它的一个简单的方法,就是为测试项目的文本文件创建一个数据池文件夹。一个文件输出包括这些文本文件,因为它们被包含在 Rational Performance Tester项目中。当转换Mercury LoadRunner脚本时,你可以通过LoadRunner数据文件来实现。
t{9x ZHr4jfXJs)F051Testing软件测试网s%Q@]h@w
RPTDataPool类51Testing软件测试网 A8R Jh`4yK7\9|
51Testing软件测试网 Te$`;r-d j'bG
这个文本数据的文件名传给创建者,整个文件在首次访问尝试时就被读取进入了 Java™ Vector 对象。为了从这个数据池中随机重新找到一个条目,可以使用getaDataPoolItem 方法。(参见列表1。)51Testing软件测试网y*IX8s~,O'A _M
51Testing软件测试网X~T;M+UMc
注意事项51Testing软件测试网`@+z&V.CC@
"k6}@b"{:S6F0 记住整个文件在测试的开始就已被读入存储器是十分重要的。巨大的数据池将会用到大量的内存,这将会降低加载和Rational Performance启动的速度。巨大的Rational Performance Tester测试数据池也会发生类似的情况。51Testing软件测试网{ WvoakR5}
51Testing软件测试网:@#jl shQ:E
你可以使用每行包含多个元素的数据池,但是用户必须在这个测试的自定义代码中增加一些功能来取出单个元素。51Testing软件测试网 h D#G N;U2XA7Eir
51Testing软件测试网o7KRl5X&{g
.kHV6n cM0 列表1. getaDataPoolItem 方法51Testing软件测试网(|m*t6n2J#|x
51Testing软件测试网ykuj@
import .io.*;51Testing软件测试网:kA._,D!G;b3J&ZdX
import .util.Vector;
V!Lb5qxEp0public class RPTDataPool {
'uk4d!R\)dA+k.BZ0 private boolean DataPoolIsLoaded = false;51Testing软件测试网1x l\1~'@`1]
private String DataPoolFileName;
tvn(|pB0 private Vector DataPool;51Testing软件测试网 XRB)S.w,x
private int DataPoolCount = 0;
(cg"X9L:DO j$s8e@0 51Testing软件测试网$~5_K%_%s C g5n
public RPTDataPool( String fileName ) {
6u%cu5U0?ez0 DataPoolFileName = fileName;51Testing软件测试网4K(Yq1k1v9K)Qh:_-D
DataPool = new Vector();51Testing软件测试网4oV"@v6y X
DataPoolCount = fillVector( DataPoolFileName, DataPool);51Testing软件测试网,TWQ|^NN0w e
DataPoolIsLoaded = true;
j4m&}XL4K^m0 }51Testing软件测试网jR4w)o~Q
51Testing软件测试网l-e M&uX1?#B6a
public String getaDataPoolItem( ) {
w%f*s1m$^0 if( !DataPoolIsLoaded ) {
f,?'?nStW0 //System.out.println("loading:" + DataPoolFileName);
$j'EsEN~0 DataPoolIsLoaded = true;
U^7UV RHh,qQV0 }51Testing软件测试网EMa@+zI iD
return (String) DataPool.elementAt((int)
DR0y @$Po;wwG0 (Math.floor(Math.random() * (DataPoolCount))));51Testing软件测试网lz-c U{(|
}51Testing软件测试网(R"z9zp5D*TY
3g CpmZ6z0 private int fillVector( String fileName, Vector FileLines) {51Testing软件测试网1V5K%W.vU ^
// take the Datapool file and read it into a Vector
0?;J`3|'K%S'q%i7u5Z0 // do this only once per test51Testing软件测试网@1K3W&MG
int fileLineCounter = 0;51Testing软件测试网` _9v%w$N"DmP
51Testing软件测试网#E%h0n-G.w#J9kQ
BufferedReader brInReader = null;51Testing软件测试网a?1a|iBoL
51Testing软件测试网;q{u!JJ
// read from the file
L;Pv:A"Y}2q0 // try to setup a buffered reader and open the file51Testing软件测试网(SR}5S%yF
try { brInReader = new BufferedReader(new FileReader(fileName));}51Testing软件测试网OGy{*f6J*NP
catch(Exception error)51Testing软件测试网2{#b:adT"s
{
F%rD@ Y0 //System.out.println("Error Opening DataPool File: " + error);51Testing软件测试网e+cGtm[
return 0;51Testing软件测试网[.\$|i/L/i%Im
}51Testing软件测试网 p^;` Y(f
51Testing软件测试网S\m(X`%}C#x
// read the file and place the lines in an array51Testing软件测试网L9P\g)J8g
// get the first line of the file
Qnu ]6Fw0 String sInLine = ReadLine(brInReader);51Testing软件测试网knD9a(rU
3J:VY4G\@y1]0 // read through the file51Testing软件测试网VY-hRs(^{Y$W4n
while (sInLine != null)