Aracılığıyla paylaş


PICT Veri Kaynağı

Bu bölüme geçmeden önce lütfen TAEF'in temel kullanımını bildiğinizden ve TAEF'i kullanarak testleri nasıl yazabileceğinizi bildiğinizden emin olun.

PICT Arka Planı ve Referanslar

PICT, Pairwise Independent Combinatorial Testing anlamına gelir. PICT, parametrenizin her biri için varyasyonları ayrı ayrı belirtmenize olanak tanır. Örneğin, API testi iki parametreye bağlıysa: FileName ve FileExtension, FileName ve FileExtensions için geçirilebilecek olası varyasyonları ayrı ayrı düşünebilirsiniz:

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

Şimdi, yukarıdakilerin (4 X 7 = 28) kaba kuvvet kombinatoryal genişlemesinin, listeye eklemeyi düşündüğünüz daha fazla varyasyonla sınırların dışına kolayca çıkabileceğini görebilirsiniz. Bu tür test çalışması senaryolarında PICT, giriş parametreleri üzerinde kapsamlı bir birleştirici kapsam elde etmek için küçük bir parametre sonuçları kümesi oluşturarak çok fazla değer ekleyebilir.

TAEF'de PICT Desteği

TAEF, PICT tabanlı testler için yerleşik destek sunar.

Bundan yararlanmak için, pict.exe için giriş modeli dosyanızı normalde yaptığınız gibi yazın. Yukarıda bahsedilen örnekler klasöründeki *.txt dosyalarına bakın. PICT'nin model dosyanızda beklendiği gibi yürütülüp yürütülmediğini ilk olarak komut isteminde deneyerek denemek yararlı olabilir:

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

Pict.exe, TAEF'in en son sürüm paylaşım klasöründe ikili dosyaların geri kalanıyla birlikte mevcuttur.

MODEL dosyanızı (ve seed dosyanızı) PICT için yazmayı tamamladıktan ve komut satırında pict.exe'a karşı doğruladıktan sonra, testlerinizi PICT odaklı testler olarak TAEF'e bildirmek üzere işaretleyebilirsiniz. TAEF içinde mevcut olan tablo tabanlı veri odaklı testlere aşinaysanız, bunu oldukça benzer bulacaksınız.

Yerel kod:

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    };

Yönetilen kod:

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    }

Yukarıdaki örneklerde gösterildiği gibi, model dosyasının adını DataSource olarak belirtmeniz gerekir. Model dosyasının adına "pict:" ön eki ekleyip bunu test yönteminiz için DataSource olarak sağlamanız gerekir. TaEF ile yapılan diğer veri temelli testlerde olduğu gibi yönetilen test durumunda da TestContext özelliği get ve set yöntemlerini sağlamanız ve sınıfınızda aynı özel örneğe sahip olmanız gerekir.

KOMUT seçeneklerini PICT'ye geçirmek istiyorsanız, meta verileri bu amaçla kullanabilirsiniz. Pict.exe komut seçeneklerini TAEF meta verileriyle eşlemek için aşağıdaki tabloyu kullanın.

pict.exe komut sözdizimi Yerel TAEF meta veri söz dizimi Yönetilen TAEF meta veri söz dizimi
/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")]

Yukarıdaki meta verilerden herhangi biri komut isteminde, DataSource özelliğinde veya test, sınıf veya modül düzeyinde meta veriler olarak ayarlanabilir ve öncelik bu sırada olur. Komut isteminde bunu ayarlamak için bu söz dizimini kullanın:

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

DataSource özelliğinde meta verileri ayarlamak için, model dosya adını bir soru işareti karakteriyle (?) ekleyin ve ardından "ve" işaretiyle ayrılmış meta veri adı = meta veri değeri çiftlerinden oluşan bir set ekleyin. Bu yöntemi kullanırken meta veri adları için "Pict:" ön eki isteğe bağlıdır. Aşağıda bir örnek verilmiştir:

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

Arka planda TAEF, PICT'ye giriş modeli dosyanızı ve komut seçeneklerinizi sağlar ve sonuçları alır. PICT herhangi bir hata veya uyarı üretirse, bunların TAEF tarafından uyarı olarak günlüğe kaydedildiğini görürsünüz. PICT'nin ürettiği her çıktı satırı için TAEF, ilgili testi tekrar çağırır.

"Pict:RandomSeed" değerinin ayarlanması, "Pict:Random" için varsayılan değeri false'dan true'ya değiştirir. Bu şekilde, TAEF'nin "Pict:RandomSeed" değerini yoksayabilmesi için açıkça "Pict:Random" değerini false olarak ayarlayabilirsiniz.

PICT.exe'ın belirtilen model dosyasında ve tohum dosyası girişinde çalıştırılması için izin verilen varsayılan zaman aşımı süresi 5 dakikadır. Model dosyanız daha ilgiliyse ve PICT.exe sonuçları döndürmesi için 5 dakikadan fazla zamana ihtiyacı varsa, yukarıdaki CPP örneğinde gösterildiği gibi "Pict:Timeout" meta verilerini belirterek bu zaman aşımını geçersiz kılabilirsiniz. Örnekte, standart TAEF Zaman Aşımı biçimi aracılığıyla 1,5 dakikalık bir zaman aşımı belirtilir. Diğer PICT meta verileri gibi "Pict:Timeout" meta verileri de devralınır ve bu nedenle tüm sınıf veya modül için belirtilebilir.

Belirli bir çağrı sırasında veri değerlerine test yönteminizden ve ilişkili kurulum ve temizleme yöntemlerinden TAEF ile tablo tabanlı veri temelli testlerde yaptığınız gibi erişebilirsiniz. Yerel kod için TestData sınıfını ve bunun gibi yönetilen kodlar için TestContext'i kullanabilirsiniz:

Yerel kod:

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    }

Yönetilen kod:

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'teki veri temelli testlerde olduğu gibi "Dizin" de ayrılmıştır ve parametre adı olarak kullanılmamalıdır. Dizin, test yöntemi çağırmasının dizinini örtük olarak ifade eder ve testinizin ihtiyacı varsa test yönteminden erişilebilir.

PICT tabanlı testlerde tüm parametrelerin veri türünün WEX::Common::String (yerel), String (yönetilen) veya VT_BSTR (betik) olduğu varsayılır. Dönüştürme ve yorumlama kullanıcıya bırakılır.

ARTıK TAEF kullanarak PICT tabanlı test yazma işlemini tamamladığınıza göre, komut isteminden çağırabilir ve TAEF'nin sunduğu tüm komut özelliklerini uygulayabilirsiniz: veri olarak PICT çıkışı kullanılarak oluşturulacak tüm test yöntemlerinin listesini almak için /list , test yöntemi adlarının listesini ve ilişkili oldukları meta veriler ve veri değerlerini almak için /listproperties ve saire. Başlamadan önce dikkate almanız gereken önemli nokta, pict.exe yolunuzda olduğundan emin olmaktır.

Aşağıda birkaç örnek verilmiştir:

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

Seçim ölçütleri (/select ve /name) hakkında daha fazla bilgi edinmek için lütfen Seçim wiki sayfasına bakın.

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

Yukarıdaki örnekte dizini kullanarak nasıl seçim yapabileceğiniz gösterilmektedir. Veri değerine göre de seçebilirsiniz.

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 Sonucu Önbelleğe Alma

Bazı model dosyası çok karmaşık olabilir ve Pict.exetarafından işlenmesi için daha uzun zaman gerekebilir. TAEF, belirli bir Te.exeyürütmesi sırasında sonuçları önbelleğe alarak sonuçlar için işlem süresini azaltmaya çalışır. Aynı yürütme çalıştırmasında sonraki bir test aynı model ve tohum dosyası bileşimine başvuruyorsa, TAEF önbelleğe alınmış sonuçları kullanır. Varsayılan olarak, her yürütmenin sonunda önbelleğe alınan sonuçlar silinir.

Sonraki çalıştırmalarda önbelleğe alınan sonuçlardan yararlanmaya devam etmek istiyorsanız, yürütme sırasında komut isteminde "/persistPictResults" seçeneğini belirtebilirsiniz. Komutunuz için "/persistPictResults" belirttiğinizde, ilk yürütme aslında pict.exe yürütülür ve uzun sürebilir, ancak sonraki tüm çalıştırmalar model ve tohum dosyasının değiştirilmediği durumlarda önbelleğe alınan sonuçları kullanır. Not: Sonraki çalıştırmalar için "/persistPictResults" belirtmeye devam etmeniz gerekir. Belirtmediğiniz sonraki tüm çalıştırmalar, bu çalıştırmanın sonunda önbelleğe alınan sonuçları siler.

PICT sonuçlarını kalıcı hale getirmek ve önbelleğe alınmış verileri kullanmak varsayılan olarak yapmak istediğiniz bir şeyse, bunu aşağıda gösterildiği gibi te_cmd ortam değişkeninizin bir parçası olarak ayarlayabilir ve her çalıştırmada bunu belirtme gereksinimini ortadan kaldırabilirsiniz. te_cmd hakkında daha fazla bilgi için bkz. Testleri Yürütme .

set te_cmd = /persistPictResults

Önbelleğe alınan sonuç dosyaları, Te.exe erişimi varsa %temp% dizininde "TAEF-PICT" adlı bir klasörde veya Te.exe başlatıldığı geçerli yürütme dizininde depolanır. Tutarsız durumdaki sonuçlara sahip olabileceğiniz tek zaman, yürütme sırasında Ctrl + C tuşlarına basmanızdır. Böyle bir durumda, TAEF önbelleğe alınan sonuçları silmeye çalışır, ancak bunu yapamazsa, etkiyle ilgili bir hata görürsünüz. Hata, önbelleğe alınan sonuçların konumunu silmenizi ister. Bunu yapmamak, sonraki testlerde tanımsız veya hatalı davranışlara neden olabilir.

TAEF'te yerleşik PICT desteği ile artık hem PICT'deki özelliklerden hem de test otomasyonunuzda TAEF'deki özelliklerden en iyi şekilde faydalanabilirsiniz.

Kaynak Olarak DataSource

Test modülünüzde PICT modellerini ve dağıtım dosyalarını kaynak olarak ekleyebilirsiniz.

Yerel kodda bu, DataSource meta verilerinde dosya adı yerine kaynak adı belirtilerek yapılır. Aşağıda bir örnek verilmiştir:

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

"MyModelResourceName" ve "MySeedingResourceName" bir .rc dosyasında tanımlanan kaynak adlarıdır. Kaynak türünün DATASOURCE_XML olması gereken tablo veri kaynaklarından farklı olarak kaynak türünün DATAFILE olması gerekir.

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

DataSource meta veri değeri, model bir dosya olduğunda olduğu gibi kalır. Yerel kodda da benzer şekilde, kaynak adının dosya adıyla aynı olmasını sağlayabilirsiniz. TAEF ilk olarak DataSource adıyla gerçek dosyanın varlığını arar. Dosya bulunamazsa test modülünün kaynaklarına bakarak devam eder. Kaynakta depolanan DataSource'u değiştirmek için yeniden derleme gerektiğinden, geliştirme sırasında DataSource dosyasını test dll ile aynı konuma kopyalayarak (ve kaynak adını dosya adıyla aynı olacak şekilde adlandırarak) bu tasarımdan yararlanabilirsiniz. Testi tamamladıktan sonra dosyayı kod dizinine geri taşıyın (kopyalamayın) ve kaynağı eklemek için yeniden derleyin.