Condividi tramite


Test basati sui dati in linguaggi di scripting

Per comprendere questa sezione, è consigliabile acquisire familiarità con come creare test nei linguaggi di scripting. Questa sezione non illustra i dettagli dei vari approcci di test basati sui dati TAEF. Per una rapida panoramica, vedere i diversi costrutti di test basati sui dati TAEF:

È anche possibile scegliere di avere una combinazione di origini dati con una o più origini dati di una delle origini dati precedenti. Per informazioni dettagliate, vedere Specifica di più origini dati .

Specifica dell'origine dati nel linguaggio di scripting

I test basati sui dati in TAEF consentono di specificare DataSource a livello di classe o test. In una classe basata sui dati, i dati sono disponibili per la configurazione, la pulizia e tutti i metodi di test nella classe. Il parametro DataSource è le informazioni che indicano da dove verranno recuperati i dati. Nel caso dei test basati su tabelle, questo valore include il percorso relativo del file XML e tableId nel file XML in cui si trovano i dati. Per altre informazioni, vedere i collegamenti elencati sopra.

Nell'esempio seguente viene illustrato come specificare la proprietà 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>

Nell'esempio precedente, le righe 6 e 60 dichiarano e creano un'istanza di un oggetto TestData che consente l'accesso ai dati per i test basati sui dati.

I< tag TestMethodProperty e TestClassProperty>>sono righe che definiscono DataSource per il test o la< classe. In VBSampleTests TestOne ha una query WMI come dataSource. Le etichette dei parametri e le didascalia sono disponibili per i metodi di installazione, pulizia e test di TestOne. Nella stessa classe TestTwo è definito più origini dati . Il primo è datasource basato su tabella e il secondo è lo stesso datasource basato su WMI di TestOne.

TAEF genera un'espansione combinatoria dei set di parametri per ognuna delle proprietà DataSource . Un set di parametri è disponibile per ogni chiamata al metodo di test. Se la query WMI restituisce quattro set di risultati (Win32_Volume) e sono presenti tre righe nella tabella basata su DataSource, TestOne verrà eseguito quattro volte, una volta con ogni Win32_Volume restituita dalla query WMI. Invece, TestTwo esegue 12 (4 X 3) volte per ogni combinazione di dati Win32_Volume e Riga specificata dalla tabella. I dati sono disponibili anche per i metodi di installazione e pulizia associati.

In JScriptSampleTests è possibile visualizzare un esempio di classe basata sui dati. Poiché l'esempio specifica DataSource a livello di classe, i dati sono disponibili per tutti i metodi di test, nonché i metodi di configurazione e pulizia a livello di test e classe. Poiché TestTwo è un test basato sui dati all'interno di una classe basata su dati, i dati provenienti da DataSource a livello di classe e che dal livello di test sono disponibili per TestTwo.

Tipi di dati disponibili per i test di script

I tipi di parametri seguenti sono disponibili per i linguaggi di scripting. Questi sono i tipi che è possibile specificare nei test basati sui dati basati su tabella. Il tipo di parametro predefinito è String o BSTR (che rappresenta VT_BSTR).

Nella sezione Tipi di parametri in DataSource basato su tabella viene illustrato come visualizzare i tipi di parametri disponibili (in Codice nativo e gestito) durante la creazione di test in un linguaggio di scripting.

Esecuzione di script basati sui dati

L'opzione /listproperties elenca non solo i metadati, ma anche i dati disponibili per ogni chiamata del test. L'esecuzione dell'opzione /listproperties nell'intera dll viene lasciata come esercizio per il lettore. Nell'esempio seguente viene selezionata la chiamata di TestOne da VBSampleTests usando il linguaggio di query di selezione :

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] =

L'opzione /listproperties mostra che TAEF ha richiamato il metodo di test VBSampleTests::TestOne 7 volte - una volta per ogni Win32_Volume. Per ogni chiamata, TAEF aggiunge un indice implicito al metodo di test per distinguere ogni chiamata. È anche possibile visualizzare i dati e i metadati disponibili per ogni chiamata del metodo di test.

Usando le informazioni dell'opzione /listproperties , è possibile applicare una query di selezione basata sul valore dei dati o sul valore dell'indice per ottenere un controllo più corretto delle chiamate di test da eseguire. Nell'esempio seguente viene illustrato come eseguire solo la chiamata in cui la didascalia è E:\:

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

Il comando seguente usa l'indice per selezionare lo stesso test:

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

L'uso di test basati su PICT e di peso leggero in un test di script viene lasciato come esercizio per il lettore.