Compartilhar via


Seleção

A TAEF (Estrutura de Criação e Execução de Teste) fornece um mecanismo para executar seletivamente ou omitir 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.

Você pode executar TE.exe em uma janela de prompt de comando.

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

Esta seção descreve a opção TE.exe /select:selection criteria . Para obter mais informações sobre TE.exe, consulte TE.exe Opções de Comando.

Os critérios de seleção são aplicados globalmente a todos os binários de teste que foram mencionados no prompt de comando. Vamos considerar dois test_binaries: Exemplos\CPP.SelectionCriteria1.Example.dll e Exemplos\CPP.SelectionCriteria2.Example.dll. O exemplo a seguir mostra as propriedades, ou metadados, especificadas nos vários níveis nestes test_binaries. Você também pode obter isso especificando a opção /listproperties na janela 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 uma dessas 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 estão listados juntamente com seu caminho completo e os nomes de classe são listados como "<Namespace>::<ClassName>" no caso de test_binaries nativos e "<Namespace>.<ClassName>" no caso de test_binaries gerenciado. 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 gerenciado.

Em outras palavras, o nome totalmente qualificado de qualquer nome ou função é o que é salvo em "te". Isso é para permitir 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 que você está interessado. Nesse sentido, critérios de seleção permitem executar somente os testes que correspondem aos seus critérios nos test_binaries determinados.

No exemplo acima, digamos em Exemplos\Cpp.SelectionCriteria1.Example.dll, você pode escolher "Método111" 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 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 exemplos\CPP.SelectionCriteria1.Example.dll - "class11::method111" em nosso exemplo.

Se você quiser executar todos os testes na classe 11, poderá usar a propriedade completa "Name" usando 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á algumas coisas úteis para ter em mente:

  • "e", "não" e "ou" são palavras reservadas e são insensíveis a maiúsculas e minúsculas."
  • os valores e os nomes de propriedades de metadados não diferenciam maiúsculas de minúsculas, por exemplo, "C2" no exemplo, corresponderiam a "c2" e "C2". Portanto, se você tiver uma função com metadados "property" e outra com "Property" e o critério de seleção estiver buscando "PROPERTY", ela corresponderá a ambas.
  • O valor da string na consulta de seleção deve ser incluído em aspas simples. Dentro de um valor de cadeia de caracteres na consulta de seleção, "?" representa um único caractere curinga e "*" representa 0 ou mais caracteres curinga.
  • Ao usar aspas no prompt de comando, esteja atento às aspas inteligentes ao copiar uma consulta de seleção. Se você copiar uma consulta de seleção de um email do Outlook, poderá ter citações inteligentes acidentalmente e o TAEF poderá não conseguir analisá-la. Digite as aspas em vez disso.

Vamos examinar alguns exemplos rápidos de critérios de seleção composta e o que eles executariam.

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

Executará:

  • Exemplos\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á:

  • Exemplos\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á:

  • Exemplos\CPP.SelectionCriteria1.Example.dll - class11::method111
  • Exemplos\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 de BackwardsCompatibility não foi especificado. (Consulte os itens a seguir.)

  • Exemplos\CPP.SelectionCriteria1.Example.dll - class11::method111, class12::method121
  • Exemplos\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 do proprietário começa com "C" (não diferencia maiúsculas de minúsculas). Assim, o comando anterior executará todos os testes em Exemplos\CPP.SelectionCriteria1.Example.dll and all tests in 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 o 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 seria executado seletivamente:

  • Exemplos\CPP.SelectionCriteria1.Example.dll - class11::method111, class12::method121,
  • Exemplos\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 o valor do proprietário da propriedade contendo apenas 3 caracteres.

Em nosso exemplo, isso corresponderia a "C" e executaria apenas:

  • Exemplos\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 você pode usar ">=", "<=", ">" e "<" em que os valores de propriedade são valores flutuantes.

Em nosso exemplo, isso executaria todos os métodos, exceto exemplos\CPP.SelectionCriteria2.Example.dll - class22::method221, em que nenhuma proridade foi especificada. Em outras palavras, isso seria executado:

  • Exemplos\CPP.SelectionCriteria1.Example.dll - class11::method111, class11::method112, class12::method121
  • Exemplos\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 Inteligentes

Você poderá encontrar aspas inteligentes em seus critérios de seleção se estiver copiando um critério de seleção do documento do Outlook ou do Word de volta para o prompt de comando. Você pode encontrar mais informações sobre o que são aspas inteligentes em aspas inteligentes: o flagelo oculto dos textos voltados para o consumo por computadores

Não há uma maneira fácil de evitar aspas inteligentes – a melhor abordagem é excluir todas as aspas duplas " e aspas simples ' nos critérios de seleção depois de copiá-los para o prompt de comando e redigitar a parte da consulta que contém aspas.

Há uma configuração de opções para desativá-las ao criar mensagens no Outlook. Digite "aspas inteligentes" na caixa de ajuda do Outlook para encontrar isso.

Seleção Rápida por Nome

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 assim:

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

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