Управляемое данными тестирование на языках сценариев
Чтобы понять этот раздел, вы должны быть знакомы с тем, как создавать тесты на языках сценариев. В этом разделе не рассматриваются подробные сведения о различных подходах к тестированию на основе данных TAEF. Краткий обзор см. в различных конструкциях тестирования на основе данных TAEF:
- Тестирование на основе таблиц на основе данных
- Тестирование на основе WMI на основе данных
- Тестирование на основе PICT на основе данных
- Упрощенное тестирование на основе данных
Вы даже можете выбрать сочетание источников данных, имея один или несколько источников данных из любого из указанных выше. Дополнительные сведения см. в разделе Указание нескольких источников данных .
Указание источника данных на языке сценариев
Тестирование на основе данных в 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 и легких тестов на основе данных в тесте скрипта остается в качестве упражнения для читателя.