Sumber Data PICT
Pastikan Anda terbiasa dengan eksekusi dasar TAEF dan tahu cara Menulis Pengujian menggunakannya, sebelum melanjutkan bagian ini.
Latar Belakang dan Referensi PICT
PICT adalah singkatan dari Pairwise Independent Combinatorial Testing. PICT memungkinkan Anda menentukan variasi untuk setiap parameter Anda secara terpisah. Misalnya, jika pengujian API bergantung pada dua parameter: FileName dan FileExtension, Anda dapat memikirkan kemungkinan variasi untuk diteruskan untuk FileName dan untuk FileExtensions secara terpisah seperti:
- FileName: a, z12390, Realllyreallyreallylonglonglonglong, normallength
- FileExtension: txt, png, bat, doc, exe, bmp, wav
Sekarang, Anda dapat melihat bahwa perluasan kombinatorial brute-force di atas (4 X 7 = 28) dapat dengan mudah keluar dari batas saat Anda memikirkan lebih banyak variasi untuk ditambahkan ke daftar. Dalam skenario kasus pengujian seperti itu, PICT dapat menambahkan banyak nilai dengan menghasilkan serangkaian hasil parameter yang ringkas untuk mendapatkan cakupan komprehensif atas parameter input.
Dukungan PICT di TAEF
TAEF menawarkan dukungan bawaan untuk pengujian berbasis PICT.
Untuk memanfaatkan ini, tulis file model input Anda untuk pict.exe seperti biasa. Lihat file *.txt di folder contoh yang disebutkan di atas. Mungkin berguna untuk mencoba apakah PICT dijalankan seperti yang diharapkan pada file model Anda dengan mencobanya di prompt perintah terlebih dahulu seperti:
pict.exe <model file> [/e:<seed file>]
Pict.exe tersedia dengan biner lainnya pada berbagi rilis terbaru TAEF.
Setelah Anda selesai menulis file model Anda (dan file benih) untuk PICT dan telah memverifikasinya terhadap pict.exe pada prompt perintah, Anda sekarang dapat menandai pengujian Anda untuk memberi tahu TAEF bahwa mereka adalah pengujian berbasis PICT. Jika Anda terbiasa dengan pengujian berbasis data berbasis tabel yang tersedia di TAEF, Anda akan menemukan ini sangat mirip.
Kode asli:
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 };
Kode terkelola:
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 }
Seperti yang ditunjukkan pada contoh di atas, Anda perlu menentukan nama file model sebagai DataSource. Anda harus mengawali nama file model dengan "pict:" dan menyediakannya sebagai DataSource untuk metode pengujian Anda. Dalam kasus pengujian terkelola, sama seperti pengujian berbasis data lainnya dengan TAEF, Anda harus memberikan properti TestContext mendapatkan dan mengatur metode dan memiliki instans privat yang sama di kelas Anda.
Jika Anda ingin meneruskan opsi perintah ke PICT, Anda dapat menggunakan metadata untuk tujuan ini. Gunakan tabel berikut untuk memetakan opsi perintah Pict.exe ke metadata TAEF.
sintaks perintah pict.exe | Sintaks metadata TAEF asli | Sintaks metadata TAEF terkelola |
---|---|---|
/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", ",")] |
/J: | 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")] |
Salah satu metadata di atas dapat diatur pada prompt perintah, di properti DataSource, atau sebagai metadata tingkat pengujian, kelas, atau modul, dengan prioritas dalam urutan tersebut. Untuk mengaturnya di prompt perintah, gunakan sintaks:
te.exe <test dll> /Pict:Order=3 /Pict:SeedingFile=test.seed
Untuk mengatur metadata di properti DataSource, tambahkan nama file model dengan karakter tanda tanya (?) lalu sekumpulan nama metadata yang dipisahkan ampersan = pasangan nilai metadata. Saat menggunakan metode ini, awalan "Pict:" untuk nama metadata bersifat opsional. Ini contohnya:
TEST_METHOD_PROPERTY(L"DataSource", L"Pict:model.txt?Order=3&CaseSensitive=true&Random=true")
Di balik layar, TAEF akan menyediakan file model input dan opsi perintah Anda ke PICT dan mendapatkan hasilnya. Jika PICT menghasilkan kesalahan atau peringatan, Anda akan melihat ini dicatat sebagai peringatan oleh TAEF. Untuk setiap baris output hasil yang dihasilkan PICT, TAEF akan memanggil kembali pengujian yang bersangkutan.
Mengatur nilai "Pict:RandomSeed" akan mengubah default untuk "Pict:Random" dari false ke true. Dengan cara ini, Anda dapat secara eksplisit mengatur "Pict:Random" ke false untuk membuat TAEF mengabaikan "Pict:RandomSeed".
Batas waktu default yang diizinkan untuk PICT.exe dijalankan pada file model dan input file benih yang ditentukan adalah 5 menit. Jika file model Anda lebih terlibat dan membutuhkan lebih dari 5 menit agar PICT.exe mengembalikan hasil, Anda dapat mengganti waktu habis ini seperti yang ditunjukkan pada contoh CPP di atas dengan menentukan metadata "Pict:Timeout ". Dalam contoh, batas waktu 1,5 menit ditentukan melalui format Batas Waktu TAEF standar. Seperti metadata PICT lainnya, metadata "Pict:Timeout" diwarisi dan karenanya dapat ditentukan untuk seluruh kelas atau modul.
Anda dapat mengakses nilai data selama pemanggilan tertentu dari metode pengujian Anda dan metode penyiapan dan pembersihan terkait dengan cara yang sama seperti yang Anda lakukan untuk pengujian berbasis data berbasis tabel dengan TAEF - menggunakan kelas TestData untuk kode asli dan menggunakan TestContext untuk kode terkelola seperti:
Kode asli:
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 }
Kode terkelola:
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 }
Sama seperti pengujian berbasis data di TAEF, "Indeks" dicadangkan dan tidak boleh digunakan sebagai nama parameter. Indeks secara implisit mengacu pada indeks pemanggilan metode pengujian dan dapat diakses dari metode pengujian jika pengujian Anda membutuhkannya.
Penting juga untuk dicatat bahwa dalam kasus pengujian berbasis PICT, jenis data untuk semua parameter diasumsikan sebagai WEX::Common::String (asli), String(dikelola) atau VT_BSTR(skrip). Konversi dan interpretasi diserahkan kepada pengguna.
Sekarang setelah Anda selesai menulis pengujian berbasis PICT menggunakan TAEF, Anda dapat memanggilnya dari prompt perintah dan menerapkan semua fitur perintah yang ditawarkan TAEF ke dalamnya: seperti /list untuk mendapatkan daftar semua metode pengujian yang akan dihasilkan menggunakan output PICT sebagai data, /listproperties untuk mendapatkan daftar nama metode pengujian bersama dengan metadata dan nilai data yang terkait dengannya Dll. Hal utama yang perlu diperhatikan sebelum memulai adalah memastikan bahwa pict.exe ada di jalur Anda.
Berikut beberapa contohnya:
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
Untuk membaca selengkapnya tentang kriteria pilihan (/pilih dan /nama) silakan lihat halaman wiki Pilihan.
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
Contoh di atas menunjukkan bagaimana Anda dapat memilih menggunakan indeks. Anda juga dapat memilih untuk memilih berdasarkan nilai data.
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
Penembolokan Hasil PICT
Beberapa file model mungkin menjadi sangat kompleks dan mungkin memerlukan waktu lebih lama untuk diproses oleh Pict.exe. TAEF mencoba mengurangi waktu pemrosesan untuk hasil dengan penembolokan hasil selama eksekusi Te.exe tertentu. Jika pengujian berikutnya dalam eksekusi yang sama mengacu pada model dan kombinasi file seed yang sama, TAEF akan menggunakan hasil yang di-cache. Secara default, di akhir setiap eksekusi, hasil yang di-cache akan dihapus.
Jika Anda ingin terus memanfaatkan hasil cache dalam eksekusi berikutnya, Anda dapat menentukan opsi "/persistPictResults" pada prompt perintah selama eksekusi. Setiap kali Anda menentukan "/persistPictResults" untuk perintah Anda, eksekusi pertama akan benar-benar dijalankan pict.exe dan mungkin memakan waktu lama, tetapi semua eksekusi berikutnya akan menggunakan hasil yang di-cache dalam kasus di mana model dan file benih telah tidak dimodifikasi. Catatan: Anda harus terus menentukan "/persistPictResults" untuk eksekusi berikutnya. Setiap eksekusi berikutnya di mana Anda tidak menentukannya akan menghapus hasil yang di-cache di akhir eksekusi tersebut.
Jika mempertahankan hasil PICT, dan menggunakan data cache adalah sesuatu yang ingin Anda lakukan secara default, Anda dapat mengaturnya sebagai bagian dari variabel lingkungan te_cmd Seperti yang ditunjukkan di bawah ini dan menghilangkan kebutuhan untuk menentukannya pada setiap proses. Lihat Menjalankan Pengujian untuk detail selengkapnya tentang te_cmd.
set te_cmd = /persistPictResults
File hasil yang di-cache disimpan dalam folder yang disebut "TAEF-PICT" di direktori %temp%, jika Te.exe memiliki akses ke folder tersebut, atau di direktori eksekusi saat ini dari tempat Te.exe diluncurkan. Satu-satunya waktu Anda mungkin memiliki hasil dalam status tidak konsisten adalah jika Anda menekan Ctrl + C selama eksekusi. Dalam kasus seperti itu, TAEF akan mencoba menghapus hasil yang di-cache, tetapi jika tidak dapat melakukannya, Anda akan melihat kesalahan terhadap efeknya. Kesalahan akan meminta Anda untuk menghapus lokasi hasil yang di-cache. Gagal melakukan dapat mengakibatkan perilaku yang tidak terdefinisi atau salah dalam pengujian berikutnya.
Dengan dukungan PICT bawaan di TAEF, Anda sekarang dapat memaksimalkan keduanya, fitur di PICT serta fitur di TAEF dalam otomatisasi pengujian Anda.
DataSource sebagai Sumber Daya
Anda dapat menambahkan model PICT dan menyemai file sebagai sumber daya dalam modul pengujian Anda.
Dalam kode asli, ini dilakukan dengan menentukan nama sumber daya alih-alih nama file dalam metadata DataSource. Ini contohnya:
BEGIN_TEST_METHOD(ResourceNameDataSource)
TEST_METHOD_PROPERTY(L"DataSource", L"Pict:MyModelResourceName?SeedingFile=MySeedingResourceName")
END_TEST_METHOD()
"MyModelResourceName" dan "MySeedingResourceName" adalah nama sumber daya yang ditentukan dalam file .rc. Jenis sumber daya harus DATAFILE, tidak seperti dalam sumber data tabel di mana jenis sumber daya perlu DATASOURCE_XML.
MyModelResourceName DATAFILE "model.txt"
MySeedingResourceName DATAFILE "seed.txt"
Nilai metadata DataSource akan tetap sama seperti saat model adalah file. Demikian juga dalam kode asli, Anda dapat membuat nama sumber daya sama dengan nama file. TAEF pertama-tama akan mencari keberadaan file aktual dengan nama DataSource. Jika file tidak ditemukan, file dilanjutkan dengan melihat sumber daya modul pengujian. Karena mengubah DataSource yang disimpan dalam sumber daya memerlukan kompilasi ulang, Anda dapat memanfaatkan desain ini dengan menyalin file DataSource ke lokasi yang sama dengan dll pengujian saat mengembangkan (dan menamai nama sumber daya agar sama dengan nama file). Setelah Anda selesai menguji, pindahkan (bukan salin) file kembali ke direktori kode dan kompilasi ulang untuk menyematkan sumber daya.