使用自定义代码对数据池进行随机访问
上一篇 / 下一篇 2008-06-17 13:11:27 / 个人分类:Rational
1208328177
- 自动化测试:
- 测试文档:
使用自定义代码对数据池进行随机访问
POJ)x%dp3PL0为了更加稳健的测试,可以用自定义代码使Performance Tester随机化。目前,Performance Tester数据池中的元素只能按照顺序进行访问。这篇文章讨论了作者如何创建自定义的Performance Tester代码,并用随机数据访问来实现数据池。这篇文章提供的了RPTDataPool类,以及如何实现它的详细说明。
注意:这篇文章适用于IBM® Rational® Performance Tester Version
好的测试不仅仅是重复执行相同的动作。为了更好的模拟实际用户的动作,测试人员可以利用IBM Rational Performance Tester中的数据池。这是远超出使用静态记录测试的一步,因为它允许测试为每个执行来选择不同的变量。例如,无论什么时候应用软件要求用户输入搜索条件,比如一个电影的名字,一个标题或者标题的一个部分都可以从数据池中选择。
目前Rational Performance Tester数据池仅仅是顺序存储。在这个电影搜索的例子中,每次你运行这个测试时,相同电影名称的搜寻都是以相同的顺序来进行处理的。通过对要搜索的标题进行随机选择,可以提高测试的稳健性。
数据池文本文件
在i5/OS系统测试环境中,IBM测试自动化小组自从2004年就一直在将Mercury LoadRunner的脚本转换到Rational Performance Tester。为了随机化i5/OS测试的变量选择,我们创建了一个Rational Performance Tester自定义代码的包,来对数据池中的元素进行随机存储。这个执行一点都没有用到Rational Performance Tester数据池的特性。相反,Rational Performance Tester DataPool类读取的文本文件中包含要使用的数据池条目。
这个将选择元素随机化的数据池文件是一个每行仅包含一个元素的纯文本文件。用Rational Performance Tester来实现它的一个简单的方法,就是为测试项目的文本文件创建一个数据池文件夹。一个文件输出包括这些文本文件,因为它们被包含在Rational Performance Tester项目中。当转换Mercury LoadRunner脚本时,你可以通过LoadRunner数据文件来实现。
RPTDataPool类
这个文本数据的文件名传给创建者,整个文件在首次访问尝试时就被读取进入了Java™ Vector对象。为了从这个数据池中随机重新找到一个条目,可以使用getaDataPoolItem方法。(参见列表1。)
注意事项
记住整个文件在测试的开始就已被读入存储器是十分重要的。巨大的数据池将会用到大量的内存,这将会降低加载和Rational Performance启动的速度。巨大的Rational Performance Tester测试数据池也会发生类似的情况。
你可以使用每行包含多个元素的数据池,但是用户必须在这个测试的自定义代码中增加一些功能来取出单个元素。
51Testing软件测试网5d;Glk7}aG
列表1. getaDataPoolItem方法
yFp_1_7v0
9ri-D jcU*?0import .io.*;51Testing软件测试网BDG#az"B%e#q
import .util.Vector;
S"qJ.X]T _ k+uJqR0public class RPTDataPool {51Testing软件测试网R)ca/re4g-O
private boolean DataPoolIsLoaded = false;
$^7P!XLff$_0 private String DataPoolFileName;
zVn]g;}.D*S?x
I0 private Vector DataPool;
*{HnR0m0 private int DataPoolCount = 0;
)x D7k!\b0
&b8D[^n\'Pp%?0 public RPTDataPool( String fileName ) {
]n*u U s0 DataPoolFileName = fileName;
l5GIZy.r-p W\.A!H0 DataPool = new Vector();51Testing软件测试网W7m%l n1Hyd
DataPoolCount = fillVector( DataPoolFileName, DataPool);
dJ|^/eKk0 DataPoolIsLoaded = true;
Gv2D@
al;ar b0 }
W1j*OZ:~#m+V"P
p6|-j0
hTV9U:Pcf0 public String getaDataPoolItem( ) {
'|m2n$l"P0 if( !DataPoolIsLoaded ) {
-C[g hRc+]D z(`0 //System.out.println("loading:" + DataPoolFileName);
U_Ag|!eqm0 DataPoolIsLoaded = true;
F%I7^,|
lT#e Ae)O0 }51Testing软件测试网-\Pf_I8St$C(f
return (String) DataPool.elementAt((int)51Testing软件测试网a&H5x