.

Dictionary Object in QTP. A complete guide.

Today we will see a less talked about and not so often used ‘Dictionary Object‘ in QTP. Note that, this is not something very QTP specific. Dictionary object was developed by Microsoft and is part of VB Scripting.Dictionary Object

What is Dictionary Object?

In simple terms, Dictionary object is similar to a typical array. The difference between a dictionary object and an array is that there is a unique key associated with every item of dictionary object. This unique key can help you in calling that item as and whenever required.

What is the syntax and how can we use dictionary object?

Shown below is a typical script.

Dim dict ‘ Create a variable.
Set dict = CreateObject(“Scripting.Dictionary”)
dict.Add “Company”, “HP” ‘ Adding keys and corresponding items.
dict.Add “Tool”, “QuickTest Pro”
dict.Add “Website”, “LearnQTP”
dict.Add “Country”, “India”

dict is an object of class Scripting.Dictionary. Company-HP, Tool-QuickTest Pro, Website-LearnQTP, Country-India are key-item pairs that were added using Add method on dict object.

Other methods available for dictionary object are Exists Method, Items Method, Keys Method, Remove Method, RemoveAll Method

Using Exists Method to check whether the key Country exists?

If dict.Exists(“Country”) Then
msg = “Specified key exists.”
Else
msg = “Specified key doesn’t exist.”
End If

Using Items and Keys method to retrieve ALL items and keys respectively from inside dictionary object.

i = dict.Items ‘ Get the items.
k = dict.Keys ‘ Get the keys.
For x = 0 To dict.Count-1 ‘ Iterate the array.
msgbox  i(x) & ” :” & k(x)
Next

Using Remove method to remove Website – LearnQTP pair from the object.

dict.Remove(“Website”)

Using Remove all method to clear the dictionary

dict.RemoveAll ‘ Clear the dictionary.

What are the places where it can be used?

When you want to share data between different actions in a test, dictionary object can be used. To do this you should create a reserved test object for the Dictionary object. Here is a process to set up a reserved dictionary object. [Source]

  1. Open Window’s registry by opening a Run window and entering regedit.
  2. Navigate to HKEY_CURRENT_USER\Software\Mercury Interactive\QuickTest Professional\MicTest\ReservedObjects.
  3. Create a new key (folder) named GlobalDictionary by right-clicking on the ReservedObjects key and selecting New -> Key.
  4. Under the new key, create a String value named ProgID by right-clicking on GlobalDictionary and selecting New -> String Value.
  5. Assign “Scripting.Dictionary” to the new ProgID string value by right-clicking on ProgID and selecting “Modify.”
  6. If QTP window is already open you need to close and restart it.
  7. Now to check whether dictionary object was installed successfully in registry, simple write GlobalDictionary. (don’t forget the dot) and you should see a drop-down containing all methods and properties associated with dictionary object.

QTP Dictionary Object

Why dictionary object and why not array only?

As shown in the example above, dictionary object was used with the index (key) being string. In the case of array, the index can be ONLY numeric. Then of course we have some obvious advantages like referencing a value with a meaningful keys etc.

What are the other places where it can be used?

Alex Dinu has written a good article where he found the usefulness of dictionary  object. Microsoft has another nice article on where Dictionary Object can be used.

Over to you. Have you used dictionary object in the past? Why?

Have you downloaded the FREE Optimizing QTP eBook yet? Get It Now!

If you want to keep track of further articles on QTP. I recommend you to subscribe via RSS feed. You can also subscribe by Email and have new QTP articles sent directly to your inbox.

15 comments ↓

#1 Stefan on 02.24.09 at 03:37

Hi,

Here is an example of creating a Dictionary out of a DB record set: http://abouttesting.blogspot.com/2008/01/create-dictionary-object-from-record.html

#2 Ankur on 02.24.09 at 05:08

Good one Stefan. That’s another nice use.

#3 Tarun Lalwani on 02.24.09 at 06:45

In case you want to extend the capabilities of Dictionary object the below article demonstrates the same

http://knowledgeinbox.com/articles/vbscript/extending-dictionary-object/

#4 Yogindernath on 02.24.09 at 20:45

Thats a good concept Ankur…

#5 Rotsa_lilmode on 03.02.09 at 08:44

The article by Alex is very nice and informative. But I can’t image he used the .Add method for all 300k items. Could someone explain what method is used because his examples show it as a hard coded method.

#6 sujan on 03.06.09 at 02:30

will the bitmap checkpoint returns any value ie if the result is pass then it should return one value else it should return other value

#7 Ravi on 03.12.09 at 00:20

Stefan, Thats a good concept to use. But I doubt on how to receive the return values from that function. Do I need to create an object of type dictionary and get the values from it.

#8 Stefan on 03.12.09 at 11:24

Hi Ravi,

You get a Dictionary object in return.

Set myDictionary = GetDataAndReturnDictionary (…)
msgbox myDictionary(“myDataBaseField”)

#9 Ashfaq Dhanakwala on 03.19.09 at 02:36

Hi,
Ankur Suppose on a particular PC I create the reserved
Object as specified by u.

Suppose I try to Run the script on Some other PC Where this object is not created wheter my script will run? I doubt require comments from u

#10 Scott Genevish on 05.26.09 at 10:38

Getting all keys/values is a bit cleaner with a For Each loop:

Instead of:
i = dict.Items ‘ Get the items.
k = dict.Keys ‘ Get the keys.
For x = 0 To dict.Count-1 ‘ Iterate the array.
msgbox i(x) & ” :” & k(x)
Next

Try:
For Each key in dict.Keys
msgbox key & ” : ” & dict(key)
Next

#11 Ankur on 05.26.09 at 10:55

@Scott: Agreed. In fact while working on arrays this looks cleaner, just a matter of habit.

#12 Fidel on 12.30.09 at 23:50

I dont think you can get similar functionality (in terms of sharing values between action) using arrays.

#13 Fidel Raj on 01.03.10 at 14:03

Please ignore my above comment. Analyzed a little bit and found out that arrays can be used for sharing data between Actions.

Instead of using ProgID as “Scripting.Dictionary”, use ProgID as “System.Components.ArrayList”.

This will work only if you have .Net Framework installed on your comp.

#14 Sandeep Khopade on 01.14.10 at 17:45

Does it decrese performance of system ?

#15 Manoj on 03.09.10 at 12:16

Hi Friends,
Please suggest How to select Automation framework? Which factors we need to consider while seleting Automation framework?

Leave a Comment