Výběr

Rozhraní TAEF (Test Authoring and Execution Framework) poskytuje mechanismus pro selektivní spuštění nebo vynechání určitých testů na základě zadaných informací o metadatech. Následující část popisuje různé příklady použití tohoto mechanismu výběru s TE.exe.

Z okna příkazového řádku můžete spustit TE.exe.

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

Tato část popisuje volbu TE.exe /select:výběrová kritéria. Další informace o TE.exenaleznete v tématu TE.exe Možnosti příkazu.

Kritéria výběru se použijí globálně na všechny testovací binární soubory, které byly zmíněny na příkazovém řádku. Podívejme se na dvě test_binaries: příklady\CPP.SelectionCriteria1.Example.dll a příklady\CPP.SelectionCriteria2.Example.dll . Následující příklad ukazuje vlastnosti nebo metadata zadané na různých úrovních v těchto test_binaries. Můžete to získat také zadáním možnosti /listproperties v okně příkazového řádku.

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

Jinými slovy, pomocí /listproperties na každém z těchto test_binaries samostatně získáte:

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

A:

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

V tomto okamžiku je důležité si uvědomit, že test_binaries jsou uvedeny spolu s úplnou cestou a názvy tříd jsou uvedeny jako "<OborNázvů>::<ClassName>" v případě nativních test_binaries a "<OborNázvů>.<ClassName>" v případě spravovaných test_binaries. Podobně jsou názvy testovacích metod uvedeny jako "<Obor názvů>::<ClassName>::<TestMethodName>" v případě nativních test_binaries a "<Obor názvů>.<ClassName>.<TestMethodName>" v případě spravovaných test_binaries.

Jinými slovy, plně kvalifikovaný název libovolného názvu nebo funkce je to, co je uloženo v te. To umožňuje jedinečně rozlišit jakoukoli metodu. Pokud mají například dvě třídy stejný název metody, pomůže kvalifikace třídy jedinečně vybrat metodu, kterou vás zajímá. Za tímto účelem pomáhají kritéria výběru spouštět pouze testy, které odpovídají vašim kritériím v daných test_binaries.

V předchozím příkladu řekněme v příkladech\Cpp.SelectionCriteria1.Example.dllmůžete zvolit metodu "Method111" podle některého z následujících kritérií výběru:

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'"

Spuštěním příkazu můžete spustit všechny testy, které byly označeny jako priorita menší než 2:

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

V uvedeném příkladu se spustí pouze Examples\CPP.SelectionCriteria1.Example.dll – "class11::method111".

Pokud chcete spustit všechny testy v rámci třídy 11, můžete použít kvalifikovanou vlastnost Name spolu s odpovídajícími zástupnými znaky a zvolit ji následujícím způsobem:

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

Při použití kritérií výběru je potřeba mít na paměti několik věcí:

  • "and", "not" a "or" jsou vyhrazená slova a nerozlišují malá a velká písmena.
  • Názvy vlastností metadat a hodnoty jsou necitlivé na velikost písmen, například "C2" v příkladu by odpovídalo "c2" a "C2". ** Pokud tedy máte jednu funkci s metadaty "property" a jinou s metadaty "Property" a kritéria výběru hledají "PROPERTY", pak budou odpovídat oběma těmto funkcím.
  • Řetězcová hodnota v řetězci dotazu výběru by měla být zahrnuta v jednoduchých uvozovkách. V řetězcové hodnotě v dotazu výběru "?" je jeden zástupný znak a *je 0 nebo více zástupných znaků.
  • Při použití uvozovek na příkazovém řádku mějte na paměti inteligentní uvozovky, když kopírujete výběrový dotaz. Pokud zkopírujete výběrový dotaz z e-mailu Outlooku, mohou se objevit inteligentní uvozovky a TAEF ho nemusí být schopen analyzovat. Místo toho zadejte uvozovky.

Pojďme si projít několik příkladů kritérií pro složený výběr a co by realizovaly.

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

Spustí se:

  • Příklady\CPP.SelectionCriteria2.Example.dll – třída21::method211
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=3"

Spustí se:

  • Příklady\CPP.SelectionCriteria1.Example.dll – třída11::metoda112
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='U3' oR @Priority=1"

Spustí se:

  • Příklady\CPP.SelectionCriteria1.Example.dll - class11::method111
  • Příklady\CPP.SelectionCriteria2.Example.dll – třída22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*)"

Spustí všechny testy, u kterých nebyla zadána hodnota Zpětné kompatibility. (Viz následující položky.)

  • Příklady\CPP.SelectionCriteria1.Example.dll – třída11::method111, třída12::method121
  • Příklady\CPP.SelectionCriteria2.Example.dll – třída22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C*'"

spustí všechny testy, ve kterých hodnota vlastníka začíná písmenem C (nerozlišuje velká a malá písmena). Předchozí příkaz tedy spustí všechny testy v příkladech\CPP.SelectionCriteria1.Example.dll and all tests in Examples\CPP.SelectionCriteria2.Example.dll pod třídou21 (to znamená method211).

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

spustí všechny testy, ve kterých není zadána zpětná kompatibilita, nebo pokud jméno vlastníka začíná na "C" a zpětná hodnotaCompatibilty obsahuje XP. Všimněte si, jak se k určení pořadí priority používají závorky ((" a ").

V tomto příkladu se selektivně spustí:

  • Příklady\CPP.SelectionCriteria1.Example.dll – třída11::method111, třída12::method121,
  • Příklady\CPP.SelectionCriteria2.Example.dll – třída21::method211, třída22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Owner='???'"

spustí pouze testy, které mají vlastnost vlastníka s hodnotou obsahující pouze 3 znaky.

V našem příkladu by to odpovídalo "C" a spustilo se jenom:

  • Příklady\CPP.SelectionCriteria1.Example.dll – třída12::method121
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority>=1"

Poznámka:

Toto je dobrý příklad použití ">=", "<=", "", ">" a "<" kde hodnoty vlastností jsou floatvalues.

V našem příkladu by se spustily všechny metody s výjimkou Examples\CPP.SelectionCriteria2.Example.dll – class22::method221, kde nebyla zadána žádná priorita. Jinými slovy, spustí se následující:

  • Příklady\CPP.SelectionCriteria1.Example.dll – třída11::metoda111, třída11::metoda112, třída12::metoda121
  • Příklady\CPP.SelectionCriteria2.Example.dll – třída21::method211.

Všimněte si, že můžete použít "/select" ve spojení s jinými možnostmi příkazů, jako je "/list" "/listproperties" atd.

Inteligentní uvozovky

Pokud kopírujete kritéria výběru z outlookového nebo wordového dokumentu zpátky na příkazový řádek, můžete v kritériích výběru narazit na inteligentní uvozovky. Další informace o tom, co znamenají inteligentní uvozovky, najdete v článku Inteligentní uvozovky: Skrytá pohroma textu určeného pro počítačové zpracování

Neexistuje žádný snadný způsob, jak se vyhnout chytrým uvozovkám – nejlepším přístupem je odstranit všechny dvojité a jednoduché uvozovky v kritériích výběru poté, co je zkopírujete do příkazového řádku, a napsat část dotazu s uvozovkami znovu.

Při vytváření zpráv v Outlooku je možné je vypnout. Zadáním "inteligentních uvozovek" do pole nápovědy Outlooku to najdete.

Rychlý výběr podle názvu

TaEF umožňuje rychlý výběr na základě názvu na příkazovém řádku pomocí parametru příkazového řádku /name:

/name:<test name with wildcards>

odpovídá:

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

Jinými slovy, teď můžete zadat výběrový dotaz na základě názvu, například:

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

rychleji pomocí parametru /name , například takto:

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

Všimněte si, že pokud jsou v příkazovém řádku zadány /name i /select, bude parametr /name ignorován a parametr /select bude mít přednost.