Bagikan melalui


WexLogger

WexLogger menyediakan API yang konsisten untuk pengelogan yang mencakup kode asli, kode terkelola, dan skrip. Ini juga menskalakan dari menjalankan Pengujian Unit dalam perintah hingga pengujian stres jarak jauh.

Pengelogan Melalui Kerangka Kerja Verifikasi

Sebagian besar pengelogan dalam kasus pengujian harus dilakukan melalui kerangka kerja Verifikasi . Ini akan memastikan bahwa tes ditulis dengan cara yang lebih jelas, lebih berurutan dan dapat dibaca manusia. Namun, dalam beberapa kasus, penulis pengujian akan menemukan bahwa mereka membutuhkan kontrol yang lebih terperinci seputar apa yang ditulis ke log: oleh karena itu kebutuhan akan API WexLogger.

Pengelogan Dalam TAEF

Untuk kasus pengujian yang berjalan dalam TAEF, tidak ada inisialisasi pencatat yang diperlukan oleh penulis pengujian. Anda dapat segera mulai menggunakan API Log yang diekspos ke bahasa tempat Anda menulis pengujian.

Dalam kode C++ asli, kode akan terlihat seperti ini:

using namespace WEX::Logging;
using namespace WEX::Common;
Log::Comment(L"Rendering to the BufferView");
Log::Comment(L"Render succeeded");

Log::Comment(String().Format(L"Look, a number! %d", aNumber));

#define LOG_OUTPUT(fmt, ...) Log::Comment(String().Format(fmt, __VA_ARGS__))
LOG_OUTPUT(L"Look, a number! %d", aNumber);

Dalam kode terkelola, kode akan terlihat seperti ini:

using WEX.Logging.Interop;
Log.Comment("Rendering to the BufferView");
Log.Comment("Render succeeded");

Dalam JScript, akan terlihat seperti ini:

var log = new ActiveXObject("WEX.Logger.Log");
log.Comment("Rendering to the BufferView");
log.Comment("Render succeeded");

Pengelogan di Luar TAEF

Sebagian besar waktu, inisialisasi pengelogan dan penyelesaian akan dilakukan oleh TAEF, sehingga WexLogger akan siap digunakan selama durasi kasus pengujian seperti yang dinyatakan di atas, dan akan selesai dengan benar. Namun, jika klien ingin menggunakan WexLogger di luar TAEF, mereka akan bertanggung jawab untuk memanggil LogController::InitializeLogging() dan LogController::FinalizeLogging() secara manual. Persyaratan ini hanya ada untuk kode asli dan terkelola; skrip tidak memiliki persyaratan tambahan ini. Lihat tabel Metode Static LogController di bawah ini untuk informasi selengkapnya tentang API LogController.

Lihat bagian Membuat Log WTT untuk informasi tentang cara menghasilkan Log WTT di luar TAEF.

WexLogger API

Berikut adalah daftar metode Log C++ asli yang tersedia.

Ada versi yang setara yang tersedia untuk kode dan skrip terkelola.

Metode Log C++ Asli Fungsionalitas
Assert(const wchar_t* pszAssert) Catat pernyataan pengujian.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext) Catat pernyataan pengujian, dengan konteks.
Assert(const wchar_t* pszAssert, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat pernyataan pengujian dengan informasi file, fungsi, dan baris.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat pernyataan pengujian, dengan konteks, dan juga file, fungsi, dan informasi baris.
Bug(const wchar_t* pszBugDatabase, int bugId) Catat nomor bug yang diketahui.
Bug(const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) Catat nomor bug yang diketahui, dengan konteks.
Comment(const wchar_t* pszComment) Catat komentar pengujian.
Comment(const wchar_t* pszComment, const wchar_t* pszContext) Catat komentar pengujian, dengan konteks
EndGroup(const wchar_t* pszGroupName) Catat akhir grup pengujian, atau pengujian tertentu.
EndGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Catat akhir grup pengujian, atau pengujian tertentu, dengan konteks.
Error(const wchar_t* pszError) Mencatat kesalahan pengujian.
Error(const wchar_t* pszError, const wchar_t* pszContext) Catat kesalahan pengujian, dengan konteks.
Error(const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat kesalahan pengujian dengan informasi file, fungsi, dan baris.
Error(const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat kesalahan pengujian, dengan konteks, dan juga informasi file, fungsi, dan baris.
File(const wchar_t* pszFileName) Catat file pengujian yang akan disimpan. File disimpan ke <WTTRunWorkingDir>\WexLogFileOutput (jika WTTRunWorkingDir diatur), atau <CurrentDirectory\>WexLogFileOutput.
File(const wchar_t* pszFileName, const wchar_t* pszContext) Catat file pengujian yang akan disimpan, dengan konteks. File disimpan ke <WTTRunWorkingDir>\WexLogFileOutput (jika WTTRunWorkingDir diatur), atau <CurrentDirectory\>WexLogFileOutput.
Property(const wchar_t* pszName, const wchar_t* pszValue) Catat pasangan properti nama/nilai. Nilai dapat dalam format xml.
Property(const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) Catat pasangan properti nama/nilai, dengan konteks. Nilai dapat dalam format xml.
Result(TestResults::Result testResult) Catat hasil pengujian.
Result(TestResults::Result testResult, const wchar_t* pszComment) Catat hasil pengujian dengan komentar terkait.
Result(TestResults::Result testResult, const wchar_t* pszComment, const wchar_t* pszContext) Catat hasil pengujian dengan komentar terkait, dengan konteks.
StartGroup(const wchar_t* pszGroupName) Catat awal sekelompok pengujian, atau pengujian tertentu.
StartGroup(const wchar_t* pszGroupName, TestResults::Result defaultTestResult) Catat awal sekelompok pengujian, atau tes tertentu; juga mengatur hasil pengujian default.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Catat awal sekelompok pengujian, atau pengujian tertentu, dengan konteks.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext, TestResults::Result defaultTestResult) Catat awal sekelompok pengujian, atau tes tertentu; juga mengatur hasil pengujian default.
Peringatan(const wchar_t* pszWarning) Catat peringatan pengujian.
Peringatan(const wchar_t* pszWarning, const wchar_t* pszContext) Catat peringatan pengujian, dengan konteks.
Peringatan(const wchar_t* pszWarning, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat peringatan pengujian dengan informasi file, fungsi, dan baris.
Peringatan(const wchar_t* pszWarning, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Catat peringatan pengujian, dengan konteks, dan juga file, fungsi, dan informasi baris.
Xml(const wchar_t* pszXml) Data xml log. Tidak ada pemeriksaan yang dilakukan untuk memverifikasi bahwa itu terbentuk dengan baik.
Xml(const wchar_t* pszXml, const wchar_t* pszContext) Catat data xml, dengan konteks. Tidak ada pemeriksaan yang dilakukan untuk memverifikasi bahwa itu terbentuk dengan baik.
MiniDump() Catat cadangan mini proses saat ini.

Catatan: "Konteks" adalah string tambahan yang dapat Anda berikan secara opsional dengan panggilan API WexLogger untuk memberikan konteks atau detail lebih lanjut. Misalnya, Anda dapat memilih untuk selalu meneruskan "ImageComparator" sebagai konteks Anda saat melakukan panggilan API WexLogger dari metode kelas ImageComparator Anda.

Berikut adalah kemungkinan nilai yang valid untuk C++ TestResults asli::Enumerasi hasil . Ada versi yang setara yang tersedia untuk kode dan skrip terkelola.

C++ TestResults asli::Enumerasi hasil Fungsionalitas
Lulus Tes lulus
NotRun Pengujian tidak dijalankan
Dilewati Tes dilewati
Diblokir Tes diblokir
Gagal Pengujian gagal

Berikut adalah daftar metode LogController C++ asli yang tersedia:

Metode LogController C++ Asli Fungsionalitas
HRESULT Statis InitializeLogging() Menginisialisasi fungsionalitas pengelogan.
HRESULT InitializeLogging statis(WexLoggerErrorCallback pfnErrorCallback) Inisialisasi fungsionalitas pengelogan, dan tentukan fungsi WexLoggerErrorCallback yang ingin Anda gunakan untuk diberi tahu tentang kesalahan pencatat internal.
HRESULT InitializeLogging statis(const wchar_t* pszLogName) Inisialisasi fungsionalitas pengelogan, dan tentukan nama file log yang ingin Anda gunakan. Catatan: Nama log hanya dipertimbangkan jika WttLogging diaktifkan.
InitializeLogging HRESULT statis(const wchar_t* pszLogName, WexLoggerErrorCallback pfnErrorCallback) Inisialisasi fungsionalitas pengelogan, tentukan nama file log yang ingin Anda gunakan, dan tentukan fungsi WexLoggerErrorCallback yang ingin Anda gunakan untuk diberi tahu tentang kesalahan pencatat internal. Catatan: Nama log hanya dipertimbangkan jika WttLogging diaktifkan.
bool statis IsInitialized() Mengembalikan apakah LogController telah diinisialisasi atau tidak untuk proses ini.
const statis unsigned short* GetLogName() Mengembalikan nama yang ditentukan untuk log dalam panggilan InitializeLogging (jika ada).
FinalizeLogging() HRESULT statis Selesaikan fungsionalitas pengelogan.

Catatan: Lihat bagian Penanganan Kesalahan C++ di bawah ini untuk informasi selengkapnya tentang mekanisme WexLoggerErrorCallback dan cara menggunakannya di luar kerangka kerja TAEF.

Catatan: Anda hanya perlu memanggil InitializeLogging/FinalizeLogging saat menggunakan WexLogger di luar kerangka kerja TAEF, karena TAEF sudah menangani inisialisasi/penyelesaian pengelogan.

Catatan: Tidak perlu menginisialisasi/menyelesaikan fungsionalitas pengelogan saat menggunakan WexLogger dari skrip.

Berikut adalah daftar metode C++ RemoteLogContoller asli yang tersedia:

Metode RemoteLogController C++ Asli Fungsionalitas
HRESULT GenerateConnectionData statis(WEX::Common::NoThrowString& connectionData) Menghasilkan data koneksi yang harus digunakan dalam proses induk dan anak untuk memungkinkan proses anak masuk kembali ke proses induk.
Statis HRESULT GenerateConnectionData(const wchar_t* pszMachineName, WEX::Common::NoThrowString& connectionData) Digunakan saat meluncurkan proses anak pada komputer jarak jauh. Menghasilkan data koneksi yang harus digunakan dalam proses induk dan anak untuk memungkinkan proses anak masuk kembali ke proses induk.
HRESULT Statis InitializeLogging(WEX::Common::NoThrowString connectionData) Menginisialisasi fungsionalitas pengelogan dalam proses induk sehingga proses anak dapat masuk kembali ke sana.

Catatan: Lihat bagian Pengelogan Jarak Jauh Dari Proses Anak di bawah ini untuk informasi selengkapnya tentang pengelogan jarak jauh.

Berikut adalah daftar metode Log terkelola yang tersedia.

Metode Log Terkelola Fungsionalitas
Assert(Penyedia IFormatProvider, format string, objek param[] args) Catat pernyataan pengujian menggunakan penyedia informasi pemformatan khusus budaya, string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Assert(Penyedia IFormatProvider, format string, objek param[] args) Catat pernyataan pengujian menggunakan penyedia informasi pemformatan khusus budaya, string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Assert(string message) Catat pernyataan pengujian.
Assert(format string, object arg0) Catat pernyataan pengujian menggunakan string format dan objek untuk diformat.
Assert(format string, objek params[] args) Catat pernyataan pengujian menggunakan string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Assert(string message, string context) Catat pernyataan pengujian, dengan konteks.
Assert(string message, string file, string function, int line) Catat pernyataan pengujian, dan juga file, fungsi, dan informasi baris.
Assert(string message, string context, string file, string function, int line) Catat pernyataan pengujian, dengan konteks, dan juga file, fungsi, dan informasi baris.
Bug(string bugDatabase, int bugId) Catat nomor bug yang diketahui.
Bug(string bugDatabase, int bugId, konteks string) Catat nomor bug yang diketahui, dengan konteks.
Comment(Penyedia IFormatProvider, format string, objek param[] args) Catat komentar pengujian menggunakan penyedia informasi pemformatan khusus budaya, string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Komentar(pesan string) Mencatat komentar pengujian
Komentar(format string, objek arg0) Catat komentar pengujian menggunakan string format dan objek untuk diformat.
Comment(string format, params object[] args) Catat komentar pengujian menggunakan string format dan array objek yang berisi nol atau beberapa objek untuk diformat.
Komentar(pesan string, konteks string) Catat komentar pengujian, dengan konteks
EndGroup(string groupName) Catat akhir grup pengujian, atau pengujian tertentu.
EndGroup(string groupName, konteks string) Catat akhir grup pengujian, atau pengujian tertentu, dengan konteks.
Error(Penyedia IFormatProvider, format string, objek param[] args) Catat kesalahan pengujian menggunakan penyedia informasi pemformatan khusus budaya, string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Kesalahan(pesan string) Mencatat kesalahan pengujian.
Kesalahan(format string, objek arg0) Catat kesalahan pengujian menggunakan string format dan objek untuk diformat.
Kesalahan(pesan string, konteks string) Catat kesalahan pengujian, dengan konteks.
Error(Penyedia IFormatProvider, format string, objek param[] args) Catat kesalahan pengujian menggunakan string format dan array objek yang berisi nol atau beberapa objek untuk diformat.
Kesalahan(pesan string, file string, fungsi string, baris int) Catat kesalahan pengujian dengan informasi file, fungsi, dan baris.
Kesalahan(pesan string, konteks string, file string, fungsi string, baris int) Catat kesalahan pengujian, dengan konteks, dan juga informasi file, fungsi, dan baris.
File(string fileName) Catat file pengujian yang akan disimpan. File disimpan ke WTTRunWorkingDir\WexLogFileOutput (jika WTTRunWorkingDir diatur), atau CurrentDirectory\WexLogFileOutput.
File(string fileName, konteks string) Catat file pengujian yang akan disimpan, dengan konteks. File disimpan ke WTTRunWorkingDir\WexLogFileOutput (jika WTTRunWorkingDir diatur), atau CurrentDirectory\WexLogFileOutput.
MiniDump() Catat cadangan mini proses saat ini.
Properti(nama string, nilai string) Catat pasangan properti nama/nilai. Nilai dapat dalam format xml.
Properti(nama string, nilai string, konteks string) Catat pasangan properti nama/nilai, dengan konteks. Nilai dapat dalam format xml.
Result(TestResult testResult) Catat hasil pengujian.
Result(TestResult testResult, komentar string) Catat hasil pengujian dengan komentar terkait.
Result(TestResult testResult, komentar string, konteks string) Catat hasil pengujian dengan komentar terkait, dengan konteks.
StartGroup(groupName string) Catat awal sekelompok pengujian, atau pengujian tertentu.
StartGroup(groupName string, konteks string) Catat awal sekelompok pengujian, atau pengujian tertentu, dengan konteks.
Peringatan(penyedia IFormatProvider, format string, objek param[] args) Catat peringatan pengujian menggunakan penyedia informasi pemformatan khusus budaya, string format, dan array objek yang berisi nol atau beberapa objek untuk diformat.
Peringatan(pesan string) Catat peringatan pengujian.
Peringatan(format string, objek arg0) Catat peringatan pengujian menggunakan string format dan objek untuk diformat.
Peringatan(format string, objek params[] args) Catat peringatan pengujian menggunakan string format dan array objek yang berisi nol atau beberapa objek untuk diformat.
Peringatan(pesan string, konteks string) Catat peringatan pengujian, dengan konteks.
Peringatan(pesan string, file string, fungsi string, baris int) Catat peringatan pengujian dengan file, fungsi, dan informasi baris.
Peringatan(pesan string, konteks string, file string, fungsi string, baris int) Catat peringatan pengujian, dengan konteks, dan juga file, fungsi, dan informasi baris.
Xml(string xmlData) Data xml log. Tidak ada pemeriksaan yang dilakukan untuk memverifikasi bahwa itu terbentuk dengan baik.
Xml(string xmlData, konteks string) Data xml log, dengan konteks. Tidak ada pemeriksaan yang dilakukan untuk memverifikasi bahwa itu terbentuk dengan baik.

Berikut adalah daftar metode LogContoller terkelola yang tersedia:

Metode LogController Terkelola Fungsionalitas
void statis InitializeLogging() Menginisialisasi fungsionalitas pengelogan.
void statis InitializeLogging(String logName) Inisialisasi fungsionalitas pengelogan, dan tentukan nama file log yang ingin Anda gunakan. Catatan: Nama log hanya dipertimbangkan jika WttLogging diaktifkan.
bool statis IsInitialized() Mengembalikan apakah LogController telah diinisialisasi atau tidak untuk proses ini.
String statis GetLogName() Mengembalikan nama yang ditentukan untuk log dalam panggilan InitializeLogging (jika ada).
statis void FinalizeLogging() Selesaikan fungsionalitas pengelogan.

Catatan: Lihat bagian Kesalahan dan Pengecualian Kode Terkelola di bawah ini untuk informasi selengkapnya tentang cara menangani kesalahan dan pengecualian saat menggunakan lapisan terkelola WexLogger di luar kerangka kerja TAEF.

Catatan: Anda hanya perlu memanggil InitializeLogging/FinalizeLogging saat menggunakan WexLogger di luar kerangka kerja TAEF, karena TAEF sudah menangani inisialisasi/penyelesaian pengelogan.

Catatan: Tidak perlu menginisialisasi/menyelesaikan fungsionalitas pengelogan saat menggunakan WexLogger dari skrip.

Berikut adalah daftar metode RemoteLogContoller terkelola yang tersedia:

Metode RemoteLogController Terkelola Fungsionalitas
String statis GenerateConnectionData() Menghasilkan data koneksi yang harus digunakan dalam proses induk dan anak untuk memungkinkan proses anak masuk kembali ke proses induk.
String statis GenerateConnectionData(string machineName) Digunakan saat meluncurkan proses anak pada komputer jarak jauh. Menghasilkan data koneksi yang harus digunakan dalam proses induk dan anak untuk memungkinkan proses anak masuk kembali ke proses induk.
void statis InitializeLogging(String connectionData) Menginisialisasi fungsionalitas pengelogan dalam proses induk sehingga proses anak dapat masuk kembali ke dalamnya.

Catatan: Lihat bagian Pengelogan Jarak Jauh Dari Proses Anak di bawah ini untuk informasi selengkapnya tentang pengelogan jarak jauh.

Pengelogan Jarak Jauh Dari Proses Anak

WexLogger menyediakan kemampuan untuk satu atau beberapa proses anak untuk masuk kembali ke satu proses induk, menghasilkan pembuatan hasil pengujian terkonsolidasi dalam satu file log.

Proses anak dapat berjalan pada komputer yang sama dengan proses induk, atau dari jarak jauh pada komputer yang berbeda. Agar pengelogan komputer jarak jauh berfungsi, terserah klien WexLogger untuk menambahkan pengecualian firewall TCP untuk semua proses anak pada komputer jarak jauh. Namun, jika proses anak berjalan pada komputer yang sama dengan induknya, tidak ada modifikasi firewall yang diperlukan.

Langkah-langkah berikut diperlukan untuk menyiapkan setiap koneksi pengelogan jarak jauh:

Proses Induk

  1. Panggil RemoteLogController::GenerateConnectionData() untuk menghasilkan data koneksi yang harus digunakan oleh kedua proses untuk memulai koneksi pengelogan.

    Catatan: Pastikan untuk memeriksa nilai pengembalian panggilan ini.

        NoThrowString connectionData;
        Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
    
    
  2. Komunikasikan data koneksi dengan proses anak baik dengan mengaturnya di blok lingkungannya, atau dengan meneruskannya sebagai argumen pada prompt perintah. Contohnya:

    Teruskan sebagai argumen bernama pada prompt perintah yang dipahami WexLogger:
    /wexlogger_connectiondata=[data koneksi]

    Catatan: Jika opsi ini digunakan, maka langkah 1 di bagian Proses Anak di bawah ini tidak diperlukan.

    Lulus sebagai variabel lingkungan bernama yang dipahami WexLogger:
    [YourAppName_cmd]=/wexlogger_connectiondata=[data koneksi]

    Catatan: Jika opsi ini digunakan, maka langkah 1 di bagian Proses Anak di bawah ini tidak diperlukan.

    Teruskan ke proses dalam format arbitrer (beberapa parameter perintah lainnya, variabel lingkungan, dll.)
    Catatan: Jika opsi ini digunakan, maka langkah 1 di bagian Proses Anak di bawah ini diperlukan.

    Catatan: Sebagai kenyamanan, nilai "/wexlogger_connectiondata=" didefinisikan sebagai konstanta di RemoteLogControllers asli dan terkelola:

    • WEX::Logging::c_szWexLoggerRemoteConnectionData, di LogController.h

    • RemoteLogController.WexLoggerRemoteConnectionData, dalam Wex.Logger.Interop.dll

  3. Luncurkan proses anak dengan data koneksi

  4. Panggil RemoteLogController::InitalizeLogging([data koneksi yang dibuat di langkah 1]). Panggilan ini harus dilakukan setelah proses anak diluncurkan, karena akan kehabisan waktu jika anak tidak memanggil LogController::InitializeLogging() secara tepat waktu.

    Catatan: Pastikan untuk memeriksa nilai pengembalian panggilan ini.

    // ...launch child process with connection data...
    Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
    
  5. Tunggu proses anak, dll.

Proses Anak

  1. Jika data koneksi tidak diteruskan ke proses anak sebagai argumen bernama pada prompt perintah yang dipahami WexLogger (lihat langkah 2 di atas), maka Anda harus mengatur variabel lingkungan dengan demikian:

    [YourAppName_cmd]=/wexlogger_connectiondata=[data koneksi]

    Contohnya:

    // App name is mytestapp.exe
    ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
    
  2. Panggil LogController::InitializeLogging() untuk menginisialisasi pengelogan untuk proses ini. Secara internal, ini akan memanfaatkan variabel lingkungan yang ditetapkan pada langkah 1 di atas (atau di langkah 2 dari bagian Proses Induk ) untuk memulai koneksi pengelogan kembali ke proses induk.

  3. Log, dll; semua jejak akan dikirim kembali ke proses induk.

  4. Panggil LogController::FinalizeLogging() untuk menyelesaikan pengelogan untuk proses ini.

Menentukan Hasil Pengujian

Meskipun ada metode yang disediakan untuk secara eksplisit menyatakan hasil yang dimaksudkan dari kasus pengujian (Log::Result()), tidak perlu kasus pengujian untuk menggunakan metode ini dalam banyak kasus.

Misalnya, jika kasus pengujian tidak secara eksplisit memanggil Log::Result(), dan tidak mencatat kesalahan (melalui Log::Error()), secara default dianggap sebagai kasus pengujian yang lulus; jika mencatat kesalahan, itu adalah kasus pengujian yang gagal.

Namun, jika kasus pengujian secara eksplisit memanggil Log::Result(TestResults::TestPassed), tetapi juga mencatat kesalahan dalam kasus pengujian, pengujian masih akan dihitung sebagai kegagalan sejak kesalahan terjadi dalam pengujian.

Di dalam kerangka kerja TAEF, perilaku ini dapat ditimpa dengan menandai pengujian Anda dengan hasil pengujian default yang berbeda. Informasi lebih lanjut tentang ini dapat ditemukan di dokumen "Penulisan Tes TAEF".

Perilaku ini juga dapat ditimpa dengan secara eksplisit memanggil Log::StartGroup() untuk grup pengujian/kasus pengujian Anda sendiri, dengan hasil pengujian default pilihan Anda.

Membuat Log WTT

Ada tiga metode untuk menghasilkan log WTT melalui WexLogger. Semuanya mengharuskan WttLog.dll ada di direktori eksekusi, atau di jalur Anda.

  • Jika Anda menjalankan di lab, dengan klien wtt terinstal, log wtt akan secara otomatis dihasilkan untuk Anda. Hal ini disebabkan oleh fakta bahwa WexLogger mencari keberadaan dua variabel lingkungan yang seharusnya hanya ada di lingkungan lab: 'WttTaskGuid' dan 'WTTRunWorkingDir'. Jika kedua hal ini ada, maka pengelogan wtt diaktifkan secara otomatis.

  • Jika berjalan dalam TAEF di luar lingkungan lab, berikan /enablewttlogging pada prompt perintah ke kasus pengujian Anda. Contoh:

    te my.test.dll /enablewttlogging
    
  • Jika Anda menggunakan WexLogger di luar kerangka kerja TAEF, dan Anda tidak berjalan di lingkungan lab, Anda harus mengatur <variabel lingkungan YOUR_PROCESS_NAME>_CMD agar berisi opsi ini sebelum memanggil LogController::InitializeLogging(). Contoh:

    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging");
    LogController.InitializeLogging();
    
  • Jika Anda ingin menambahkan ke file log wtt yang ada daripada menimpanya, tentukan juga opsi /appendwttlogging selain /enablewttlogging.

    te my.test.dll /enablewttlogging /appendwttlogging
    
    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging /appendwttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging /appendwttlogging");
    LogController.InitializeLogging();
    

Dimungkinkan juga untuk sepenuhnya mengambil alih atau menambahkan ke string perangkat WttLogger default dengan menentukan salah satu opsi perintah berikut:

/WttDeviceString:<string perangkat baru>
Sepenuhnya mengambil alih WttDeviceString yang digunakan oleh WexLogger ketika menginisialisasi WttLogger.

/WttDeviceStringSuffix:<value untuk ditambahkan ke string perangkat>
Menambahkan nilai yang ditentukan ke WttDeviceString default yang digunakan oleh WexLogger saat menginisialisasi WttLogger. Diabaikan jika '/WttDeviceString' juga ditentukan.

Tabel berikut mencantumkan bagaimana WexLogger TestResults memetakan ke hasil WttLogger:

WexLogger WttLogger
Lulus WTT_TESTCASE_RESULT_PASS
NotRun WTT_TESTCASE_RESULT_BLOCKED
Dilewati WTT_TESTCASE_RESULT_SKIPPED
Diblokir WTT_TESTCASE_RESULT_BLOCKED
Gagal WTT_TESTCASE_RESULT_FAIL

Dependensi Pencatat

Pencatat C++ asli (Wex.Logger.dll) bergantung pada Wex.Common.dll dan Wex.Communication.dll.

Pencatat terkelola (Wex.Logger.Interop.dll) bergantung pada Wex.Logger.dll, Wex.Common.dll dan Wex.Communication.dll.

Selain itu, WttLog.dll diperlukan saat Pengelogan Wtt diaktifkan.

Data Kesalahan Tambahan

Jika kesalahan dicatat, Anda dapat mengaktifkan WexLogger untuk menyertakan satu atau beberapa item berikut selain kesalahan itu sendiri:

  • MiniDump
  • Tangkapan Layar
  • StackTrace
te my.test.dll /minidumponerror
te my.test.dll /screencaptureonerror /stacktraceonerror

Dengan satu atau beberapa opsi ini diaktifkan, Anda akan menerima output tambahan setiap kali Log::Error() dipanggil.

Catatan: Jika Anda menggunakan WexLogger di luar kerangka kerja TAEF, Anda harus mengatur <variabel lingkungan YOUR_PROCESS_NAME>_CMD untuk berisi opsi ini sebelum memanggil LogController::InitializeLogging(). Contoh:

Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();
Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();

Penanganan Kesalahan C++

Untuk melindungi penulis kasus pengujian dari beban memeriksa nilai pengembalian untuk setiap panggilan API Log, WexLogger melaporkan kondisi kesalahan yang tidak terduga melalui penggunaan mekanisme panggilan balik opsional; fungsi WexLoggerErrorCallback . Setelah initializaiton dari WexLogger (melalui LogController::InitializeLogging()), klien dapat memilih untuk menentukan fungsi WexLoggerErrorCallback untuk memanggil jika kondisi kesalahan yang tidak terduga terjadi dalam WexLogger. Fungsi WexLoggerErrorCallback harus menggunakan tanda tangan berikut:

void __stdcall MyLoggerErrorCallback(const unsigned short* pszMessage, HRESULT hr);

Penggunaan umum untuk fungsi WexLoggerErrorCallback adalah menuliskan pesan kesalahan ke konsol (jika harness pengujian Anda adalah aplikasi konsol). Misalnya, kerangka kerja TAEF adalah klien WexLogger, dan mengimplementasikan WexLoggerErrorCallback yang menulis teks merah ke konsol ketika kesalahan WexLogger terjadi.

Kompatibilitas .NET 4.0

Wex.Logger.Interop dikompilasi sebagai biner NetFx 2/3/3.5, sehingga dapat dimuat ke dalam proses NetFx 2/3/3.5 dan NetFx 4. Ini memungkinkan TAEF untuk menjalankan semua rakitan terkelola di atas NetFx 2. Jika Anda menggunakan Wex.Logger di luar TAEF, maka Anda perlu menambahkan file konfigurasi untuk exe Anda untuk mengonfigurasi runtime NetFx 4 untuk memuat biner NetFx 2/3/3.5 ke dalam prosesnya. File konfigurasi harus berisi yang berikut ini:

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>

Penanganan Kesalahan dan Pengecualian Kode Terkelola

Untuk melindungi penulis kasus pengujian dari beban memeriksa nilai pengembalian untuk setiap panggilan API Log , lapisan terkelola WexLogger melaporkan kondisi kesalahan yang tidak terduga melalui penggunaan peristiwa LoggerController.WexLoggerError . Anda dapat berlangganan acara ini kapan saja dengan menerapkan WexLoggerErrorEventHandler Anda sendiri dan menggunakan sintaks yang familier berikut untuk langganan peristiwa C#:

LogController.WexLoggerError += new WexLoggerEventHandler(My_WexLoggerErrorHandler);

Berikut adalah contoh tampilan penanganan aktivitas Anda:

static void LogController_WexLoggerError(object sender, WexLoggerErrorEventArgs e)
{
    ConsoleColor originalColor = Console.ForegroundColor;
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("LogController_WexLoggerError: " + e.Message);
    Console.ForegroundColor = originalColor;
}

Selain itu, metode LogController::InitializeLogging() dan LogController::FinalizeLogging() sendiri melempar WexLoggerException jika terjadi kegagalan. Ini memberikan informasi terperinci tentang kesalahan, dan juga memungkinkan Anda untuk membatalkan uji coba sebelum dimulai. Penulis kasus pengujian tidak perlu khawatir tentang menangkap pengecualian ini - mereka harus diharapkan/ditangani selama WexLogger initializaiton/completion saja.