Partilhar via


Teste controlado por dados em linguagens de script

Para entender esta seção, você deve estar familiarizado com como criar testes em linguagens de script. Esta seção não discutirá detalhes das várias abordagens de teste controladas por dados taef. Para obter uma visão geral rápida, examine os diferentes constructos de teste controlados por dados taef:

Você pode até optar por ter uma combinação de fontes de dados com uma ou mais fontes de dados de qualquer uma das anteriores. Consulte Especificando várias fontes de dados para obter detalhes.

Especificando a fonte de dados na linguagem de script

O teste controlado por dados no TAEF permite que você especifique o DataSource no nível de classe ou teste. Em uma classe controlada por dados, os dados estão disponíveis para configuração, limpeza e todos os métodos de teste da classe e do método de teste. O parâmetro DataSource é a informação que informa de onde os dados serão recuperados. No caso de testes controlados por dados baseados em tabela, esse valor inclui o caminho relativo para o arquivo XML e o TableId no arquivo XML em que os dados estão localizados. Consulte os links listados acima para obter mais detalhes.

O exemplo a seguir mostra como especificar a propriedade 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>

No exemplo acima, as linhas 6 e 60 declaram e instanciam um objeto TestData que permite o acesso aos dados para os testes controlados por dados.

As <marcas TestMethodProperty> e <TestClassProperty> são linhas que definem DataSource para o teste ou classe. No VBSampleTests, TestOne tem uma consulta WMI como datasource. O rótulo de parâmetros e legenda estão disponíveis para os métodos de instalação, limpeza e teste do TestOne. Na mesma classe, TestTwo tem Vários DataSources definidos . O primeiro é um DataSource baseado em tabela e o segundo é o mesmo DataSource baseado em WMI que TestOne.

O TAEF gera uma expansão combinatória dos conjuntos de parâmetros para cada uma das propriedades do DataSource . Um conjunto de parâmetros está disponível para cada invocação de método de teste. Se a consulta WMI retornar quatro conjuntos de resultados (Win32_Volume) e houver três linhas no DataSource baseado em tabela, TestOne será executado quatro vezes - uma vez com cada Win32_Volume que a consulta WMI retorna. Por outro lado, TestTwo executa 12 (4 X 3) vezes para cada combinação de dados Win32_Volume e Row que a tabela especifica. Os dados também estão disponíveis para os métodos de instalação e limpeza associados.

No JScriptSampleTests, você pode ver um exemplo de uma classe controlada por dados. Como o exemplo especifica DataSource no nível da classe, os dados estão disponíveis para todos os métodos de teste, bem como os métodos de instalação e limpeza de nível de classe e teste. Como TestTwo é um teste controlado por dados em uma classe controlada por dados, os dados do DataSource no nível da classe, bem como os do nível de teste, estão disponíveis para TestTwo.

Tipos de dados disponíveis para testes de script

Os tipos de parâmetro a seguir estão disponíveis para linguagens de script. Esses são os tipos que você pode especificar em testes baseados em dados baseados em tabela. O tipo de parâmetro padrão é String ou BSTR (representando VT_BSTR).

A seção Tipos de parâmetro no DataSource baseado em tabela mostra como exibir os tipos de parâmetro disponíveis (em código nativo e gerenciado) durante a criação de testes em uma linguagem de script.

Executando scripts controlados por dados

A opção /listproperties lista não apenas os metadados, mas também os dados disponíveis para cada invocação do teste. (A execução da opção /listproperties em toda a dll é deixada como um exercício para o leitor.) O exemplo a seguir seleciona a invocação de TestOne de VBSampleTests usando a linguagem de consulta de seleção :

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

A opção /listproperties mostra que TAEF invocou o método de teste VBSampleTests::TestOne 7 vezes – uma vez para cada Win32_Volume. Para cada invocação, o TAEF acrescenta um índice implícito ao método de teste para distinguir cada invocação. Você também pode ver os dados e metadados disponíveis para cada invocação do método de teste.

Usando as informações da opção /listproperties , você pode aplicar uma consulta de seleção baseada no valor de dados ou no valor do índice para obter um controle mais fino de quais invocações de teste executar. O exemplo a seguir mostra como executar apenas a invocação em que o legenda é E:\:

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

O comando a seguir usa o índice para selecionar o mesmo teste:

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

O uso de testes baseados em PICT e levemente controlados por dados em um teste de script é deixado como um exercício para o leitor.