This page is maintained for older versions of Rapise only. The latest documentation can be found at: https://rapisedoc.inflectra.com
Data Driven Testing

Purpose

Data Driven Testing is an automated testing technique in which test case data is separated from test case logic.  Each set of test case data consists of input values and a set of expected output values.  The actual output values are compared to the expected output values to determine whether the test passed.

You can perform data-driven testing either using an MS-Excel spreadsheet as the datasource or a relational database.

 

Using an MS-Excel Spreadsheet

The Spreadsheet object is useful for implementing data-driven tests.  It allows you to connect to, query, and read an excel spreadsheet from your test script.  To create a data-driven test, you will:

 

1.

Record a test.  The exact inputs you use for the recording will not matter as much as your interactions with the objects.  The following excerpt was recorded using www.google.com:

function Test()

{

      //Set Text Inflectra in q

      SeS('Obj1').DoSetText("Inflectra");

      //Click on btnG

      SeS('Obj2').DoClick();

}

The actions recorded were: (1) Type Inflectra into the search box. (2) Press the Google Search button.

 

2.

Parameterize the Test() function. The Test() function has all of the procedural logic for the test.  Replace input values with variables.  Encapsulate the logic in a nested function with one parameter for each variable you created.  As an example, we will parameterize  the Test() function we created in step one:

function Test()

{

      function Logic(searchterm){ //our new function encapsulates the test logic

        //Set Text using searchterm

        SeS('Obj1').DoSetText(searchterm) //here we changed a hard-coded value into a variable

        //Click on btnG

        SeS('Obj2').DoClick()

      }

      Logic("Inflectra") //don't forget to call your new function

}

 

3.

Create the test case data.  In an excel spreadsheet, create a column for every variable in step two.  Add columns for any expected output values you wish to verify.  Each row is a test case.

 

In our google example, we only have one input value (searchterm) and we're not comparing any expected output values, so we will only need one column in our spreadsheet.  Save the spreadsheet in the test folder as searchterms.xls:

data driven testing,spreadsheet

 

 

4.

Add spreadsheet to the test

Use "Add File(s)..." to add a spreadsheet to the test files:

twodialogsaddfilemenu

 

5.

Attach Spreadsheet object to searchterms.xls

Drag the 'searchterms.xls' from files tree into appropriate place in your test source:

spreadsheetdragfile

 

6.

Use Spreadsheet to access the test case data.

 

In our example, we use a Spreadsheet object and run the test logic once for every row.

function Test()

{

      function Logic(searchterm){

        //Set Text searchterm in q

        SeS('Obj1').DoSetText(searchterm)

        //Click on btnG

        SeS('Obj2').DoClick()

      }

 

      Spreadsheet.DoAttach('searchterms.xls', 'Sheet1');

 

      // Go through all rows

      while(Spreadsheet.DoSequential())

      {

              // Read cell value from column 0

              var term = Spreadsheet.GetCell(0);

              // Pass it into Logic function

              Logic(term);

      }

}

 

Using a Relational Database

Rapise comes with the Database query global object that allows you to send SQL queries to a database and then iterate through the results. The process for creating such a data-driven test is as follows:

1.

Record a test.  The exact inputs you use for the recording will not matter as much as your interactions with the objects.  The following excerpt was recorded using www.google.com:

function Test()

{

      //Set Text Inflectra in q

      SeS('Obj1').DoSetText("Inflectra");

      //Click on btnG

      SeS('Obj2').DoClick();

}

The actions recorded were: (1) Type Inflectra into the search box. (2) Press the Google Search button.

 

2.

Parameterize the Test() function. The Test() function has all of the procedural logic for the test.  Replace input values with variables.  Encapsulate the logic in a nested function with one parameter for each variable you created.  As an example, we will parameterize  the Test() function we created in step one:

function Test()

{

      function Logic(searchterm){ //our new function encapsulates the test logic

        //Set Text using searchterm

        SeS('Obj1').DoSetText(searchterm) //here we changed a hard-coded value into a variable

        //Click on btnG

        SeS('Obj2').DoClick()

      }

      Logic("Inflectra") //don't forget to call your new function

}

 

3.

Use Database to connect the test case data.. This assumes that you already have an ODBC or OLE DB compatible relational database that contains the necessary test data.

You drag the 'Database' global object into the script editor:

data driven testing,database

and then use:

·Database.DoAttach() - to make the database connection and specify the SQL query

·Database.GetRowCount() - to verify that there is data

·Database.DoSequential() - to loop through the dataset row by row

·Database.GetValue() - to get that row's data

Here is an example of the code needed to loop through a list of records (taken from the SpiraTest database as an example) and call our Logic() parameterized function with the appropriate test data:

var success = Database.DoAttach('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SpiraTest;Data Source=.' , 'SELECT * FROM TST_PROJECT' );

Tester .Assert('Successfully Connected', success );

var count = Database.GetRowCount();

Tester.Message(count);

//Loop through the rows

while( Database.DoSequential())

{

  var projectId = Database.GetValue("PROJECT_ID" );

  var name = Database.GetValue( "NAME");

  var description = Database.GetValue("DESCRIPTION" );

  Logic(name);

}