Поделиться через


Управляемое данными тестирование на языках сценариев

Чтобы понять этот раздел, вы должны быть знакомы с тем, как создавать тесты на языках сценариев. В этом разделе не рассматриваются подробные сведения о различных подходах к тестированию на основе данных TAEF. Краткий обзор см. в различных конструкциях тестирования на основе данных TAEF:

Вы даже можете выбрать сочетание источников данных, имея один или несколько источников данных из любого из указанных выше. Дополнительные сведения см. в разделе Указание нескольких источников данных .

Указание источника данных на языке сценариев

Тестирование на основе данных в TAEF позволяет указать DataSource на уровне класса или теста. В классе, управляемом данными, данные доступны для установки, очистки и всех методов тестирования в классе. Параметр DataSource — это информация, которая указывает, откуда будут получены данные. В случае тестов на основе таблиц это значение включает относительный путь к XML-файлу и TableId в XML-файле, где находятся данные. Дополнительные сведения см. по приведенным выше ссылкам.

В следующем примере показано, как указать свойство DataSource .

1   <?xml version="1.0" ?>
2   <?component error="true" debug="true"?>
3   <package>
4       <component id="VBSampleTests">
5           <object id="Log" progid="WEX.Logger.Log" />
6           <object id="TestData" progid="Te.Common.TestData" />
7
8           <public>
9               <method name="TestOne">
10                  <TestMethodProperty name="DataSource" value="WMI:SELECT Label, Caption FROM Win32_Volume"/>
11              </method>
12
13              <method name="TestTwo">
14                  <TestMethodProperty name="DataSource" value="Table:ScriptExampleTable.xml#MyTable;WMI:SELECT Label, Caption FROM Win32_Volume"/>
15              </method>
16          </public>
17
18          <script language="VBScript">
19              <![CDATA[
20                  Function TestOne()
21                      dim caption
22                      caption = "NoCaption"
23                      Log.Comment("Caption is " + caption)
24
25                      If TestData.Contains("Caption") Then
26                      caption = TestData.GetValue("Caption")
27                      End If
28                      Log.Comment("Caption is " + caption)
29                  End Function
30
31                  Function TestTwo()
32                      Log.Comment("Calling TestTwo")
33                      dim caption
34                      caption = "NoCaption"
35                      Log.Comment("Caption is " + caption)
36
37                      If TestData.Contains("Caption") Then
38                      caption = TestData.GetValue("Caption")
39                      End If
40                      Log.Comment("Caption is " + caption)
41
42                      dim size
43                      If TestData.Contains("Size") Then
44                      size = TestData.GetValue("Size")
45                      End If
46                      Log.Comment("Size is " + CStr(size))
47
48                      dim transparency
49                      If TestData.Contains("Transparency") Then
50                      transparency = TestData.GetValue("Transparency")
51                      End If
52                      Log.Comment("Transparency is " + CStr(transparency))
53                  End Function
54              ]] >
55          </script>
56      </component>
57
58      <component id="JScriptSampleTests">
59          <object id="Log" progid="WEX.Logger.Log" />
60          <object id="TestData" progid="Te.Common.TestData" />
61
62          <TestClassProperty name="DataSource" value="Table:ScriptExampleTable.xml#MyTable"/>
63
64          <public>
65              <method name="ClassSetup" type="TestClassSetup"/>
66              <method name="ClassCleanup" type="TestClassCleanup"/>
67              <method name="MethodSetup"  type="TestMethodSetup"/>
68              <method name="MethodCleanup" type="TestMethodCleanup"/>
69
70              <method name="TestOne"/>
71              <method name="TestTwo">
72                  <TestMethodProperty name="DataSource" value="WMI:SELECT Label, Caption FROM Win32_Volume"/>
73              </method>
74          </public>
75
76          <script language="JScript">
77              <![CDATA[
78                  function ClassSetup()
79                  {
80                      Log.Comment("Calling class setup");
81                      var size;
82                      if(TestData.Contains("Size"))
83                      {
84                          size = TestData.GetValue("Size");
85                      }
86                      Log.Comment("Size is " + size);
87  
88                      var transparency;
89                      if(TestData.Contains("Transparency"))
90                      {
91                          transparency = TestData.GetValue("Transparency");
92                      }
93                      Log.Comment("Transparency is " + transparency);
94                  }
95
96                  function ClassCleanup()
97                  {
98                      Log.Comment("Calling class cleanup");
99                      return true;
100                 }
101
102                 function MethodSetup()
103                 {
104                     Log.Comment("Calling method setup");
105                     var size;
106                     if(TestData.Contains("Size"))
107                     {
108                         size = TestData.GetValue("Size");
109                     }
110                     Log.Comment("Size is " + size);
111
112                     var transparency;
113                     if(TestData.Contains("Transparency"))
114                     {
115                         transparency = TestData.GetValue("Transparency");
116                     }
117                     Log.Comment("Transparency is " + transparency);
118                     return true;
119                 }
120
121                 function MethodCleanup()
122                 {
123                     Log.Comment("Calling method cleanup");
124                     return true;
125                 }
126
127                 function TestOne()
128                 {
129                     Log.Comment("Calling TestOne");
130                     var size;
131                     if(TestData.Contains("Size"))
132                     {
133                         size = TestData.GetValue("Size");
134                     }
135                     Log.Comment("Size is " + size);
136
137                     var transparency;
138                     if(TestData.Contains("Transparency"))
139                     {
140                         transparency = TestData.GetValue("Transparency");
141                     }
142                     Log.Comment("Transparency is " + transparency);
143                 }
144
145                 function TestTwo()
146                 {
147                     Log.Comment("Calling TestTwo");
148                     var caption = "NoCaption";
149                     Log.Comment("Initial caption: " + caption);
150
151                     if(TestData.Contains("Caption"))
152                     {
153                         caption = TestData.GetValue("Caption");
154                     }
155                     Log.Comment("Caption is " + caption);
156
157                     var size;
158                     if(TestData.Contains("Size"))
159                     {
160                         size = TestData.GetValue("Size");
161                     }
162                     Log.Comment("Size is " + size);
163
164                     var transparency;
165                     if(TestData.Contains("Transparency"))
166                     {
167                         transparency = TestData.GetValue("Transparency");
168                     }
169                     Log.Comment("Transparency is " + transparency);
170                 }
171             ]] >
172         </script>
173     </component>
174 </package>

В приведенном выше примере строки 6 и 60 объявляют и создают экземпляр объекта TestData , который разрешает доступ к данным для управляемых данными тестов.

Теги <TestMethodProperty> и <TestClassProperty> — это строки, определяющие DataSource для теста или класса. В VBSampleTests testOne имеет WMI-запрос в качестве источника данных. Метка параметров и подпись доступны для методов установки, очистки и тестирования TestOne. В том же классе TestTwo определяет несколько источников данных . Первый — это источник данных на основе таблицы, а второй — тот же источник данных на основе WMI, что и TestOne.

TAEF создает комбинаторное расширение наборов параметров для каждого свойства DataSource . Для каждого вызова метода тестирования доступен один набор параметров. Если запрос WMI возвращает четыре набора результатов (Win32_Volume) и в источнике данных на основе таблицы есть три строки, TestOne будет выполняться четыре раза — один раз с каждым Win32_Volume, возвращаемых запросом WMI. С другой стороны, TestTwo выполняет 12 (4 X 3) раз для каждой комбинации данных Win32_Volume и строки, указанной в таблице. Данные также доступны связанным методам установки и очистки.

В JScriptSampleTests можно увидеть пример управляемого данными класса. Так как в примере указывается DataSource на уровне класса, данные доступны для всех методов тестирования, а также для методов настройки и очистки на уровне тестов и классов. Так как TestTwo — это управляемый данными тест в классе, управляемом данными, данные из DataSource на уровне класса, а также данные на уровне теста доступны для TestTwo.

Типы данных, доступные для тестов скриптов

Для языков сценариев доступны следующие типы параметров. Это типы, которые можно указать в тестировании на основе таблиц на основе данных. Тип параметра по умолчанию — String или BSTR (представляющий VT_BSTR).

В разделе Типы параметров в dataSource на основе таблиц показано, как просматривать доступные типы параметров (в машинном и управляемом коде) при разработке тестов на языке сценариев.

Выполнение скриптов на основе данных

Параметр /listproperties содержит не только метаданные, но и данные, доступные для каждого вызова теста. (Запуск параметра /listproperties для всей библиотеки DLL остается в качестве упражнения для читателя.) В следующем примере выбирается вызов TestOne из VBSampleTests с помощью языка запросов выбора :

f:\spartadev.binaries.x86chk\WexTest\CuE\TestExecution>te Examples\DataDrivenTest.wsc /listproperties /name:VBSampleTests::TestOne*

Test Authoring and Execution Framework v.R10 Build 6.1.6939.0 For x86

        f:\spartadev.binaries.x86chk\WexTest\CuE\TestExecution\Examples\DataDrivenTest.wsc
            VBSampleTests
                VBSampleTests::TestOne#0
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = C:\
                        Data[Label] =

                VBSampleTests::TestOne#1
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = D:\
                        Data[Label] = New Volume

                VBSampleTests::TestOne#2
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = F:\
                        Data[Label] = New Volume

                VBSampleTests::TestOne#3
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = E:\
                        Data[Label] = New Volume

                VBSampleTests::TestOne#4
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = G:\
                        Data[Label] = New Volume

                VBSampleTests::TestOne#5
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = H:\
                        Data[Label] = New Volume

                VBSampleTests::TestOne#6
                        Property[DataSource] = WMI:SELECT Label, Caption FROM Win32_Volume

                        Data[Caption] = K:\
                        Data[Label] =

Параметр /listproperties показывает, что TAEF вызвал метод теста VBSampleTests::TestOne 7 раз — один раз для каждого Win32_Volume. Для каждого вызова TAEF добавляет неявный индекс к методу теста, чтобы различать каждый вызов. Вы также можете просмотреть данные и метаданные, доступные для каждого вызова метода теста.

Используя сведения из параметра /listproperties , можно применить запрос на выбор, основанный на значении данных или значении индекса, чтобы получить более точное управление тем, какие вызовы теста должны выполняться. В следующем примере показано, как выполнить только вызов, где подпись — E:\:

te Examples\DataDrivenTest.wsc /select:"@Name='VBSampleTests::TestOne*' and @Data:Caption='E:\'"

Следующая команда использует индекс для выбора того же теста:

te Examples\DataDrivenTest.wsc /select:"@Name='VBSampleTests::TestOne*' and @Data:Index=3"

Использование тестов на основе PICT и легких тестов на основе данных в тесте скрипта остается в качестве упражнения для читателя.