Delen via


WexLogger

De WexLogger biedt een consistente API voor logboekregistratie die systeemeigen code, beheerde code en script omvat. Het schaalt ook van het uitvoeren van eenheidstests in een opdrachtprompt tot langlopende stresstests.

Logboekregistratie via het Verify Framework

Most logging within a test case should be performed via the Verify framework. Dit zorgt ervoor dat tests worden gemaakt op een duidelijkere, meer sequentiële en door mensen leesbare manier. In sommige gevallen zullen testauteurs echter merken dat ze gedetailleerdere controle nodig hebben over wat er naar de logboeken wordt geschreven: vandaar de behoefte aan de WexLogger-API.

Logboekbeheer in TAEF

Voor testcases die worden uitgevoerd in TAEF, is er geen loggerinitialisatie door de testauteur vereist. U kunt direct beginnen met het gebruik van de logboek-API die beschikbaar is voor de taal waarin u uw tests ontwerpt.

In systeemeigen C++-code ziet deze er als volgt uit:

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

In beheerde code ziet deze er als volgt uit:

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

In JScript ziet deze er als volgt uit:

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

Logboekregistratie buiten TAEF

De meeste tijd wordt de initialisatie en afronding van logboekregistratie uitgevoerd door TAEF, zodat de WexLogger gedurende de volledige duur van de testcase klaar is voor gebruik en correct wordt afgerond. However, if a client would like to use the WexLogger outside TAEF, they will be responsible for manually calling LogController::InitializeLogging() and LogController::FinalizeLogging(). Deze vereiste bestaat alleen voor systeemeigen en beheerde code; scripts hebben deze aanvullende vereiste niet. Zie de tabel Static LogController Methods hieronder voor meer informatie over de LogController-API.

Raadpleeg de sectie WTT-logboeken genereren voor informatie over het genereren van WTT-logboeken buiten TAEF.

WexLogger API

Hier volgt de lijst met systeemeigen C++-logboekmethoden die beschikbaar zijn.

Er zijn gelijkwaardige versies beschikbaar voor beheerde code en scripts.

Systeemeigen C++-logboekmethoden Functionality
Assert(const wchar_t* pszAssert) Een test assert vastleggen.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext) Een test assert vastleggen, met context.
Assert(const wchar_t* pszAssert, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registreer een test assert met bestands-, functie- en regelgegevens.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Log een testassertie met context, en ook bestands-, functie- en lijninformatie.
Bug(const wchar_t* pszBugDatabase, int bugId) Registreer een bekend foutnummer.
Bug(const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) Registreer een bekend foutnummer, met context.
Comment(const wchar_t* pszComment) Een testcommentaar registreren.
Comment(const wchar_t* pszComment, const wchar_t* pszContext) Een testcommentaar vastleggen met context
EndGroup(const wchar_t* pszGroupName) Registreer het einde van een groep tests of van een specifieke test.
EndGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registreer het einde van een groep tests of van een specifieke test met context.
Error(const wchar_t* pszError) Een testfout vastleggen.
Error(const wchar_t* pszError, const wchar_t* pszContext) Een testfout vastleggen, met context.
Error(const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registreer een testfout met bestands-, functie- en regelgegevens.
Error(const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registreer een testfout, met context en ook bestands-, functie- en regelgegevens.
File(const wchar_t* pszFileName) Registreer een testbestand dat moet worden opgeslagen. Bestanden worden opgeslagen in ofwel <WTTRunWorkingDir>\WexLogFileOutput (indien WTTRunWorkingDir is ingesteld) of <CurrentDirectory\>WexLogFileOutput.
File(const wchar_t* pszFileName, const wchar_t* pszContext) Registreer een testbestand dat moet worden opgeslagen, met context. Bestanden worden opgeslagen in ofwel <WTTRunWorkingDir>\WexLogFileOutput (indien WTTRunWorkingDir is ingesteld) of <CurrentDirectory\>WexLogFileOutput.
Property(const wchar_t* pszName, const wchar_t* pszValue) Een naam/waarde-eigenschapspaar registreren. De waarde kan een XML-indeling hebben.
Property(const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) Registreer een naam-/waarde-eigenschapspaar, met context. De waarde kan een XML-indeling hebben.
Result(TestResults::Result testResult) Een testresultaat vastleggen.
Result(TestResults::Result testResult, const wchar_t* pszComment) Een testresultaat vastleggen met een bijbehorende opmerking.
Result(TestResults::Result testResult, const wchar_t* pszComment, const wchar_t* pszContext) Registreer een testresultaat met een bijbehorende opmerking, met context.
StartGroup(const wchar_t* pszGroupName) Registreer het begin van een groep tests of van een specifieke test.
StartGroup(const wchar_t* pszGroupName, TestResults::Result defaultTestResult) Het begin van een groep tests of van een specifieke test registreren; stelt ook het standaardtestresultaat in.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registreer het begin van een groep tests, of van een specifieke test, met context.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext, TestResults::Result defaultTestResult) Het begin van een groep tests of van een specifieke test registreren; stelt ook het standaardtestresultaat in.
Waarschuwing (const wchar_t* pszWarning) Een testwaarschuwing registreren.
Warning(const wchar_t* pszWarning, const wchar_t* pszContext) Een testwaarschuwing vastleggen, met context.
Warning(const wchar_t* pszWarning, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Meld een testwaarschuwing aan met informatie over bestanden, functies en regels.
Waarschuwing(const wchar_t* pszWarning, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registreer een testwaarschuwing, met context en ook informatie over bestanden, functies en regels.
Xml(const wchar_t* pszXml) XML-gegevens vastleggen. Er wordt geen controle uitgevoerd om te controleren of deze goed is gevormd.
Xml(const wchar_t* pszXml, const wchar_t* pszContext) XML-gegevens loggen, met context. Er wordt geen controle uitgevoerd om te controleren of deze goed is gevormd.
MiniDump() Registreer de huidige proces-minidump.

Note: "Context" is an extra string that you can optionally provide with a WexLogger API call to provide more context or detail. For example, you may choose to always pass in "ImageComparator" as your context when making any WexLogger API calls from your ImageComparator class methods.

Here are the possible valid values for the native C++ TestResults::Result enumeration. Er zijn gelijkwaardige versies beschikbaar voor beheerde code en scripts.

Native C++ TestResults::Result-enumeratie Functionality
Passed De test is geslaagd
NotRun De test is niet uitgevoerd
Skipped De test is overgeslagen
Blocked De test is geblokkeerd
Failed De test is mislukt

Hier volgt de lijst met systeemeigen C++ LogController-methoden die beschikbaar zijn:

Systeemeigen C++ LogController-methoden Functionality
statische HRESULT InitializeLogging() Initialiseer de functionaliteit voor logboekregistratie.
statische HRESULT InitializeLogging(WexLoggerErrorCallback pfnErrorCallback) Initialiseer de functionaliteit voor logboekregistratie en geef de WexLoggerErrorCallback-functie op die u wilt gebruiken om op de hoogte te worden gesteld van interne logboekregistratiefouten.
statische HRESULT InitializeLogging(const wchar_t* pszLogName) Initialiseer de functionaliteit voor logboekregistratie en geef de naam op van het logboekbestand dat u wilt gebruiken. Note: The log name is only taken into account if WttLogging is enabled.
static HRESULT InitializeLogging(const wchar_t* pszLogName, WexLoggerErrorCallback pfnErrorCallback) Initialiseer de functionaliteit voor logboekregistratie, geef de naam op van het logboekbestand dat u wilt gebruiken en geef de WexLoggerErrorCallback-functie op die u wilt gebruiken om op de hoogte te worden gesteld van interne logboekregistratiefouten. Note: The log name is only taken into account if WttLogging is enabled.
statische bool IsInitialized() Retourneert of de LogController al dan niet is geïnitialiseerd voor dit proces.
statische const niet-ondertekende korte* GetLogName() Retourneert de naam die is opgegeven voor het logboek in de initializeLogging-aanroep (indien van toepassing).
statische HRESULT FinalizeLogging() Voltooi de functionaliteit voor logboekregistratie.

Note: See the C++ Error Handling section below for more information on the WexLoggerErrorCallback mechanism and how to use it outside the TAEF framework.

Note: It is only necessary to call InitializeLogging/FinalizeLogging when using the WexLogger outside the TAEF framework, as TAEF already handles logging initialization/completion.

Note: It is not necessary to initialize/complete logging functionality when using the WexLogger from script.

Hier volgt de lijst met systeemeigen C++ RemoteLogContoller-methoden die beschikbaar zijn:

Native C++ RemoteLogController-methoden Functionality
statische HRESULT GenerateConnectionData(WEX::Common::NoThrowString& connectionData) Hiermee worden de verbindingsgegevens gegenereerd die moeten worden gebruikt binnen de ouder- en kinderprocessen, zodat het kinderproces zich kan aanmelden bij het ouderproces.
statische HRESULT GenerateConnectionData(const wchar_t* pszMachineName, WEX::Common::NoThrowString& connectionData) Wordt gebruikt bij het starten van subprocessen op een externe computer. Hiermee worden de verbindingsgegevens gegenereerd die moeten worden gebruikt binnen de ouder- en kinderprocessen, zodat het kinderproces zich kan aanmelden bij het ouderproces.
statische HRESULT InitializeLogging(WEX::Common::NoThrowString connectionData) Initialiseert de functionaliteit voor logboekregistratie binnen het bovenliggende proces, zodat het onderliggende proces naar het bovenliggende proces kan loggen.

Note: See the Remote Logging From Child Processes section below for more information on remote logging.

Hier volgt de lijst met beheerde logboekmethoden die beschikbaar zijn.

Beheerde logboekmethoden Functionality
Assert(IFormatProvider-provider, tekenreeksindeling, params-object[] args) Meld een test assert aan met behulp van een cultuurspecifieke opmaakinformatieprovider, een notatietekenreeks en een objectmatrix die nul of meer objecten bevat die moeten worden opgemaakt.
Assert(IFormatProvider-provider, tekenreeksindeling, params-object[] args) Meld een test assert aan met behulp van een cultuurspecifieke opmaakinformatieprovider, een notatietekenreeks en een objectmatrix die nul of meer objecten bevat die moeten worden opgemaakt.
Assert(string message) Een test assert vastleggen.
Assert(tekenreeksindeling, object arg0) Registreer een testbewering met behulp van een opmaakreeks en een object om de opmaak toe te passen.
Assert(tekenreeksformaat, parameterobjecten[] args) Registreer een test assert met behulp van een notatietekenreeks en een objectmatrix die nul of meer objecten bevat die moeten worden opgemaakt.
Assert(tekenreeksbericht, tekenreekscontext) Een test assert vastleggen, met context.
Assert(tekenreeksbericht, tekenreeksbestand, tekenreeksfunctie, int line) Registreer een testbevestiging en ook bestands-, functie- en regelinformatie.
Assert(tekenreeksbericht, tekenreekscontext, tekenreeksbestand, tekenreeksfunctie, int line) Log een testassertie met context, en ook bestands-, functie- en lijninformatie.
Bug(tekenreeks bugDatabase, int bugId) Registreer een bekend foutnummer.
Bug(tekenreeks bugDatabase, int bugId, tekenreekscontext) Registreer een bekend foutnummer, met context.
Opmerking(IFormatProvider-provider, tekenreeksindeling, params-object[] args) Registreer een testopmerking met behulp van een cultuurspecifieke opmaakinformatieprovider, een notatietekenreeks en een objectmatrix die nul of meer objecten bevat die u wilt opmaken.
Comment(string message) Een testcommentaar registreren
Comment(tekenreeksindeling, object arg0) Registreer een testopmerking met behulp van een opmaakreeks en een object om te formatteren.
Comment(string-formaat, parameterobjecten[] args) Registreer een testopmerking met behulp van een notatietekenreeks en een objectenreeks die nul of meer objecten bevat om te formatteren.
Comment(tekenreeksbericht, tekenreekscontext) Een testcommentaar vastleggen met context
EndGroup(string groupName) Registreer het einde van een groep tests of van een specifieke test.
EndGroup(tekenreeksgroepnaam, tekenreekscontext) Registreer het einde van een groep tests of van een specifieke test met context.
Fout(IFormatProvider-provider, tekenreeksindeling, params-object[] args) Registreer een testfout met behulp van een cultuurspecifieke opmaakinformatieprovider, een opmaakreeks en een objectarray die nul of meer objecten bevat om op te maken.
Error(string message) Een testfout vastleggen.
Fout(tekenreeksindeling, object arg0) Een testfout vastleggen met behulp van een notatietekenreeks en een object dat moet worden opgemaakt.
Fout(tekenreeksbericht, tekenreekscontext) Een testfout vastleggen, met context.
Fout(IFormatProvider-provider, tekenreeksindeling, params-object[] args) Een testfout vastleggen met behulp van een formaatstring en een objectarray die nul of meer objecten bevat om op te maken.
Fout(tekenreeksbericht, tekenreeksbestand, tekenreeksfunctie, int line) Registreer een testfout met bestands-, functie- en regelgegevens.
Fout(tekenreeksbericht, tekenreekscontext, tekenreeksbestand, tekenreeksfunctie, int line) Registreer een testfout, met context en ook bestands-, functie- en regelgegevens.
File(string fileName) Registreer een testbestand dat moet worden opgeslagen. Bestanden worden opgeslagen in WTTRunWorkingDir\WexLogFileOutput (als WTTRunWorkingDir is ingesteld) of CurrentDirectory\WexLogFileOutput.
File(string fileName, tekenreekscontext) Registreer een testbestand dat moet worden opgeslagen, met context. Bestanden worden opgeslagen in WTTRunWorkingDir\WexLogFileOutput (als WTTRunWorkingDir is ingesteld) of CurrentDirectory\WexLogFileOutput.
MiniDump() Registreer de huidige proces-minidump.
Eigenschap(tekenreeksnaam, tekenreekswaarde) Een naam/waarde-eigenschapspaar registreren. De waarde kan een XML-indeling hebben.
Eigenschap(tekenreeksnaam, tekenreekswaarde, tekenreekscontext) Registreer een naam-/waarde-eigenschapspaar, met context. De waarde kan een XML-indeling hebben.
Result(TestResult testResult) Een testresultaat vastleggen.
Result(TestResult testResult, opmerking (string)) Een testresultaat vastleggen met een bijbehorende opmerking.
Result(TestResult testResult, opmerking van tekenreeks, context van tekenreeks) Registreer een testresultaat met een bijbehorende opmerking, met context.
StartGroup(string groupName) Registreer het begin van een groep tests of van een specifieke test.
StartGroup(tekenreeksgroepnaam, tekenreekscontext) Registreer het begin van een groep tests, of van een specifieke test, met context.
Waarschuwing (IFormatProvider-provider, tekenreeksindeling, params-object[] args) Meld een testwaarschuwing aan met behulp van een cultuurspecifieke opmaakinformatieprovider, een notatietekenreeks en een objectmatrix die nul of meer objecten bevat die u wilt opmaken.
Warning(string message) Een testwaarschuwing registreren.
Waarschuwing (tekenreeksindeling, object arg0) Meld een testwaarschuwing aan met behulp van een notatietekenreeks en een object dat moet worden opgemaakt.
Waarschuwing(tekenreeksindeling, parameterobject[] args) Registreer een testwaarschuwing met behulp van een notatietekenreeks en een objectmatrix die nul of meer objecten bevat om op te maken.
Waarschuwing(string bericht, string context) Een testwaarschuwing vastleggen, met context.
Waarschuwing(tekenreeksbericht, tekenreeksbestand, tekenreeksfunctie, int line) Meld een testwaarschuwing aan met informatie over bestanden, functies en regels.
Waarschuwing(tekenreeksbericht, tekenreekscontext, tekenreeksbestand, tekenreeksfunctie, int line) Registreer een testwaarschuwing, met context en ook informatie over bestanden, functies en regels.
Xml(string xmlData) XML-gegevens vastleggen. Er wordt geen controle uitgevoerd om te controleren of deze goed is gevormd.
Xml(string xmlData, tekenreekscontext) XML-gegevens loggen, met context. Er wordt geen controle uitgevoerd om te controleren of deze goed is gevormd.

Hier volgt de lijst met beheerde LogContoller-methoden die beschikbaar zijn:

Beheerde LogController-methoden Functionality
static void InitializeLogging() Initialiseer de functionaliteit voor logboekregistratie.
static void InitializeLogging(String logName) Initialiseer de functionaliteit voor logboekregistratie en geef de naam op van het logboekbestand dat u wilt gebruiken. Note: The log name is only taken into account if WttLogging is enabled.
statische bool IsInitialized() Retourneert of de LogController al dan niet is geïnitialiseerd voor dit proces.
`static String GetLogName()` Retourneert de naam die is opgegeven voor het logboek in de initializeLogging-aanroep (indien van toepassing).
statische void FinalizeLogging() Voltooi de functionaliteit voor logboekregistratie.

Note: See the Managed Code Error and Exception section below for more information on how to handle errors and exceptions when using the managed layer of the WexLogger outside the TAEF framework.

Note: It is only necessary to call InitializeLogging/FinalizeLogging when using the WexLogger outside the TAEF framework, as TAEF already handles logging initialization/completion.

Note: It is not necessary to initialize/complete logging functionality when using the WexLogger from script.

Hier volgt de lijst met beheerde RemoteLogContoller-methoden die beschikbaar zijn:

Beheerde RemoteLogController-methoden Functionality
statische tekenreeks GenerateConnectionData() Hiermee worden de verbindingsgegevens gegenereerd die moeten worden gebruikt binnen de ouder- en kinderprocessen, zodat het kinderproces zich kan aanmelden bij het ouderproces.
static String GenerateConnectionData(string machineName) Wordt gebruikt bij het starten van subprocessen op een externe computer. Hiermee worden de verbindingsgegevens gegenereerd die moeten worden gebruikt binnen de ouder- en kinderprocessen, zodat het kinderproces zich kan aanmelden bij het ouderproces.
static void InitializeLogging(String connectionData) Initialiseert de functionaliteit voor logboekregistratie binnen het bovenliggende proces, zodat het onderliggende proces naar het bovenliggende proces kan loggen.

Note: See the Remote Logging From Child Processes section below for more information on remote logging.

Externe logboekregistratie van subprocessen

WexLogger biedt de mogelijkheid voor een of meer subprocessen om loggegevens terug te sturen naar één ouderproces, waardoor geconsolideerde testresultaten worden gegenereerd in één logbestand.

De childprocessen kunnen draaien op dezelfde machine als het bovenliggende proces of op een andere machine. Logboekregistratie op afstand werkt alleen als de WexLogger-client TCP-firewalluitsluitingen toevoegt voor alle onderliggende processen op de externe computer. Als de kindprocessen echter worden uitgevoerd op dezelfde computer als de ouder, zijn er geen firewallwijzigingen nodig.

De volgende stappen zijn nodig om elke externe logboekregistratieverbinding in te stellen:

Parent Process

  1. Call RemoteLogController::GenerateConnectionData() to generate the connection data that must be used by both processes to initiate a logging connection.

    Note: Be sure to check the return value of this call.

        NoThrowString connectionData;
        Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
    
    
  2. Communiceer de verbindingsgegevens met het onderliggende proces door deze in te stellen in het omgevingsblok of door deze door te geven als argument bij de opdrachtprompt. For example:

    Geef als een benoemd argument door aan de opdrachtprompt, die door WexLogger begrepen wordt:
    /wexlogger_connectiondata=[connection data]

    Note: If this option is used, then step 1 in the Child Process section below is not necessary.

    Geef door als een benoemde omgevingsvariabele die WexLogger begrijpt:
    [YourAppName_cmd]=/wexlogger_connectiondata=[connection data]

    Note: If this option is used, then step 1 in the Child Process section below is not necessary.

    Voer de gegevens in een willekeurig formaat in (een andere opdrachtparameter, omgevingsvariabele, enzovoort)
    Note: If this option is used, then step 1 in the Child Process section below is necessary.

    Note: As a convenience, the value "/wexlogger_connectiondata=" is defined as a constant in both the native and managed RemoteLogControllers:

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

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

  3. Start het subproces met de verbindingsgegevens

  4. RemoteLogController aanroepen::InitializeLogging([verbindingsgegevens gemaakt in stap 1]). This call must be made after the child process is launched, since it will time out if the child does not call LogController::InitializeLogging() in a timely manner.

    Note: Be sure to check the return value of this call.

    // ...launch child process with connection data...
    Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
    
  5. Wacht op het child proces, enzovoort.

Child Process

  1. If the connection data was not passed to the child process as a named argument at the command prompt that WexLogger understands (see step 2 above), then you must set an environment variable as such:

    [YourAppName_cmd]=/wexlogger_connectiondata=[connection data]

    For example:

    // App name is mytestapp.exe
    ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
    
  2. Call LogController::InitializeLogging() to initialize logging for this process. Internally, this will leverage the environment variable set in step 1 above (or in step 2 of the Parent Process section) to initiate a logging connection back to the parent process.

  3. Logboek, enz; alle traceringen worden teruggestuurd naar het bovenliggende proces.

  4. Call LogController::FinalizeLogging() to finish logging for this process.

Testresultaat bepalen

Although there is a method provided to explicitly state the intended outcome of a test case (Log::Result()), there is no need for a test case to use this method in most cases.

For example, if a test case does not explicitly call Log::Result(), and does not log an error (via Log::Error()), by default it is considered a passing test case; if it does log an error, it is a failing test case.

However, if a test case does explicitly call Log::Result(TestResults::TestPassed), but also does log an error within the test case, the test will still be counted as a failure since an error occurred within the test.

Binnen het TAEF-framework kan dit gedrag worden overschreven door uw test te taggen met een ander standaardtestresultaat. Meer informatie hierover vindt u in het document 'TaEF-tests ontwerpen'.

This behavior can also be overridden by explicitly calling Log::StartGroup() for your own test groups/test cases, with a default test result of your choice.

WTT-logboeken genereren

Three methods exist to generate WTT logs via the WexLogger. All of them require that WttLog.dll is present in the run directory, or in your path.

  • Als u in het lab werkt en de wtt-client is geïnstalleerd, worden wtt-logboeken automatisch voor u gegenereerd. Dit komt door het feit dat de WexLogger zoekt naar het bestaan van twee omgevingsvariabelen die alleen in een testomgeving moeten bestaan: 'WttTaskGuid' en 'WTTRunWorkingDir'. Als beide bestaan, wordt wtt-logboekregistratie automatisch ingeschakeld.

  • Als u TAEF buiten een laboratoriumomgeving gebruikt, geef /enablewttlogging door aan de opdrachtprompt voor uw testcase. Example:

    te my.test.dll /enablewttlogging
    
  • Als u WexLogger buiten het TAEF-raamwerk gebruikt en u niet in een laboratoriumomgeving werkt, moet u de omgevingsvariabele <YOUR_PROCESS_NAME>_CMD instellen om deze optie te bevatten voordat u LogController::InitializeLogging() aanroept. Example:

    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging");
    LogController.InitializeLogging();
    
  • Als u een bestaand wtt-logboekbestand wilt toevoegen in plaats van het te overschrijven, geeft u ook de optie /appendwttlogging op naast /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();
    

Het is ook mogelijk om de standaard-WttLogger-apparaattekenreeks volledig te overschrijven of toe te voegen door een van de volgende opdrachtopties op te geven:

/WttDeviceString:<nieuwe apparaattekenreeks>
Hiermee wordt de WttDeviceString die door WexLogger wordt gebruikt, volledig overschreven wanneer WttLogger wordt geïnitialiseerd.

/WttDeviceStringSuffix:<waarde om aan de apparaatreeks toe te voegen>
Voegt de opgegeven waarde toe aan de standaard WttDeviceString die door WexLogger wordt gebruikt wanneer WttLogger wordt geïnitialiseerd. Genegeerd als ook '/WttDeviceString' is opgegeven.

In de volgende tabel ziet u hoe WexLogger TestResults overeenkomen met WttLogger-resultaten:

WexLogger WttLogger
Passed WTT_TESTCASE_RESULT_PASS
NotRun WTT_TESTCASE_RESULT_BLOCKED
Skipped WTT_TESTCASE_RESULT_SKIPPED
Blocked WTT_TESTCASE_RESULT_BLOCKED
Failed WTT_TESTCASE_RESULT_FAIL

Logger Dependencies

The native C++ logger (Wex.Logger.dll) is dependent upon Wex.Common.dll and Wex.Communication.dll.

The managed logger (Wex.Logger.Interop.dll) is dependent upon Wex.Logger.dll, Wex.Common.dll and Wex.Communication.dll.

Additionally, WttLog.dll is required when Wtt Logging is enabled.

Aanvullende foutgegevens

Als er een fout wordt geregistreerd, kunt u Inschakelen dat WexLogger een of meer van de volgende items bevat, naast de fout zelf:

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

Als een of meer van deze opties zijn ingeschakeld, ontvangt u elke keer dat Log::Error() wordt aangeroepen extra uitvoer.

Opmerking: Als u WexLogger buiten het TAEF-framework gebruikt, moet u de <omgevingsvariabele YOUR_PROCESS_NAME> instellen_CMD om deze opties te bevatten voordat u LogController::InitializeLogging()aanroept. Example:

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

C++ Foutafhandeling

In order to shield test case authors from the burden of checking return values for each Log API call, the WexLogger reports unexpected error conditions via the use of an optional callback mechanism; a WexLoggerErrorCallback function. Upon initializaiton of the WexLogger (via LogController::InitializeLogging()), clients may choose to specify a WexLoggerErrorCallback function to call if unexpected error conditions occur within the WexLogger. The WexLoggerErrorCallback function must use the following signature:

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

Een veelvoorkomend gebruik voor de WexLoggerErrorCallback-functie is het schrijven van de foutberichten naar de console (als uw testharnas een consoletoepassing is). For example, the TAEF framework is a client of the WexLogger, and implements a WexLoggerErrorCallback which writes red text to the console when WexLogger errors occur.

Compatibiliteit met .NET 4.0

Wex.Logger.Interop wordt gecompileerd als een binair bestand van NetFx 2/3/3.5, zodat het kan worden geladen in zowel NetFx 2/3/3.5- als NetFx 4-processen. Hierdoor kan TAEF alle beheerde assembly's uitvoeren boven NetFx 2. If you're using Wex.Logger outside TAEF, then you need to add a config file for your exe to configure the NetFx 4 runtime to load NetFx 2/3/3.5 binaries into it's process. Het configuratiebestand moet het volgende bevatten:

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

Fout- en uitzonderingsafhandeling van beheerde code

In order to shield test case authors from the burden of checking return values for each Log API call, the managed layer of the WexLogger reports unexpected error conditions via the use of the LoggerController.WexLoggerError event. You may subscribe to this event at any time by implementing your own WexLoggerErrorEventHandler and using the following familiar syntax for C# event subscription:

LogController.WexLoggerError += new WexLoggerEventHandler(My_WexLoggerErrorHandler);

Hier volgt een voorbeeld van hoe uw gebeurtenis-handler eruit kan zien:

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

Additionally, the LogController::InitializeLogging() and LogController::FinalizeLogging() methods themselves throw WexLoggerException in the event of failure. Dit biedt gedetailleerde informatie over de fout en stelt u ook in staat om de testuitvoering af te breken voordat deze begint. Auteurs van testcases hoeven zich nooit zorgen te maken over het vangen van deze uitzonderingen. Ze moeten alleen worden verwacht/verwerkt tijdens de initializaiton/voltooiing van WexLogger.