WexLogger
WexLogger 提供一致的 API 來記錄,其跨越機器碼、Managed 程式代碼和腳本。 它也會從命令提示字元中執行單元測試調整為長時間壓力測試。
透過驗證架構進行記錄
測試案例內的大部分記錄都應該透過 驗證 架構來執行。 這可確保測試會以更清楚、更循序且人類看得懂的方式撰寫。 不過,在某些情況下,測試作者會發現他們需要更細微的控制寫入記錄的內容:因此需要 WexLogger API。
TAEF 內的記錄
對於在 TAEF 內執行的測試案例,測試作者不需要記錄器初始化。 您可以立即開始使用公開至您撰寫測試的語言的記錄 API。
在原生 C++ 程式代碼中,看起來會像這樣:
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);
在 Managed 程式代碼中,它看起來會像這樣:
using WEX.Logging.Interop;
Log.Comment("Rendering to the BufferView");
Log.Comment("Render succeeded");
在 JScript 中,它看起來會像這樣:
var log = new ActiveXObject("WEX.Logger.Log");
log.Comment("Rendering to the BufferView");
log.Comment("Render succeeded");
在 TAEF 外部記錄
大部分的時間,記錄初始化和完成都會由TAEF執行,因此WexLogger會準備好在上述測試案例的期間使用,並且會正常完成。 不過,如果用戶端想要在 TAEF 外部使用 WexLogger,他們將負責手動呼叫 LogController::InitializeLogging () 和 LogController::FinalizeLogging () 。 此需求僅適用於原生和 Managed 程式代碼;腳本沒有此額外需求。 如需 LogController API 的詳細資訊,請參閱下面的靜態 LogController 方法表。
如需如何在 TAEF 外部產生 WTT 記錄的資訊,請參閱 產生 WTT 記錄 一節。
WexLogger API
以下是可用的原生 C++ 記錄方法清單。
Managed 程式代碼和腳本有相等的版本可用。
原生 C++ 記錄方法 | 功能 |
---|---|
assert (const wchar_t* pszAssert) | 記錄測試判斷提示。 |
assert (const wchar_t* pszAssert, const wchar_t* pszContext) | 使用內容記錄測試判斷提示。 |
Assert (const wchar_t* pszAssert, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 使用檔案、函式和行資訊記錄測試判斷提示。 |
Assert (const wchar_t* pszAssert, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 記錄測試判斷提示,其中包含內容,以及檔案、函式和行資訊。 |
Bug (const wchar_t* pszBugDatabase, int bugId) | 記錄已知的 Bug 號碼。 |
Bug (const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) | 使用內容記錄已知的 Bug 號碼。 |
批注 (const wchar_t* pszComment) | 記錄測試批注。 |
批注 (const wchar_t* pszComment, const wchar_t* pszContext) | 使用內容記錄測試批注 |
EndGroup (const wchar_t* pszGroupName) | 記錄測試群組或特定測試的結尾。 |
EndGroup (const wchar_t* pszGroupName, const wchar_t* pszContext) | 使用內容記錄一組測試或特定測試的結尾。 |
錯誤 (const wchar_t* pszError) | 記錄測試錯誤。 |
錯誤 (const wchar_t* pszError, const wchar_t* pszContext) | 使用內容記錄測試錯誤。 |
錯誤 (const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 使用檔案、函式和行資訊記錄測試錯誤。 |
錯誤 (const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 記錄測試錯誤,其中包含內容,以及檔案、函式和行資訊。 |
file (const wchar_t* pszFileName) | 記錄要儲存的測試檔案。 如果 WTTRunWorkingDir> 設定) 或 CurrentDirectory\WexLogFileOutput,則會將檔案儲存至 <WTTRunWorkingDir 或 <CurrentDirectory\>WexLogFileOutput (。 |
file (const wchar_t* pszFileName, const wchar_t* pszContext) | 記錄要儲存的測試檔案與內容。 如果 WTTRunWorkingDir> 設定) 或 CurrentDirectory\WexLogFileOutput,則會將檔案儲存至 <WTTRunWorkingDir 或 <CurrentDirectory\>WexLogFileOutput (。 |
屬性 (const wchar_t* pszName, const wchar_t* pszValue) | 記錄名稱/值屬性組。 此值可以是 xml 格式。 |
property (const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) | 使用內容記錄名稱/值屬性組。 此值可以是 xml 格式。 |
結果 (TestResults::Result testResult) | 記錄測試結果。 |
Result (TestResults::Result testResult, const wchar_t* pszComment) | 使用相關聯的批注記錄測試結果。 |
Result (TestResults::Result testResult, const wchar_t* pszComment, const wchar_t* pszContext) | 使用內容記錄具有相關聯批注的測試結果。 |
StartGroup (const wchar_t* pszGroupName) | 記錄測試群組或特定測試的開始。 |
StartGroup (const wchar_t* pszGroupName, TestResults::Result defaultTestResult) | 記錄測試群組或特定測試的開始;也會設定預設測試結果。 |
StartGroup (const wchar_t* pszGroupName, const wchar_t* pszContext) | 使用內容記錄測試群組或特定測試的開始。 |
StartGroup (const wchar_t* pszGroupName, const wchar_t* pszContext, TestResults::Result defaultTestResult) | 記錄測試群組或特定測試的開始;也會設定預設測試結果。 |
警告 (const wchar_t* pszWarning) | 記錄測試警告。 |
警告 (const wchar_t* pszWarning, const wchar_t* pszContext) | 使用內容記錄測試警告。 |
警告 (const wchar_t* pszWarning, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 使用檔案、函式和行資訊記錄測試警告。 |
warning (const wchar_t* pszWarning, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) | 記錄測試警告,其中包含內容,以及檔案、函式和行資訊。 |
Xml (const wchar_t* pszXml) | 記錄 xml 數據。 不會進行任何檢查,以確認其格式正確。 |
Xml (const wchar_t* pszXml,const wchar_t* pszContext) | 記錄 xml 數據,其中包含內容。 不會進行任何檢查,以確認其格式正確。 |
MiniDump () | 記錄目前的進程迷你傾印。 |
注意: 「內容」是一個額外的字串,您可以選擇性地提供 WexLogger API 呼叫,以提供更多內容或詳細數據。 例如,當您從 ImageComparator 類別方法進行任何 WexLogger API 呼叫時,您可以選擇一律傳入 「ImageComparator」 做為內容。
以下是原生 C++ TestResults::Result 列舉的可能有效值。 Managed 程式代碼和腳本有相等的版本可用。
原生 C++ TestResults::Result 列舉 | 功能 |
---|---|
已通過 | 通過的測試 |
NotRun | 測試未執行 |
已略過 | 已略過測試 |
封鎖 | 測試已遭封鎖 |
Failed | 測試失敗 |
以下是可用的原生 C++ LogController 方法列表:
原生 C++ LogController 方法 | 功能 |
---|---|
static HRESULT InitializeLogging () | 初始化記錄功能。 |
靜態 HRESULT InitializeLogging (WexLoggerErrorCallback pfnErrorCallback) | 初始化記錄功能,並指定您想要用來收到內部記錄器錯誤的通知的 WexLoggerErrorCallback 函式。 |
static HRESULT InitializeLogging (const wchar_t* pszLogName) | 初始化記錄功能,並指定您想要使用的記錄檔名稱。 注意: 只有在 啟用 WttLogging 時,才會考慮記錄檔名稱。 |
static HRESULT InitializeLogging (const wchar_t* pszLogName, WexLoggerErrorCallback pfnErrorCallback) | 初始化記錄功能、指定您要使用的記錄檔名稱,並指定您想要用來收到內部記錄器錯誤的通知的 WexLoggerErrorCallback 函式。 注意: 只有在 啟用 WttLogging 時,才會考慮記錄檔名稱。 |
static bool IsInitialized () | 傳回是否已為此進程初始化 LogController。 |
static const unsigned short* GetLogName () | 傳回在 InitializeLogging 呼叫中指定的名稱,如果有任何) ,則傳回 (。 |
static HRESULT FinalizeLogging () | 完成記錄功能。 |
注意: 如需 WexLoggerErrorCallback 機制的詳細資訊,以及如何在 TAEF 架構外部使用它,請參閱下面的 C++ 錯誤處理一節。
注意: 只有在使用 TAEF 架構外部的 WexLogger 時,才需要呼叫 InitializeLogging/FinalizeLogging,因為 TAEF 已經處理記錄初始化/完成。
注意: 使用腳本中的 WexLogger 時,不需要初始化/完成記錄功能。
以下是可用的原生 C++ RemoteLogContoller 方法列表:
Native C++ RemoteLogController 方法 | 功能 |
---|---|
static HRESULT GenerateConnectionData (WEX::Common::NoThrowString& connectionData) | 產生必須在父進程和子進程內使用的連線數據,以允許子進程記錄回父進程。 |
static HRESULT GenerateConnectionData (const wchar_t* pszMachineName, WEX::Common::NoThrowString& connectionData) | 在遠端電腦上啟動子進程時使用。 產生必須在父進程和子進程內使用的連線數據,以允許子進程記錄回父進程。 |
靜態 HRESULT InitializeLogging (WEX::Common::NoThrowString connectionData) | 初始化父進程內的記錄功能,讓子進程可以回溯。 |
Note: See the Remote Logging From Child Processes section below for more information on remote logging.
以下是可用的受控記錄方法清單。
Managed 記錄方法 | 功能 |
---|---|
Assert (IFormatProvider 提供者、字串格式、params 物件[] args) | 使用特定文化特性的格式資訊提供者、格式字串,以及包含零個或多個要格式化的物件數位來記錄測試判斷提示。 |
Assert (IFormatProvider 提供者、字串格式、params 物件[] args) | 使用特定文化特性的格式資訊提供者、格式字串,以及包含零個或多個要格式化的物件數位來記錄測試判斷提示。 |
判斷提示 (字串訊息) | 記錄測試判斷提示。 |
判斷提示 (字串格式,物件arg0) | 使用格式字串和要格式化的對象來記錄測試判斷提示。 |
assert (字串格式,params 物件[] args) | 使用格式字串記錄測試判斷提示,以及包含要格式化之零個或多個物件的物件陣列。 |
判斷提示 (字串訊息、字串內容) | 使用內容記錄測試判斷提示。 |
判斷提示 (字串訊息、字串檔案、字串函式、int 行) | 記錄測試判斷提示,以及檔案、函式和行資訊。 |
判斷提示 (字串訊息、字串內容、字串檔案、字串函式、int行) | 使用內容以及檔案、函式和行資訊記錄測試判斷提示。 |
錯誤 (字串 bugDatabase,int bugId) | 記錄已知的 Bug 號碼。 |
Bug (字串 bugDatabase、int bugId、字串內容) | 使用內容記錄已知的 Bug 編號。 |
批註 (IFormatProvider 提供者、字串格式、params 物件[] args) | 使用特定文化特性的格式資訊提供者、格式字串,以及包含零個或多個要格式化的物件數位來記錄測試批注。 |
批註 (字串訊息) | 記錄測試批注 |
批註 (字串格式,物件arg0) | 使用格式字串和要格式化的對象來記錄測試批註。 |
批註 (字串格式,params 物件[] args) | 使用格式字串和包含零個或多個要格式化之物件的物件數位來記錄測試批註。 |
批註 (字串訊息、字串內容) | 使用內容記錄測試批注 |
EndGroup (字串 groupName) | 記錄一組測試或特定測試的結尾。 |
EndGroup (字串 groupName,字串內容) | 使用內容記錄一組測試或特定測試的結尾。 |
(IFormatProvider 提供者、字串格式、params 物件[] args) 錯誤 | 使用特定文化特性的格式資訊提供者、格式字串,以及包含零個或多個要格式化的物件數位來記錄測試錯誤。 |
字串訊息) (錯誤 | 記錄測試錯誤。 |
字串格式 (錯誤,物件arg0) | 使用格式字串和要格式化的對象來記錄測試錯誤。 |
字串訊息、字串內容) (錯誤 | 使用內容記錄測試錯誤。 |
(IFormatProvider 提供者、字串格式、params 物件[] args) 錯誤 | 使用格式字串和包含零個或多個要格式化的物件數位來記錄測試錯誤。 |
(字串訊息、字串檔案、字串函式、int 行) 錯誤 | 使用檔案、函式和行資訊記錄測試錯誤。 |
(字串訊息、字串內容、字串檔案、字串函式、int 行) 錯誤 | 記錄測試錯誤,其中包含內容,以及檔案、函式和行資訊。 |
file (string fileName) | 記錄要儲存的測試檔案。 如果 WTTRunWorkingDir 設定) 或 CurrentDirectory\WexLogFileOutput (,則檔案會儲存至 WTTRunWorkingDir 或 CurrentDirectory\WexLogFileOutput。 |
檔案 (字串 fileName,字串內容) | 使用內容記錄要儲存的測試檔案。 如果 WTTRunWorkingDir 設定) 或 CurrentDirectory\WexLogFileOutput (,則檔案會儲存至 WTTRunWorkingDir 或 CurrentDirectory\WexLogFileOutput。 |
MiniDump () | 記錄目前的進程迷你傾印。 |
屬性 (字串名稱、字串值) | 記錄名稱/值屬性組。 此值可以是 xml 格式。 |
屬性 (字串名稱、字串值、字串內容) | 使用內容記錄名稱/值屬性組。 此值可以是 xml 格式。 |
結果 (TestResult testResult) | 記錄測試結果。 |
結果 (TestResult testResult、字串批注) | 使用相關聯的批注記錄測試結果。 |
結果 (TestResult testResult、字串批注、字串內容) | 使用相關批注記錄測試結果,其中包含內容。 |
StartGroup (字串 groupName) | 記錄一組測試或特定測試的開始。 |
StartGroup (string groupName,字串內容) | 使用內容記錄一組測試或特定測試的開始。 |
警告 (IFormatProvider 提供者, 字串格式, params 物件[] args) | 使用特定文化特性的格式資訊提供者、格式字串,以及包含零個或多個要格式化的物件數位來記錄測試警告。 |
警告 (字串訊息) | 記錄測試警告。 |
警告 (字串格式,物件arg0) | 使用格式字串和要格式化的對象來記錄測試警告。 |
警告 (字串格式,params 物件[] args) | 使用格式字串和物件數位記錄測試警告,其中包含要格式化的零個或多個物件。 |
警告 (字串訊息、字串內容) | 使用內容記錄測試警告。 |
警告 (字串訊息、字串檔案、字串函式、int 行) | 使用檔案、函式和行資訊記錄測試警告。 |
警告 (字串訊息、字串內容、字串檔案、字串串函式、int行) | 記錄測試警告,其中包含內容,以及檔案、函式和行資訊。 |
Xml (字串 xmlData) | 記錄 xml 數據。 不會進行任何檢查,以確認其格式正確。 |
Xml (字串 xmlData、字串內容) | 記錄 xml 數據,其中包含內容。 不會進行任何檢查,以確認其格式正確。 |
以下是可用的 Managed LogContoller 方法列表:
Managed LogController 方法 | 功能 |
---|---|
static void InitializeLogging () | 初始化記錄功能。 |
static void InitializeLogging (String logName) | 初始化記錄功能,並指定您想要使用的記錄檔名稱。 注意: 只有在 啟用 WttLogging 時,才會考慮記錄檔名稱。 |
static bool IsInitialized () | 傳回是否已為此進程初始化 LogController。 |
static String GetLogName () | 傳回在 InitializeLogging 呼叫中指定的名稱,如果有任何) ,則傳回 (。 |
static void FinalizeLogging () | 完成記錄功能。 |
注意: 如需如何在 TAEF 架構外部使用 WexLogger 的 Managed 層時處理錯誤和例外狀況的詳細資訊,請參閱下面的 Managed Code Error and Exception 一節。
注意: 只有在使用 TAEF 架構外部的 WexLogger 時,才需要呼叫 InitializeLogging/FinalizeLogging,因為 TAEF 已經處理記錄初始化/完成。
注意: 使用腳本中的 WexLogger 時,不需要初始化/完成記錄功能。
以下是可用的 Managed RemoteLogContoller 方法清單:
Managed RemoteLogController 方法 | 功能 |
---|---|
static String GenerateConnectionData () | 產生必須在父進程和子進程內使用的連線數據,以允許子進程記錄回父進程。 |
static String GenerateConnectionData (string machineName) | 在遠端電腦上啟動子進程時使用。 產生必須在父進程和子進程內使用的連線數據,以允許子進程記錄回父進程。 |
static void InitializeLogging (String connectionData) | 初始化父進程內的記錄功能,讓子進程可以回溯。 |
Note: See the Remote Logging From Child Processes section below for more information on remote logging.
從子進程遠程記錄
WexLogger 可讓您讓一或多個子進程回到單一父進程,進而產生單一記錄檔內的合併測試結果。
子進程可以在與父進程相同的計算機上執行,或從遠端在不同的電腦上執行。 若要讓遠端電腦記錄能夠運作,則由 WexLogger 用戶端新增遠端電腦上所有子進程的 TCP 防火牆排除專案。 不過,如果子進程是在與父代相同的計算機上執行,則不需要修改防火牆。
您必須執行下列步驟,才能設定每個遠端記錄連線:
父進程
呼叫 RemoteLogController::GenerateConnectionData () 來產生兩個進程必須用來起始記錄連線的連接數據。
注意: 請務必檢查這個呼叫的傳回值。
NoThrowString connectionData; Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
藉由在環境區塊中設定連接數據,或在命令提示字元中將它當做自變數傳遞,與子進程進行通訊。 例如:
在 WexLogger 瞭解的命令提示字元中傳遞為具名自變數:
/wexlogger_connectiondata=[連線數據]注意:如果使用此選項,則不需要下列子進程一節中的步驟 1。
傳遞為 WexLogger 瞭解的具名環境變數:
[YourAppName_cmd]=/wexlogger_connectiondata=[連線數據]注意:如果使用此選項,則不需要下列子進程一節中的步驟 1。
以任意格式傳遞至進程, (其他命令參數、環境變數等 )
注意:如果使用此選項,則需要下列子進程一節中的步驟 1。注意: 為了方便起見,“/wexlogger_connectiondata=” 值定義為原生和 Managed RemoteLogControllers 中的常數:
LOGController.h 中的 WEX::Logging::c_szWexLoggerRemoteConnectionData
RemoteLogController.WexLoggerRemoteConnectionData,在 Wex.Logger.Interop.dll
使用連線數據啟動子進程
呼叫 RemoteLogController::InitalizeLogging ([在步驟 1 中建立的連接數據]) 。 這個呼叫必須在子進程啟動之後進行,因為如果子系未及時呼叫 LogController::InitializeLogging () ,就會逾時。
注意: 請務必檢查這個呼叫的傳回值。
// ...launch child process with connection data... Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
等候子進程等等。
子進程
如果在 WexLogger 瞭解的命令提示字元中,連線數據 未 以具名自變數的形式傳遞至子進程,請參閱上述步驟 2 () ,則您必須設定環境變數,如下所示:
[YourAppName_cmd]=/wexlogger_connectiondata=[連線數據]
例如:
// App name is mytestapp.exe ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
呼叫 LogController::InitializeLogging () 來初始化此程序的記錄。 在內部,這會利用上述步驟 1 中設定的環境變數 (,或在父 進程 一節的步驟 2 中) 起始記錄連線回到父進程。
記錄檔等;所有追蹤都會傳回父進程。
呼叫 LogController::FinalizeLogging () 來完成此程序的記錄。
判斷測試結果
雖然有方法可用來明確陳述測試案例的預期結果, (Log::Result () ) ,但大部分情況下,測試案例 都不需要 使用此方法。
例如,如果測試案例未明確呼叫 Log::Result () ,而且 不會 透過 Log::Error () ) 記錄 (錯誤,則預設會將其視為通過的測試案例;如果 記錄 錯誤,則為失敗的測試案例。
不過,如果測試案例 明確 呼叫 Log::Result (TestResults::TestPassed) , 但也會在 測試案例中記錄錯誤,測試仍會計算為失敗,因為測試內發生錯誤。
在 TAEF 架構內,您可以使用不同的預設測試結果來標記測試,以覆寫此行為。 More information on this can be found in the "Authoring TAEF Tests" document.
您也可以針對您自己的測試群組/測試案例明確呼叫 Log::StartGroup () 來覆寫此行為,並具有您選擇的預設測試結果。
產生 WTT 記錄
有三種方法可透過 WexLogger 產生 WTT 記錄。 所有這些要求 WttLog.dll 都存在於執行目錄中或路徑中。
如果您在實驗室中執行,且已安裝 wtt 用戶端,系統會自動為您產生 wtt 記錄。 這是因為 WexLogger 會尋找兩個應該只存在於實驗室環境中的環境變數:『WttTaskGuid』 和 『WTTRunWorkingDir』。 如果這兩者都存在,則會自動啟用 wtt 記錄。
如果在實驗室環境外部的TAEF內執行,請在命令提示字元中傳遞 /enablewttlogging 至您的測試案例。 範例:
te my.test.dll /enablewttlogging
如果您要在 TAEF 架構外部取用 WexLogger,而且您未在實驗室環境中執行,您必須先設定 <YOUR_PROCESS_NAME>_CMD 環境變數,才能呼叫 LogController::InitializeLogging () 。 範例:
Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging"); LogController.InitializeLogging();
Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging"); LogController.InitializeLogging();
如果您想要附加至現有的 wtt 記錄檔,而不是覆寫它,除了 /enablewttlogging 之外,也請指定 /appendwttlogging 選項。
te my.test.dll /enablewttlogging /appendwttlogging
Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging /appendwttlogging"); LogController.InitializeLogging();
Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging /appendwttlogging"); LogController.InitializeLogging();
您也可以藉由指定下列其中一個指令選項,完全覆寫或附加至預設 WttLogger 裝置字串:
/WttDeviceString:<new device string>
完全覆寫 WexLogger 初始化 WttLogger 時所使用的 WttDeviceString。
/WttDeviceStringSuffix:<value 以附加至裝置字串>
將指定的值附加至初始化 WttLogger 時,WexLogger 所使用的預設 WttDeviceString。 如果同時指定 『/WttDeviceString』,則會忽略。
下表列出 WexLogger TestResults 如何對應至 WttLogger 結果:
WexLogger | WttLogger |
---|---|
已通過 | WTT_TESTCASE_RESULT_PASS |
NotRun | WTT_TESTCASE_RESULT_BLOCKED |
已略過 | WTT_TESTCASE_RESULT_SKIPPED |
封鎖 | WTT_TESTCASE_RESULT_BLOCKED |
Failed | WTT_TESTCASE_RESULT_FAIL |
記錄器相依性
原生 C++ 記錄器 (Wex.Logger.dll) 相依於 Wex.Common.dll 和 Wex.Communication.dll。
Managed 記錄器 (Wex.Logger.Interop.dll) 相依於 Wex.Logger.dll、 Wex.Common.dll 和 Wex.Communication.dll。
此外,啟用 Wtt 記錄時需要 WttLog.dll 。
其他錯誤數據
如果記錄錯誤,除了錯誤本身之外,您還可以讓 WexLogger 包含下列一或多個專案:
- MiniDump
- ScreenCapture
- StackTrace
te my.test.dll /minidumponerror
te my.test.dll /screencaptureonerror /stacktraceonerror
啟用其中一或多個選項后,每次呼叫 Log::Error () 時,您會收到額外的輸出。
注意:如果您要在 TAEF 架構外部取用 WexLogger,您必須設定 <YOUR_PROCESS_NAME>_CMD 環境變數以包含這些選項,再呼叫 LogController::InitializeLogging () 。 範例:
Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();
Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/screencaptureonerror /minidumponerror /stacktraceonerror");
LogController.InitializeLogging();
C++ 錯誤處理
為了防止測試案例作者負責檢查每個記錄 API 呼叫的傳回值,WexLogger 會透過使用選擇性回呼機制來報告非預期的錯誤狀況; WexLoggerErrorCallback 函式。 透過 LogController::InitializeLogging () ) ,用戶端可以選擇指定 We (xLoggerErrorCallback 函式,以在 WexLogger 內發生非預期的錯誤狀況時呼叫。 WexLoggerErrorCallback 函式必須使用下列簽章:
void __stdcall MyLoggerErrorCallback(const unsigned short* pszMessage, HRESULT hr);
WexLoggerErrorCallback 函式的常見用法是,如果您的測試控管是控制台應用程式) ,則會將錯誤訊息寫出至控制台 (。 例如,TAEF 架構是 WexLogger 的用戶端,並實作 WexLoggerErrorCallback,以在發生 WexLogger 錯誤時將紅色文字寫入控制台。
.NET 4.0 相容性
Wex.Logger.Interop 會編譯為 NetFx 2/3/3.5 二進位檔,以便載入 NetFx 2/3/3.5 和 NetFx 4 進程。 這可讓 TAEF 執行 NetFx 2 上方的所有受控元件。 如果您在 TAEF 外部使用 Wex.Logger,則需要為 exe 新增組態 檔 ,以設定 NetFx 4 運行時間,以將 NetFx 2/3/3.5 二進位檔載入其進程。 組態檔應包含下列專案:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Managed 程式代碼錯誤和例外狀況處理
為了保護測試案例作者免於檢查每個 記錄 API 呼叫的傳回值負擔,WexLogger 的 Managed 層會透過 使用 LoggerController.WexLoggerError 事件來報告非預期的錯誤狀況。 您可以隨時實作您自己的 WexLoggerErrorEventHandler ,並使用下列 C# 事件訂用帳戶的熟悉語法來訂閱此事件:
LogController.WexLoggerError += new WexLoggerEventHandler(My_WexLoggerErrorHandler);
以下是事件處理程式看起來可能的樣子範例:
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;
}
此外, LogController::InitializeLogging () 和 LogController::FinalizeLogging () 方法本身會在失敗時擲回 WexLoggerException。 這提供錯誤的詳細資訊,也可讓您在開始測試之前中止測試回合。 測試案例作者絕對不需要擔心攔截這些例外狀況 - 只有在 WexLogger initializaiton/completion 期間應該預期/處理這些例外狀況。