Поделиться через


Отбор

Тестовая платформа разработки и выполнения (TAEF) предоставляет механизм выборочного выполнения или пропускания определенных тестов на основе предоставленных вами сведений о метаданных. В следующем разделе рассматриваются различные примеры использования этого механизма выбора с TE.exe.

Вы можете запустить TE.exe из окна командной строки.

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

В этом разделе описывается параметр TE.exe /select:selection criteria . Дополнительные сведения о TE.exeсм. в разделеTE.exe "Параметры команд".

Критерии выбора применяются глобально ко всем двоичным файлам теста, упомянутым в командной строке. Рассмотрим два тестовых бинарных файла: примеры\CPP.SelectionCriteria1.Example.dll и примеры\CPP.SelectionCriteria2.Example.dll. В следующем примере показаны свойства или метаданные, указанные на различных уровнях в этих test_binaries. Это также можно получить, указав параметр /listproperties в окне командной строки.

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

Другими словами, используя /listproperties для каждой из этих test_binaries отдельно, вы получаете следующее:

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

И:

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

Важно отметить на этом этапе, что test_binaries перечислены вместе с их полными путями, а имена классов перечислены как "<Namespace>::<ClassName>" в случае нативных test_binaries и "<Namespace>.<ClassName>" в случае управляемых test_binaries. Аналогичным образом названия методов тестирования перечислены как "<Namespace>::<ClassName>::<TestMethodName>" в случае нативных test_binaries и "<Namespace>.<ClassName>.<TestMethodName>" в случае с управляемыми test_binaries.

Другими словами, полное имя любого имени или функции — это то, что сохраняется в te. Это позволяет уникально различать любой метод. Например, если два класса имеют одно и то же имя метода, квалификация класса помогает уникально выбрать интересующий вас метод. Для этой цели критерии выбора позволяют выполнять только те тесты, которые соответствуют вашим критериям в заданных test_binaries.

В приведенном выше примере, например, в примере\Cpp.SelectionCriteria1.Example.dll, можно выбрать "Method111" по одному из следующих критериев:

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

Вы можете выполнить все тесты, помеченные как "Приоритет" менее 2, выполнив следующую команду:

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

В нашем примере будет выполняться только примеры\CPP.SelectionCriteria1.Example.dll — class11::method111.

Если вы хотите выполнить все тесты в class11, можно использовать атрибут qualified 'Name' вместе с подстановочным знаком, чтобы выбрать его следующим образом:

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

При использовании критериев выбора следует учитывать некоторые аспекты:

  • "and", "not" и "or" являются зарезервированными словами и являются нечувствительными к регистру.
  • Имена и значения свойств метаданных не учитывают регистр, например "C2" в примере, будут соответствовать "c2" и "C2". Таким образом, если у вас есть одна функция с метаданными "свойство" и другая с "Свойство", а критерии выбора ищут "PROPERTY", это будет соответствовать обеим функциям.
  • Строковое значение в строке запроса выбора должно быть включено в одинарные кавычки. В строковом значении в запросе выбора "?" есть один подстановочный знак, а "*" — 0 или более подстановочных знаков.
  • При использовании кавычки в командной строке следует учитывать смарт-кавычки при копировании по запросу выбора. Если вы копируете запрос выборки из электронной почты Outlook, может случиться так, что смарт-кавычки будут присутствовать, и TAEF может быть не в состоянии проанализировать этот запрос. Вместо этого введите кавычки.

Давайте рассмотрим несколько примеров сложных критериев отбора и их выполнения.

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

Будет выполняться:

  • Примеры\CPP.SelectionCriteria2.Example.dll — class21::method211
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C2' AND @Priority=3"

Будет выполняться:

  • Примеры\CPP.SelectionCriteria1.Example.dll — class11::method112
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='U3' oR @Priority=1"

Будет выполняться:

  • Примеры\CPP.SelectionCriteria1.Example.dll — class11::method111
  • Примеры\CPP.SelectionCriteria2.Example.dll — класс22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"not(@BackwardsCompatibility=*)"

Будут выполняться все тесты, в которых не указано значение Обратной совместимости. (См. следующие элементы.)

  • Примеры\CPP.SelectionCriteria1.Example.dll — class11::method11, class12::method121
  • Примеры кода\CPP.SelectionCriteria2.Example.dll: класс22::method221
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll \
/select:"@Owner='C*'"

выполнит все тесты, в которых значение владельца начинается с "C" (без учета регистра). Таким образом, предыдущая команда будет выполнять все тесты в примерах\CPP.SelectionCriteria1.Example.dll and all tests in Examples\CPP.SelectionCriteria2.Example.dll в классе 21 (то есть метод211).

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

будет выполнять все тесты, в которых не указана обратная совместимость или где имя владельца начинается с "C", и значение обратной совместимости содержит XP. ОБРАТИТЕ ВНИМАНИЕ, как скобки "(" и "" используются для указания порядка приоритета.

В этом примере будет выполнен выборочный запуск:

  • Примеры\CPP.SelectionCriteria1.Example.dll - class11::method111, class12::method121,
  • Примеры\CPP.SelectionCriteria2.Example.dll - class21::method211, class22::method21
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Owner='???'"

будут выполнены только те тесты, у которых свойство владельца содержит значение с только 3 символами.

В нашем примере это будет соответствовать "C" и выполняться только:

  • Примеры\CPP.SelectionCriteria1.Example.dll — класс12::method121
Te.exe Examples\CPP.SelectionCriteria1.Example.dll Examples\CPP.SelectionCriteria2.Example.dll /select:"@Priority>=1"

Замечание

Это хороший пример использования ">=", "<=", ">" и "<" там, где значения свойств являются вещественными числами.

В нашем примере выполняются все методы, кроме Examples\CPP.SelectionCriteria2.Example.dll - class22::method221, где не задан приоритет. Другими словами, это будет работать:

  • Примеры\CPP.SelectionCriteria1.Example.dll - class11::method11, class11::method112, class12::method121
  • Примеры\CPP.SelectionCriteria2.Example.dll — class21::method211.

Обратите внимание, что вы можете использовать "/select" в сочетании с другими параметрами команд, такими как "/list" "/listproperties" и т. д.

Умные кавычки

Вы можете столкнуться с умными кавычками в критериях выбора, если копируете их из Outlook или документа Word обратно в командную строку. Дополнительные сведения о том, что такое умные кавычки, можно найти на умные кавычки: скрытая проблема текста, предназначенного для обработки компьютерными системами

Нет простого способа избежать умных кавычек. Лучший подход заключается в удалении всех двойных кавычек и одинарных кавычек в критериях выбора после копирования его в командную строку, повторно введите часть запроса с кавычками.

При создании сообщений в Outlook их можно отключить. Введите "умные кавычки" в текстовом поле справки Outlook, чтобы найти это.

Выбор на основе краткого наименования

TAEF позволяет быстро выбрать на основе имени в командной строке с помощью параметра командной строки "/name":

/name:<test name with wildcards>

эквивалентен следующему:

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

Другими словами, теперь можно указать запрос выбора на основе имени, например:

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

быстрее с помощью /name, например так:

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

Обратите внимание, что если в командной строке указаны как /name , так и /select , то параметр /name игнорируется и /select имеет приоритет.