共用方式為


指令碼語言中的資料驅動測試

若要瞭解本節,您應該熟悉如何 撰寫指令碼語言的測試。 本節不會討論 各種 TAEF 資料驅動測試方法的詳細資料。 如需快速概觀,請檢閱不同的 TAEF 資料驅動測試建構:

您甚至可以選擇使用上述任一資料來源的一或多個資料來源組合。 如需詳細資訊 ,請參閱指定多個資料來源

以指令碼語言指定資料來源

TAEF 中的資料驅動測試可讓您在類別或測試層級指定 DataSource 。 在資料驅動類別中,資料可供類別和測試方法設定、清除和 類別中的所有測試方法使用。 DataSource參數是告知要從何處擷取資料的資訊。 如果是資料表型資料驅動測試,這個值會包含 XML 檔案的相對路徑,以及資料所在 XML 檔案中的 TableId。 如需詳細資訊,請參閱上面所列的連結。

下列範例示範如何指定 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 查詢 作為 其 DataSourceTestOne 的設定、清除和測試方法可以使用參數標籤標題。 在相同的類別中, TestTwo 已定義 多個資料來源 。 第一個是資料表型 DataSource,而第二個則是與TestOne相同的 WMI 型DataSource

TAEF 會為每個 DataSource 屬性產生參數集的組合展開。 每個測試方法調用都有一個參數集可供使用。 如果 WMI 查詢傳回四組結果 (Win32_Volume) ,而且資料表型 DataSource中有三個數據列, TestOne 會執行四次 -一次,每個Win32_Volume WMI 查詢都會傳回。 另一方面, TestTwo 會針對資料表所指定Win32_Volume資料和 Row 的每個組合執行 12 (4 X 3) 次。 資料也適用于相關聯的設定和清除方法。

在 JScriptSampleTests 中,您可以看到資料驅動類別的範例。 由於此範例會在類別層級指定 DataSource ,因此資料可供所有測試方法使用,以及測試和類別層級設定和清除方法。 由於 TestTwo 是資料驅動類別內的資料驅動測試,因此來自類別層級的 DataSource 資料,以及來自測試層級的資料可供 TestTwo使用。

腳本測試可用的資料類型

下列參數類型適用于指令碼語言。 這些是您可以在資料表型資料驅動測試中指定的類型。 預設參數類型為 StringBSTR (,代表 VT_BSTR) 。

資料表型 DataSource 中的參數類型一節示範如何在撰寫指令碼語言的測試時,在原生和 Managed 程式碼) 中檢視可用的參數類型 (。

執行資料驅動腳本

/listproperties選項不僅會列出中繼資料,也會列出每個測試調用可用的資料。 (在整個 dll 上執行/listproperties選項會保留為 reader 的練習。) 下列範例會使用選取查詢語言從 VBSampleTests 選取TestOne的叫用:

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 型和輕量型資料驅動測試,會保留為讀者的練習。