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


Источник данных PICT

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

Справочные материалы и справочные материалы ПО PICT

PICT расшифровывается как парное независимое комбинаторное тестирование. PICT позволяет указать варианты для каждого параметра отдельно. Например, если тест API зависит от двух параметров: FileName и FileExtension, можно подумать о возможных вариантах передачи для FileName и FileExtensions отдельно следующим образом:

  • FileName: a, z12390, Realllyreallylong, normallength
  • FileExtension: txt, png, bat, doc, exe, bmp, wav

Теперь вы видите, что комбинаторное расширение методом подбора выше (4 X 7 = 28) может легко выйти за пределы , когда вы думаете о дополнительных вариантах, которые нужно добавить в список. В таких тестовых сценариях PICT может добавить большую ценность, создав компактный набор результатов параметров, чтобы получить полный комбинаторный охват входных параметров.

Поддержка PICT в TAEF

TAEF предлагает встроенную поддержку тестов на основе PICT.

Чтобы воспользоваться этим, запишите файл входной модели для pict.exe, как обычно. Обратитесь к файлам *.txt в папке examples, упомянутой выше. Может быть полезно попробовать, если PICT выполняется должным образом в файле модели, сначала попробуйте выполнить его в командной строке следующим образом:

pict.exe <model file> [/e:<seed file>]

Pict.exe доступно вместе с остальными двоичными файлами в общей папке последнего выпуска TAEF.

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

Машинный код:

1     class PictExample
2     {
3         TEST_CLASS(PictExample)
4
5         BEGIN_TEST_METHOD(SimpleTest)
6             TEST_METHOD_PROPERTY(L"DataSource", L"pict:PictExample.txt")
7         END_TEST_METHOD()
8
9         BEGIN_TEST_METHOD(TestWithSeed)
10            TEST_METHOD_PROPERTY(L"DataSource", L"pict:TestWithSeed.txt")
11            TEST_METHOD_PROPERTY(L"Pict:SeedingFile", L"TestWithSeed.sed")
12            TEST_METHOD_PROPERTY(L"Pict:Timeout", L"00:01:30")
13        END_TEST_METHOD()
14
15        BEGIN_TEST_METHOD(TestWithFunction)
16            TEST_METHOD_PROPERTY(L"DataSource", L"pict:TestWithFunction.txt")
17        END_TEST_METHOD()
18    };

Управляемый код:

1     [TestClass]
2     public class CSharpPictExample
3     {
4         [TestMethod]
5         [DataSource("pict:ConstraintsTest.txt")]
6         [TestProperty("Pict:SeedingFile", "ConstraintsTest.seed")]
7         public void ConstraintsTest()
8         {
9             ...
10        }
11
12        [TestMethod]
13        [DataSource("pict:SumofSquareRoots.txt")]
14        public void SumOfSquareRoots()
15        {
16            ...
17        }
18
19        public TestContext TestContext
20        {
21            get { return m_testContext; }
22            set { m_testContext = value; }
23        }
24
25        private TestContext m_testContext;
26    }

Как показано в приведенных выше примерах, необходимо указать имя файла модели в качестве DataSource. Имя файла модели необходимо указать в префиксе "pict:" и указать его в качестве источника данных для метода теста. В случае управляемого теста, как и для любого другого управляемого данными теста с ПОМОЩЬЮ TAEF, необходимо предоставить методы get и set свойства TestContext, а также частный экземпляр этого же класса.

Если вы хотите передать параметры команды в PICT, для этой цели можно использовать метаданные. Используйте следующую таблицу для сопоставления параметров команд Pict.exe с метаданными TAEF.

Синтаксис команды pict.exe Собственный синтаксис метаданных TAEF Синтаксис управляемых метаданных TAEF
/o:3 TEST_METHOD_PROPERTY(L"Pict:Order", L"3") [TestProperty("Pict:Order", "3")]
/D: TEST_METHOD_PROPERTY(L"Pict:ValueSeparator", L",") [TestProperty("Pict:ValueSeparator", ",")]
/a: TEST_METHOD_PROPERTY(L"Pict:AliasSeparator", L"
/N:~ TEST_METHOD_PROPERTY(L"Pict:NegativeValuePrefix", L"~") [TestProperty("Pict:NegativeValuePrefix", "~")]
/e:test.seed TEST_METHOD_PROPERTY(L"Pict:SeedingFile", L"test.seed") [TestProperty("Pict:SeedingFile", "test.seed")]
/r TEST_METHOD_PROPERTY(L"Pict:Random", L"true") [TestProperty("Pict:Random", "true")]
/r:33 TEST_METHOD_PROPERTY(L"Pict:RandomSeed", L"33") [TestProperty("Pict:RandomSeed", "33")]
/C TEST_METHOD_PROPERTY(L"Pict:CaseSensitive", L"true") [TestProperty("Pict:CaseSensitive", "true")]

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

te.exe <test dll> /Pict:Order=3 /Pict:SeedingFile=test.seed

Чтобы задать метаданные в свойстве DataSource, добавьте имя файла модели с символом вопросительного знака (?), а затем набор пар метаданных с разделителями амперсандом = пары значений метаданных. При использовании этого метода префикс Pict:" для имен метаданных является необязательным. Вот пример:

TEST_METHOD_PROPERTY(L"DataSource", L"Pict:model.txt?Order=3&CaseSensitive=true&Random=true")

В фоновом режиме TAEF предоставит файл входной модели и параметры команд в PICT и получит результаты. Если PICT выдает какие-либо ошибки или предупреждения, вы увидите их в журнале как предупреждения с помощью TAEF. Для каждой результирующих выходных строк, создаваемых PICT, TAEF повторно вызовет тест.

Установка значения "Pict:RandomSeed" изменит значение по умолчанию для "Pict:Random" с false на true. Таким образом, можно явно задать для параметра "Pict:Random" значение false, чтобы в TAEF игнорировать "Pict:RandomSeed".

Время ожидания по умолчанию, разрешенное для выполнения PICT.exe в указанном файле модели и входных данных начального файла, составляет 5 минут. Если файл модели больше задействован и требует больше времени, чем 5 минут, чтобы PICT.exe возвращали результаты, можно переопределить это время ожидания, как показано в примере CPP выше, указав метаданные Pict:Timeout . В этом примере время ожидания в 1,5 минуты указывается в стандартном формате тайм-аута TAEF . Как и другие метаданные PICT, метаданные Pict:Timeout наследуются и, следовательно, могут быть указаны для всего класса или модуля.

Вы можете получить доступ к значениям данных во время заданного вызова из метода теста и связанных с ним методов установки и очистки так же, как и для тестов на основе данных на основе таблиц с помощью TAEF, используя класс TestData для машинного кода и testContext для управляемого кода, например:

Машинный код:

1     void PictExample::SimpleTest()
2     {
3         String valueA;
4         if (SUCCEEDED(TestData::TryGetValue(L"A", valueA)))
5         {
6           Log::Comment(L"A retrieved was " + valueA);
7         }
8
9         String valueB;
10        if (SUCCEEDED(TestData::TryGetValue(L"B", valueB)))
11        {
12            Log::Comment(L"B retrieved was " + valueB);
13        }
14
15        String valueC;
16        if (SUCCEEDED(TestData::TryGetValue(L"C", valueC)))
17        {
18            Log::Comment(L"C retrieved was " + valueC);
19        }
20
21        unsigned int index;
22        if (SUCCEEDED(TestData::TryGetValue(L"index", index)))
23        {
24            Log::Comment(String().Format(L"At index %d", index));
25        }
26    }

Управляемый код:

1      [TestClass]
2      public class CSharpPictExample
3      {
4          [TestMethod]
5          [DataSource("pict:ConstraintsTest.txt")]
6          public void ConstraintsTest()
7          {
8              Log.Comment("A is " + m_testContext.DataRow["A"]);
9              Log.Comment("B is " + m_testContext.DataRow["B"]);
10             Log.Comment("C is " + m_testContext.DataRow["C"]);
11             Log.Comment("D is " + m_testContext.DataRow["D"]);
12
13             UInt32 index = (UInt32)m_testContext.DataRow["Index"];
14             Log.Comment("At index " + index.ToString());
15        }
16
17        [TestMethod]
18        [DataSource("pict:SumofSquareRoots.txt")]
19        public void SumOfSquareRoots()
20        {
21             Log.Comment("A is " + m_testContext.DataRow["A"]);
22             Log.Comment("B is " + m_testContext.DataRow["B"]);
23
24             UInt32 index = (UInt32)m_testContext.DataRow["Index"];
25             Log.Comment("At index " + index.ToString());
26        }
27
28        public TestContext TestContext
29        {
30             get { return m_testContext; }
31             set { m_testContext = value; }
32        }
33
34        private TestContext m_testContext;
35    }

Как и в случае с любыми тестами на основе данных в TAEF, "Индекс" зарезервирован и не должен использоваться в качестве имени параметра. Индекс неявно ссылается на индекс вызова метода теста и доступен из метода теста, если он необходим для теста.

Важно также отметить, что в случае тестов на основе PICT предполагается, что тип данных для всех параметров — WEX::Common::String (native), String(managed) или VT_BSTR(script). Преобразование и интерпретация остаются за пользователем.

Теперь, когда вы закончили разработку теста на основе PICT с помощью TAEF, вы можете вызвать его из командной строки и применить к нему все функции команд, которые предлагает TAEF: например , /list , чтобы получить список всех методов тестирования, которые будут созданы с помощью выходных данных PICT в качестве данных, /listproperties , чтобы получить список имен методов теста, а также метаданных и значений данных, с которыми они связаны. Др. Прежде чем начать, важно убедиться, что pict.exe находится на вашем пути.

Вот несколько таких случаев.

te Examples\CPP.Pict.Example.dll /list /name:*SimpleTest*
Test Authoring and Execution Framework v2.9.3k for x86
        f:\ Examples\CPP.Pict.Example.dll
            WEX::TestExecution::Examples::PictExample
                WEX::TestExecution::Examples::PictExample::SimpleTest#0
                WEX::TestExecution::Examples::PictExample::SimpleTest#1
                WEX::TestExecution::Examples::PictExample::SimpleTest#2
                WEX::TestExecution::Examples::PictExample::SimpleTest#3
                WEX::TestExecution::Examples::PictExample::SimpleTest#4
                WEX::TestExecution::Examples::PictExample::SimpleTest#5
                WEX::TestExecution::Examples::PictExample::SimpleTest#6
                WEX::TestExecution::Examples::PictExample::SimpleTest#7
                WEX::TestExecution::Examples::PictExample::SimpleTest#8
                WEX::TestExecution::Examples::PictExample::SimpleTest#9
                WEX::TestExecution::Examples::PictExample::SimpleTest#10
                WEX::TestExecution::Examples::PictExample::SimpleTest#11
                WEX::TestExecution::Examples::PictExample::SimpleTest#12
                WEX::TestExecution::Examples::PictExample::SimpleTest#13
                WEX::TestExecution::Examples::PictExample::SimpleTest#14
                WEX::TestExecution::Examples::PictExample::SimpleTest#15
                WEX::TestExecution::Examples::PictExample::SimpleTest#16
                WEX::TestExecution::Examples::PictExample::SimpleTest#17
                WEX::TestExecution::Examples::PictExample::SimpleTest#18
                WEX::TestExecution::Examples::PictExample::SimpleTest#19
                WEX::TestExecution::Examples::PictExample::SimpleTest#20
                WEX::TestExecution::Examples::PictExample::SimpleTest#21
                WEX::TestExecution::Examples::PictExample::SimpleTest#22
                WEX::TestExecution::Examples::PictExample::SimpleTest#23

Дополнительные сведения о критериях выбора (/select и /name) см. на вики-странице выбора.

te Examples\Csharp.Pict.Example.dll /listproperties /select:"@Name='*SumofSquare*'
                    and @Data:index>10
Test Authoring and Execution Framework v2.9.3k for x86
        f:\ Examples\CSharp.Pict.Example.dll
            WEX.Examples.CSharpPictExample
                WEX.Examples.CSharpPictExample.SumOfSquareRoots#11
                        Property[DataSource] = pict:SumofSquareRoots.txt
                        Data[a] = 1
                        Data[b] = ~-1
                WEX.Examples.CSharpPictExample.SumOfSquareRoots#12
                        Property[DataSource] = pict:SumofSquareRoots.txt
                        Data[a] = 2
                        Data[b] = ~-1

В приведенном выше примере показано, как выбрать с помощью индекса. Вы также можете выбрать выбор в зависимости от значения данных.

te Examples\Csharp.Pict.Example.dll /listproperties /select:"@Name='*SumofSquare*'
                    and (@Data:A='1' and @Data:B='1')"
Test Authoring and Execution Framework v2.9.3k for x86
        f:\ Examples\CSharp.Pict.Example.dll
            WEX.Examples.CSharpPictExample
                WEX.Examples.CSharpPictExample.SumOfSquareRoots#8
                        Property[DataSource] = pict:SumofSquareRoots.txt
                        Data[a] = 1
                        Data[b] = 1

Кэширование результатов PICT

Некоторые файлы модели могут быть очень сложными и могут потребовать больше времени для обработки Pict.exe. TAEF пытается сократить время обработки результатов путем кэширования результатов во время выполнения Te.exe. Если последующий тест в том же выполнении относится к той же модели и начальной комбинации файлов, TAEF будет использовать кэшированные результаты. По умолчанию в конце каждого выполнения кэшированные результаты удаляются.

Если вы хотите продолжать использовать кэшированные результаты при последующих запусках, можно указать параметр "/persistPictResults" в командной строке во время выполнения. Каждый раз, когда вы указываете "/persistPictResults" для команды, первое выполнение будет выполняться pict.exe и может занять много времени, но все последующие запуски будут использовать кэшированные результаты в случаях, когда модель и файл начального значения были не изменены. Примечание. Для последующих запусков необходимо будет продолжать указывать "/persistPictResults". Любой последующий запуск, в котором вы не указали его, удалит кэшированные результаты в конце этого запуска.

Если вы хотите сохранить результаты PICT и использовать кэшированные данные по умолчанию, можно задать его как часть переменной среды te_cmd, как показано ниже, и исключить необходимость указывать ее при каждом запуске. Дополнительные сведения о te_cmd см. в разделе Выполнение тестов .

set te_cmd = /persistPictResults

Кэшированные файлы результатов хранятся в папке с именем "TAEF-PICT" в каталоге %temp%, если у Te.exe есть доступ к нему, или в текущем каталоге выполнения, из которого был запущен Te.exe. Единственный раз, когда вы можете получить результаты в несогласованном состоянии, — это нажатие клавиш CTRL+C во время выполнения. В этом случае TAEF попытается удалить кэшированные результаты, но если это не удается сделать, вы увидите ошибку. При возникновении ошибки будет предложено удалить кэшированное расположение результатов. Невыполнение этого действия может привести к неопределенному или ошибочному поведению в последующих тестах.

Благодаря встроенной поддержке PICT в TAEF теперь можно максимально эффективно использовать как функции в PICT, так и функции в TAEF при автоматизации тестирования.

DataSource как ресурс

Вы можете добавлять модели PICT и файлы заполнения в качестве ресурсов в тестовом модуле.

В машинном коде это делается путем указания имени ресурса вместо имени файла в метаданных DataSource. Вот пример:

BEGIN_TEST_METHOD(ResourceNameDataSource)
    TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyModelResourceName?SeedingFile=MySeedingResourceName")
END_TEST_METHOD()

MyModelResourceName и MySeedingResourceName — это имена ресурсов, определенные в RC-файле. Тип ресурса должен быть DATAFILE, в отличие от табличных источников данных , где тип ресурса должен быть DATASOURCE_XML.

MyModelResourceName DATAFILE "model.txt"
MySeedingResourceName DATAFILE "seed.txt"

Значение метаданных DataSource останется таким же, как и при использовании файла модели. Аналогично в машинном коде можно сделать имя ресурса таким же, как и имя файла. СНАЧАЛА TAEF будет искать наличие фактического файла с именем DataSource. Если файл не найден, выполните поиск в ресурсах тестового модуля. Так как изменение dataSource, хранящегося в ресурсе, требует повторной компиляции, вы можете использовать эту схему, скопировав файл DataSource в то же расположение, что и тестовая библиотека DLL во время разработки (и присвоив имя ресурса, чтобы оно совпадало с именем файла). После завершения тестирования переместите (а не копируйте) файл обратно в каталог кода и перекомпилируйте его, чтобы внедрить ресурс.