Freigeben über


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:

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.