Partilhar via


Seleção

O TAEF (Framework de Autoria e Execução de Testes) fornece um mecanismo para executar ou omitir seletivamente determinados testes com base nas informações de metadados fornecidas. A seção a seguir passa por vários exemplos de como usar esse mecanismo de seleção com TE.exe.

É possível executá TE.exe em uma janela de prompt de comando.

TE <test_binaries> [/select:<selection criteria>]

Esta seção descreve a opção de critérios de seleção TE.exe /select:. Para saber mais sobre o TE.exe, consulte Opções do comando TE.exe.

Os critérios de seleção são aplicados globalmente a todos os binários de teste mencionados no prompt de comando. Vamos considerar dois test_binaries: Examples\CPP.SelectionCriteria1.Example.dll e Examples\CPP.SelectionCriteria2.Example.dll. O exemplo a seguir mostra as propriedades, ou metadados, especificados nos vários níveis nesses test_binaries. Você também pode obter isso especificando a opção /listproperties na janela do Prompt de Comando.

CPP.SelectionCriteria1.Example.dll (Owner="C1", Priority=3)
class11 (Owner="C2")
method111(Priority=1)

method112 (BackwardsCompatibility="Windows 2000")
class12
method121
CPP.SelectionCriteria2.Example.dll (Owner="WEX")
class21 (Owner="C1", Priority=2, BackwardsCompatibility="Windows XP")
method211 (Owner="C2")
class22 (Owner="U3")
method221

Em outras palavras, usando /listproperties em cada um desses test_binaries separadamente, você obtém:

F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution>te Examples\CPP.SelectionCriteria1.Example.dll /listproperties
Test Authoring and Execution Framework v2.2 Build 6.1.7689.0 (release.091218-1251) for x86

F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution\Examples\CPP.SelectionCriteria1.Example.dll
        Property[Owner] = C1
        Property[Priority] = 3
    WEX::TestExecution::Examples::Class11
            Property[Owner] = C2
        WEX::TestExecution::Examples::Class11::Method111
                Property[Priority] = 1
        WEX::TestExecution::Examples::Class11::Method112
                Property[BackwardsCompatibility] = Windows2000

    WEX::TestExecution::Examples::Class12
        WEX::TestExecution::Examples::Class12::Method121

E:

F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution>te Examples\CPP.SelectionCriteria2.Example.dll /listproperties
Test Authoring and Execution Framework v2.2 Build 6.1.7689.0 (release.091218-1251) for x86

F:\fsd1.binaries.x86chk\WexTest\C1\TestExecution\Examples\CPP.SelectionCriteria2.Example.dll
        Property[Owner] = WEX
    WEX::TestExecution::Examples::Class21
            Property[BackwardsCompatibility] = Windows XP
            Property[Owner] = C1
            Property[Priority] = 2
        WEX::TestExecution::Examples::Class21::Method211
                Property[Owner] = C2

    WEX::TestExecution::Examples::Class22
            Property[Owner] = U3
        WEX::TestExecution::Examples::Class22::Method221

É importante observar neste ponto que test_binaries são listados junto com seu caminho completo, e os nomes de classe são listados como "<Namespace>::<ClassName>" no caso de native test_binaries e "<Namespace>.<ClassName>" no caso de test_binaries gerenciados. Da mesma forma, os nomes de método de teste são listados como "<Namespace>::<ClassName>::<TestMethodName>" no caso de test_binaries nativos e "<Namespace>.<ClassName>.<TestMethodName>" no caso de test_binaries gerenciados.

Em outras palavras, o nome totalmente qualificado de qualquer nome ou função é o que é salvo em te. O motivo disso é possibilitar a capacidade de distinguir exclusivamente qualquer método. Por exemplo, se duas classes tiverem o mesmo nome de método, a qualificação de classe ajudará a selecionar exclusivamente o método de interesse. Para esse fim, os critérios de seleção ajudam a executar apenas os testes que correspondem aos seus critérios nos test_binaries determinados.

No exemplo acima, digamos, em Examples\Cpp.SelectionCriteria1.Example.dll, você pode escolher "Method111" por qualquer um dos seguintes critérios de seleção:

Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='WEX::TestExecution::Examples::Class11::Method111'"
Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='*Class11::Method111'"
Te.exe Examples\CPP.SelectionCriteria1.Example.dll /select:"@Name='*Method111'"

Você pode optar por executar todos os testes que foram marcados com "Prioridade" menor que 2 executando:

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority < 2"

Isso executaria apenas Examples\CPP.SelectionCriteria1.Example.dll - "class11::method111" em nosso exemplo.

Se deseja executar todos os testes em class11, use a propriedade qualificada "Name" junto com a correspondência curinga para escolhê-la da seguinte maneira:

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll
                                                               /select:"@Name='*::class11::*'"

Ao usar critérios de seleção, há alguns fatores úteis a serem considerados:

  • "e", "não" e "ou" são palavras reservadas e não diferenciam maiúsculas de minúsculas.
  • Nomes e valores de propriedades de metadados não diferenciam maiúsculas de minúsculas, por exemplo, "C2" no exemplo, corresponde a "C2" e "C2". Portanto, se você tiver uma função com metadados "propriedade" e outra com "Propriedade" e o critério de seleção estiver procurando por "PROPRIEDADE", ele corresponderá a ambas.
  • O valor de string na string de consulta de seleção deve ser incluído entre aspas simples. Em um valor de string na consulta de seleção, "?" é um único caractere curinga e "*" é 0 ou mais caracteres curinga.
  • Ao usar aspas no prompt de comando, esteja atento às aspas curvas ao copiar uma consulta de seleção. Se você copiar uma consulta de seleção de um email do Outlook, poderá acidentalmente ter aspas curvas e o TAEF talvez não consiga analisá-lo. Em vez disso, digite as aspas.

Vamos analisar alguns exemplos rápidos de critérios de seleção compostos e o que eles executam.

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=2"

Executará:

  • Examples\CPP.SelectionCriteria2.Example.dll - class21::method211
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=3"

Executará:

  • Examples\CPP.SelectionCriteria1.Example.dll - class11::method112
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='U3' oR @Priority=1"

Executará:

  • Examples\CPP.SelectionCriteria1.Example.dll - class11::method111
  • Examples\CPP.SelectionCriteria2.Example.dll - class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*)"

Executará todos os testes em que o valor BackwardsCompatibility não tiver sido especificado. (Confira os itens a seguir.)

  • Examples\CPP.SelectionCriteria1.Example.dll - class11::method111, class12::method121
  • Examples\CPP.SelectionCriteria2.Example.dll - class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C*'"

executará todos os testes em que o valor Owner começa com "C" (não diferencia maiúsculas de minúsculas). Assim, o comando anterior executará todos os testes em Examples\CPP.SelectionCriteria1.Example.dll e todos os testes em Examples\CPP.SelectionCriteria2.Example.dll em class21 (ou seja, method211)

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*) OR (@Owner='C*' AND @BackwardsCompatibility='*XP*')"

executará todos os testes em que BackwardsCompatibility não é especificado ou, em que o nome do proprietário começa com "C" e o valor backwardsCompatibilty contém XP. Observe como os parênteses "(" e ")" são usados para especificar a ordem de precedência.

No exemplo, isso será executado seletivamente:

  • Examples\CPP.SelectionCriteria1.Example.dll - class11::method111, class12::method121,
  • Examples\CPP.SelectionCriteria2.Example.dll - class21::method211, class22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Owner='???'"

só executará testes que tenham valor de proprietário de propriedade que contenha apenas três caracteres.

Em nosso exemplo, isso corresponde a "C" e executará somente:

  • Examples\CPP.SelectionCriteria1.Example.dll - class12::method121
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority>=1"

Observação

Este é um bom exemplo de como usar ">=", "<=", ">" e "<" em que propertyvalues são floatvalues.

Em nosso exemplo, isso executará todos os métodos, exceto Examples\CPP. SelectionCriteria2.Example.dll - class22::method221, em que nenhuma propriedade foi especificada. Em outras palavras, isso executará:

  • Examples\CPP.SelectionCriteria1.Example.dll - class11::method111, class11::method112, class12::method121
  • Examples\CPP.SelectionCriteria2.Example.dll - class21::method211.

Observe que você pode usar "/select" em conjunto com outras opções de comando, como "/list", "/listproperties", etc.

Aspas curvas

Você poderá encontrar aspas curvas em seus critérios de seleção se estiver copiando um critério de seleção do Outlook ou de um documento do Word de volta para o prompt de comando. Obtenha mais informações sobre o que são aspas curvas em Aspas curvas: a praga oculta de textos processados por computadores

Não há uma maneira fácil de evitar aspas curvas. A melhor abordagem é excluir todas as aspas duplas e simples nos critérios de seleção depois de copiá-las no prompt de comando e redigitar a parte de aspas da consulta.

Há uma definição de opções para desativá-las ao criar mensagens no Outlook. Digite "aspas curvas" na caixa de ajuda do Outlook para encontrá-las.

Seleção baseada em Nome Rápido

O TAEF permite uma seleção rápida com base no nome no prompt de comando usando o parâmetro de linha de comando '/name':

/name:<test name with wildcards>

é equivalente a:

/select:@Name='<test name with wildcards>'

Em outras palavras, agora você pode fornecer uma consulta de seleção com base no nome, como:

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Name='*::class11::*'"

mais rapidamente usando /name da seguinte forma:

Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /name=*::class11::*

Observe que, se /name e /select forem fornecidos no prompt de comando, /name será ignorado e /select terá precedência.