Datengesteuertes Testen in Skriptsprachen
Um diesen Abschnitt zu verstehen, sollten Sie mit dem Erstellen von Tests in Skriptsprachen vertraut sein. In diesem Abschnitt werden keine Details zu den verschiedenen datengesteuerten TAEF-Testansätzen erläutert. Eine kurze Übersicht finden Sie in den verschiedenen datengesteuerten TAEF-Testkonstrukten:
- Tabellenbasierte datengesteuerte Tests
- WMI-basierte datengesteuerte Tests
- PICT-basierte datengesteuerte Tests
- Datengesteuerte Tests mit geringem Gewicht
Sie können sich sogar für eine Kombination von Datenquellen entscheiden, indem Sie über eine oder mehrere Der oben genannten Datenquellen verfügen. Weitere Informationen finden Sie unter Angeben mehrerer Datenquellen .
Angeben der Datenquelle in der Skriptsprache
Mit datengesteuerten Tests in TAEF können Sie die DataSource auf Klassen- oder Testebene angeben. In einer datengesteuerten Klasse stehen die Daten für das Einrichten von Klassen- und Testmethoden, die Bereinigung und alle Testmethoden in der Klasse zur Verfügung. Der DataSource-Parameter ist die Information, von der die Daten abgerufen werden. Bei tabellenbasierten datengesteuerten Tests enthält dieser Wert den relativen Pfad zur XML-Datei und die TableId in der XML-Datei, in der sich die Daten befinden. Weitere Informationen finden Sie in den oben aufgeführten Links.
Das folgende Beispiel zeigt, wie die DataSource-Eigenschaft angegeben wird.
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>
Im obigen Beispiel deklarieren und instanziieren die Zeilen 6 und 60 ein TestData-Objekt , das den Zugriff auf die Daten für die datengesteuerten Tests ermöglicht.
Die <Tags TestMethodProperty> und <TestClassProperty> sind Zeilen, die DataSource für den Test oder die Klasse definieren. In VBSampleTests verfügt TestOne über eine WMI-Abfrage als Datenquelle. Die Parameterbezeichnung und Untertitel stehen für die Setup-, Bereinigungs- und Testmethoden von TestOne zur Verfügung. In derselben Klasse hat TestTwomehrere Datenquellen definiert. Die erste ist eine tabellenbasierte Datenquelle, und die zweite ist dieselbe WMI-basierte Datenquelle wie TestOne.
TAEF generiert eine kombinatorische Erweiterung der Parametersätze für jede DataSource-Eigenschaft . Für jeden Testmethodenaufruf steht ein Parametersatz zur Verfügung. Wenn die WMI-Abfrage vier Sätze von Ergebnissen (Win32_Volume) zurückgibt und es drei Zeilen in der tabellenbasierten Datenquelle gibt, wird TestOne vierMal ausgeführt – einmal mit jedem Win32_Volume, den die WMI-Abfrage zurückgibt. Auf der anderen Seite wird TestTwo 12 Mal (4 x 3) für jede Kombination aus Win32_Volume Daten und Zeile ausgeführt, die die Tabelle angibt. Die Daten stehen auch den zugehörigen Setup- und Bereinigungsmethoden zur Verfügung.
In JScriptSampleTests sehen Sie ein Beispiel für eine datengesteuerte Klasse. Da das Beispiel DataSource auf Klassenebene angibt, stehen die Daten für alle Testmethoden sowie für die Setup- und Bereinigungsmethoden auf Test- und Klassenebene zur Verfügung. Da Es sich bei TestTwo um einen datengesteuerten Test innerhalb einer datengesteuerten Klasse handelt, stehen die Daten aus der DataSource auf Klassenebene sowie der Testebene für TestTwo zur Verfügung.
Für Skripttests verfügbare Datentypen
Die folgenden Parametertypen sind für Skriptsprachen verfügbar. Dies sind die Typen, die Sie in tabellenbasierten datengesteuerten Tests angeben können. Der Standardparametertyp ist String oder BSTR (stellt VT_BSTR dar.
Im Abschnitt Parametertypen in Table based DataSource wird gezeigt, wie Die verfügbaren Parametertypen (in nativem und verwaltetem Code) beim Erstellen von Tests in einer Skriptsprache angezeigt werden.
Ausführen von datengesteuerten Skripts
Die Option /listproperties listet nicht nur die Metadaten auf, sondern auch die Daten, die für jeden Aufruf des Tests verfügbar sind. (Das Ausführen der Option /listproperties für die gesamte DLL bleibt dem Leser als Übung überlassen.) Im folgenden Beispiel wird der Aufruf von TestOne aus VBSampleTests mithilfe der Auswahlabfragesprache ausgewählt:
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] =
Die Option /listproperties zeigt, dass TAEF die Testmethode VBSampleTests::TestOne 7 Mal aufgerufen hat – einmal für jeden Win32_Volume. Für jeden Aufruf fügt TAEF einen impliziten Index an die Testmethode an, um die einzelnen Aufrufe zu unterscheiden. Sie können auch die Daten und Metadaten anzeigen, die für jeden Aufruf der Testmethode verfügbar sind.
Mithilfe der Informationen aus der Option /listproperties können Sie eine Auswahlabfrage anwenden, die auf dem Datenwert oder dem Indexwert basiert, um eine genauere Kontrolle darüber zu erhalten, welche Testaufrufe ausgeführt werden sollen. Im folgenden Beispiel wird gezeigt, wie nur der Aufruf ausgeführt wird, bei dem der Untertitel E:\ist:
te Examples\DataDrivenTest.wsc /select:"@Name='VBSampleTests::TestOne*' and @Data:Caption='E:\'"
Der folgende Befehl verwendet den Index, um denselben Test auszuwählen:
te Examples\DataDrivenTest.wsc /select:"@Name='VBSampleTests::TestOne*' and @Data:Index=3"
Die Verwendung von PICT-basierten und leichten datengesteuerten Tests in einem Skripttest bleibt dem Leser als Übung überlassen.