用TestComplete实现一个关键字驱动测试框架

用TestComplete实现一个关键字驱动测试框架
陈能技  2008-6-27
     最近在做使用TestComplete做一个自动化测试项目的时候,发现在TestComplete中,可以利用其中的FindChild方法来实现一个简单的关键字驱动的框架,方法如下:
(1)在Excel编写测试关键字。
在Excel文件中编写测试关键字,包括测试对象、测试操作、输入的参数等,如图所示:
 
(2)编写测试脚本,读入Execl中的测试关键字。
// 全局的变量数组,用于存储从Excel读入的测试关键字
Var KeyWord_TestObject,KeyWord_Operation,KeyWord_Parameters;
//.............................................................................
// 目的:通过ADO查询Excel数据
// 输入参数:
//            ExcelFilePath :Excel文件的路径
//            QueryString:查询语句
// 返回结果:
//            返回所有关键字数据,赋值给KeyWord_TestObject,KeyWord_Operation,KeyWord_Parameters这3个全局的变量数组
// 注意事项:
// 作者:陈能技
// 日期:2008-6-3
//.............................................................................
Function ReadKeyWordFromExcel(ExcelFilePath,QueryString);
 Var ConStr,Connection,RS,ClassObjArray,LineIndex,ClassObject:OleVariatn;
begin
 // 定义连接串
 ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%S;Extended Properties=Excel 8.0';
 ConStr := Utilities.Format(ConStr,[ExcelFilePath]);
 Connection := Sys.OleObject('ADODB.Connection');
 // 打开连接
 Connection.Open(ConStr);
 // 执行查询操作
 RS := Connection.Execute(QueryString);
 // 创建变量数组
 KeyWord_TestObject := CreateVariantArray(0,0);
 KeyWord_Operation := CreateVariantArray(0,0);
 KeyWord_Parameters := CreateVariantArray(0,0);
 LineIndex := 0;
 // 循环读入所有数据
 While Not RS.EOF do
 begin
    Inc(LineIndex);
    // 动态修改数组大小
    VarArrayRedim(KeyWord_TestObject,LineIndex-1);
    VarArrayRedim(KeyWord_Operation,LineIndex-1);
    VarArrayRedim(KeyWord_Parameters,LineIndex-1);  
    // 赋值
    KeyWord_TestObject[LineIndex-1] := RS['TestObject'].Value;
    KeyWord_Operation[LineIndex-1] := RS['Operation'].Value;
    KeyWord_Parameters[LineIndex-1] := RS['Parameters'].Value;   
    // 下一条数据
    RS.MoveNext;
 end;
 RS.Close;
 // 关闭连接
 Connection.Close;
end;
Procedure Test_ReadKeyWordFromExcel;
 Var I : OleVariant;
begin
 ReadKeyWordFromExcel('D:/Code/MyTestSuite/Data/KeyWord.xls','Select * from [KeyWord$]');
 For I := 0 to VarArrayHighBound(KeyWord_TestObject,1) do
 begin
    Log.Message(VarToStr(KeyWord_TestObject[I])+ '   | '
               + VarToStr(KeyWord_Operation[I])+' | '
               + VarToStr(KeyWord_Parameters[I]));
 end; 
end;
 
(3)封装一个函数,用于根据Excel读入的测试关键字创建可用的测试对象。
Uses CheckUIPerformance;
//.............................................................................
// 目的:返回当前进程中的指定测试对象
// 输入参数:
//            Process :进程对象
//            TestObject:测试对象的描述
// 返回结果:
//            返回当前进程中的指定测试对象
// 注意事项:
// 作者:陈能技
// 日期:2008-6-3
//.............................................................................
Function getObject(Process,TestObject);
var
 PropArray, ValuesArray;
begin
 PropArray := CreateVariantArray(0, 0);
 ValuesArray := CreateVariantArray(0, 0);
 PropArray[0] :='FullName';
 ValuesArray[0] := TestObject;
 // 调用 FindTestObject 函数,返回当前进程中的指定测试对象
 Result := FindTestObject(Process,PropArray,ValuesArray);
end;
 
这里调用了CheckUIPerformance脚本中编写的FindTestObject函数,该函数用于根据测试对象的描述信息查找指定进程中的测试对象,脚本如下:
Function FindTestObject(Process,PropArray,ValueArray);
 var res;
begin
 Result := False;
 // 查找指定的测试对象
 Process.Refresh();
 res := Process.FindChild(PropArray, ValueArray, 1000);
 // 返回测试对象
 if res.Exists then
 begin
    Result := res;
    Log.Message('找到测试对象: ' + res.FullName)
 end
 else
    Log.Message('未找到测试对象');
end;
 
(4)封装一个函数,用于根据Excel读入的测试关键字执行测试操作。
//.............................................................................
// 目的:执行测试操作
// 输入参数:
//            TestObject :测试对象
//            Operation:测试操作的描述
//            Parameters:测试操作对应的参数
// 返回结果:无
// 注意事项:
// 作者:陈能技
// 日期:2008-6-3
//.............................................................................
Function DoOperation(TestObject,Operation,Parameters);
begin
 case Operation of
    'Keys' : TestObject.Keys(Parameters);
    'Click' : TestObject.Click;
    // 添加其它类型的测试操作的处理代码 ...
 else
    Log.Error('不支持该测试操作!');
 end; 
end;
 
注:这里仅仅添加了 Keys 和 Click 的测试操作。
 
(5)关键字驱动的核心框架
有了前面几个函数的基础,就可以写出下面一个简单的关键字驱动的核心框架:
//.............................................................................
// 目的:关键字驱动的核心框架
// 输入参数:
// 返回结果:
// 注意事项:
// 作者:陈能技
// 日期:2008-6-3
//.............................................................................
Procedure Driver;
 Var TestObject,I;
begin
 // 1、读入关键字
 ReadKeyWordFromExcel('D:/Code/MyTestSuite/Data/KeyWord.xls','Select * from [KeyWord$]');
 // 2、遍历关键字,创建测试对象、执行测试操作
 For I := 0 to VarArrayHighBound(KeyWord_TestObject,1) do
 begin
//     Log.Message(VarToStr(KeyWord_TestObject[I])+ '   | '
//                + VarToStr(KeyWord_Operation[I])+' | '
//                + VarToStr(KeyWord_Parameters[I]));
    // 创建测试对象
    TestObject := getObject(Sys.Process('flight4a'),VarToStr(KeyWord_TestObject[I]));
    // 执行测试操作
    DoOperation(TestObject,VarToStr(KeyWord_Operation[I]),VarToStr(KeyWord_Parameters[I]));  
 end;
end;
 
经试验,这种方法是可以实现类似QTP的关键字驱动测试框架,但是仅仅是一个非常基础的关键字驱动测试框架,如果想把这个框架应用在实际项目中的话,还需要进一步地修改和完善,还有很多工作要做,包括:
(1)关键字编辑器的编写。
目前采用直接在Excel文件中填写测试关键字的方法,存在效率和可用性问题,需要创建一个类似QTP的更加好用的关键字视图编辑器。
(2)添加更多的测试操作和方法。
目前作为试验,仅仅添加了 Keys 和 Click 的测试操作,还有很多控件的很多测试方法需要封装,例如List控件的ClickItem、SelectItem等,另外,对测试对象的属性赋值操作、属性检查操作(类似于QTP的CheckPoint)等都需要进一步地编写框架代码来处理。
(3)关键字代码与测试脚本之间的同步。
仅仅依赖Excel的关键字数据来实现整个项目的自动化测试未免过于理想化了,QTP提供了很好的代码生成机制,关键字视图的数据与专家视图的测试脚本之间可以随时同步、切换,因此这个关键字驱动测试框架还缺少一个代码生成器,如何建立Excel数据与测试脚本之间的映射关系是下一步的主要工作之一。
 

你可能感兴趣的:(用TestComplete实现一个关键字驱动测试框架)