重新起航

如何在TC中实现数据驱动测试

上一篇 / 下一篇  2013-02-05 10:35:31 / 个人分类:TestComplete

如何在TC中实现数据驱动测试

在自动化的测试工作中 我们不可避免的要使用大量的测试数据,用于验证或者测试输入。

对于测试数据的建立和管理,我们有许多的方法,如建立数组、读取文件等等,在一些主流的测试工具中,工具会提供给用户一个数据环境,方便用户对一些测试输入进行参数化操作。

Test complete测试工具中,系统环境提供三种不同的数据驱动方式。

分别为:

1. Excel方式

Using Excel Files as Data Storages

Describes specifics of retrieving data from Excel worksheets.

2. CSV方式

Using CSV Files as Data Storages

Describes specifics of retrieving data from file that store comma-separated values.

3.ADO方式

Using Database Tables as Data Storages

Describes specifics of retrieving data from database tables.

接下来一一为大家做简单的介绍。

 

1.    使用CSV文件

用户可以建立一个CSV文件用户模拟用户的测试输入。TC中支持用户从CSV文件中存储和读取数据。

在关键字驱动测试中,用户可以使用DB Table参数对脚本进行参数化。

而对于Script脚本,TC提供CSV Driver对象,对文件的内容进行读取。

在使用CSV文件时要注意以下几点:

 

1.           对于CSV文件中每一行的数据只能用一次,多行的数据不能同时使用。

2.           在文件的第一行中需要标明列名。

3.           需要使用Jet引擎读取文件中的数据。

4.           CSV文件的格式取决于Schema.ini定义文件,并且要与CSV文件在同一文件夹中。Schema.ini文件能够定义多个文件,并对CSV文件的定界符,字符类型进行定义,例如:定义一个使用‘;’做分界符的字符格式为ANSICSV文件。

// The contents of the Schema.ini

[DDT_Info.csv]

Format=Delimited(;)

CharacterSet=ANSI

           

5.            如果没有自定义Schema.ini文件,CSV文件的格式将读取注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text中的设置。例如,CSV文件可以使用TAB分界符、CSV分界符、自定义字符、固定长度等等作为分界符。

6.           Jet引擎中,一个进程最大支持64个连接数。当测试完成后,需要关闭这些链接。TC可以使用DDT.CloseDriver方法进行关闭。

7.            

2.    使用EXCEL文件

用户可以使用Excel表格作为数据源,在使用是excel表格方式时,要注意以下几点:

1.           在每一个excel页面中,每一行的数据只能用一次,多行的数据不能同时使用。

2.           对象可以使用excelODBCACE驱动从excel表格中读取数据。(ACE可以兼容execl 2007及其早期版本,而ODBC不兼容最新的Execl 2007

ACE的下载地址:

http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891

ODBC的默认设置由注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel key信息指定。

ACE的默认设置由注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access信息指定。

3.           数据的列名、数据以及行数是由Excel页面中已存在的数据的和列所决定的,例如数据的行数是最后一行在任意一列有数据的那一行所决定的。

4.           在注册表中有一个FirstRowHasNames子键值,可以用于设置execl表格的格式,用于标记表格的第一行是否为标题。在默认情况下表格中的数据行第一行为标题行。

5.           在表格中我们需要将每一列的数据都保持为同一类型的数据。

6.           Excel ODBC驱动可以将每一个单元格的数据截短为255字符,Excel会扫描你文件中前8行的数据,如果所有的数据中有一行小于256字符,那么数据将会全部截断为255字符,可以通过补丁解决这一问题:http://support.microsoft.com/kb/189897/

7.           Excel驱动中,一个进程最大支持64个连接数。当测试完成后,需要关闭这些链接。TC可以使用DDT.CloseDriver方法进行关闭。

 

 

3.    使用ADO方式

使用ADO的方式作为数据源,我们可以从数据库中读取我们所需要的数据,在使用中需要注意以下几点:

1.           在数据库表中,对象只能分别读取一行的数据,不支持一次读取使用多行的数据。

2.           Testcomplete使用Microsoft ADO从数据库中读取数据。

3.           读取的数据可以是数据库中的表、查询语句或者存储过程。

4.           对于不兼容OLE的数据,TC不支持,如一些图片或一些其他的二进制数据。

 

DDT的属性和方法介绍:

DDT对象有以下属性和方法,用户可以建立、关闭各种不同的数据驱动对象:

DDT Properties

Name                                   Description 

CurrentDriver                     Returns the last created driver.

DriverByName       Returns a driver specified by its name.

 

DDT Methods

MethodsName        Description 

ADODriver            Creates a driver for a database table or recordset that can be accessed via Microsoft'sADODB.

CloseDriver            Closes the driver’s connection to data and frees all resources associated with the driver.

CSVDriver              Creates a driver for a comma-value separated file.

ExcelDriver           Creates a driver for an Excel sheet.

 

而每一个驱动对象有以下的属性和方法,用户可以使用以下的属性和方法,对数据源进行相应的统计、跟踪、读取等操作:

DDTDriver Properties

PropertiesName     Description 

ColumnCount         Specifies the number of columns in the “driver” table.

ColumnName         Specifies the name of a column of the “driver” table.

Name                                   Specifies the driver’s name.

Value                       Returns a column value by column index.

 

DDTDriver Methods

MethodsName        Description 

EOF                         Indicates whether the driver is at the end of the data storage to which it provides access.

DriveMethod           Iterates through all the records of the data storage, to which the driver provides access, and executes a script. routine for each record.

Next                        Goes to the next set of data held in a storage to which the driver provides access.

 

我们来看一些实现代码,可以更好的帮助我们理解这些驱动方式的使用:

1.           CSV驱动方式:该方式由于笔者没有使用过,欢迎大家补充指教。

2.           Excel驱动方式:对于Excel的数据读取方式灵活多变,主要有以下几种:

a.     使用Excel的自身对象读取数据:

function Excelobj()

{

 //获得Excel程序对象

 var msExcle=Sys.OleObject("Excel.Application");

 //使用Excel打开数据源文件

 msExcle.Workbooks.Open("D:\\Book4.xls");

 //判断Excel程序是否已经启动打开文件

 msExcle.Visible=true;

 //读取源文件中第一行第一列的数据

 var m=msExcle.ActiveSheet.Cells(1,1);

 Log.Message(m);

 //关闭Excel对象

 msExcle.Workbooks.Close();

}

这种方式是采用直接打开Excel程序读取源文件,使用msExcle.ActiveSheet.Cells(row,col);方式读取数据,可以通过循环等方式读取所有数据源的数据,也可以灵活从源文件中读取指定位置的数据。

 

b.    使用TC中自带DDT方法和属性读取数据

function TestExcelDriver()

{

 var Driver; 

 // Creates the driver建立Excel驱动

 Driver = DDT.ExcelDriver("D:\\Book4.xls", "Sheet1"); 

 while (! Driver.EOF() )

 {

for(i = 0; i < DDT.CurrentDriver.ColumnCount; i++) 

// Processes data获取一列数据值

Log.Message(VarToStr(DDT.CurrentDriver.Value(i)));

// Goes to the next record

   Driver.next();

 } 

 Driver = null;

}

使用DDT自身的属性方法,我们也可以从数据文件中读取所需要的数据。使用该方法,驱动会逐行的按照列读取所有数据。

如在excel中的数据为:

11       21      31

12       22      32

                             运行该方法的过程为:

                                                           读取 一行数据:112131

                                                           执行Driver.next();

                                                           读取下一行数据:122232       

c.     建立OLE连接结合SQL语句:

function TestExcel()

{

 //建立OleDB连接

 var i = 0;

 var ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\book4.xls;Extended Properties=Excel 8.0";

 var cn=Sys.OleObject("ADODB.Connection");

//打开连接

 cn.Open(ConnStr);

//执行SQL语句,赋值为结果集

 var rs=cn.Execute("select ID,NAME,TAX from [Sheet1$] ");

 while(!rs.EOF)

 {

   //Fields(“列名”)

   Log.Message(rs.Fields("ID").Value );

   Log.Message(rs.Fields("NAME").Value );

   Log.Message(rs.Fields("TAX").Value );

   //赋值到数组变量中,可以在测试中灵活调用

   id[i]= rs.Fields("ID").Value;

   name[i]= rs.Fields("NAME").Value; 

   tax[i]= rs.Fields("TAX").Value;

   rs.MoveNext(); 

   i++;

 }

     //关闭连接

  cn.Close();

}

使用这种方式是需要在Excel表中的第一行定义每一列的名称,这样使用查询语句便可以找到所需要的语句。这种方式对于数据的读取较为灵活。

 

3.          ADO方式

建立一个ADO连接一般有以下几个步骤:

1.建立一个连接到数据库

2.打开连接语句

3.创建一个查询命令

4.执行查询语句

5.处理返回的结果集

6.关闭连接

示例如下:

function GetMaxSNofRequest()

{

//新建一个ADO连接

aCon = ADO.CreateConnection();

aCon.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Hybrid";

//打开连接

aCon.Open();

//创建查询命令

aCmd = ADO.CreateCommand();

aCmd.ActiveConnection = aCon; // Connection

//执行查询语句

strSQL = " select max(SN) from telerequest";

//处理返回的结果集

aRecSet = aCon.Execute(strSQL);

SNMAX = aRecSet.Fields.Item(0).Value;

//Log.Message(SNMAX);

SNMAX = SNMAX + 1;

//Log.Message(SNMAX);

//关闭结果集

aRecSet.Close();

//关闭ADO连接

aCon.Close();

}

通过ADO这种方式,测试人员可以很方便的即时获取测试数据库中的数据,可以即时的检验输入后产生的结果数据。

 

           使用数据驱动,我们能更好的控制测试输入,可以灵活的配置测试参数,提高测试的测试数据量。

           以上只是个人在使用中一些总结,不当之处欢迎大家指教。

 

 

 

 

Ralf.Wang

2010-11-10

 


TAG:

 

评分:0

我来说两句

Open Toolbar