Источник данных 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 во время разработки (и присвоив имя ресурса, чтобы оно совпадало с именем файла). После завершения тестирования переместите (а не копируйте) файл обратно в каталог кода и перекомпилируйте его, чтобы внедрить ресурс.