Partilhar via


WexLogger

O WexLogger fornece uma API consistente para registro em log que abrange código nativo, código gerenciado e script. Ele também é dimensionado da execução de Testes de Unidade em um prompt de comando até o teste de estresse de longo curso.

Fazendo logon por meio da Estrutura de Verificação

A maioria dos logs em um caso de teste deve ser executada por meio da estrutura Verificar . Isso garantirá que os testes sejam criados de forma mais clara, sequencial e legível por humanos. No entanto, em alguns casos, os autores de teste descobrirão que precisam de um controle mais granular em relação ao que é gravado nos logs: daí a necessidade da API WexLogger.

Registro em log no TAEF

Para casos de teste em execução no TAEF, não há nenhuma inicialização de agente necessária pelo autor do teste. Você pode começar imediatamente a usar a API de Log exposta ao idioma no qual está criando seus testes.

No código C++ nativo, ele terá esta aparência:

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

No código gerenciado, ele terá esta aparência:

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

No JScript, ele terá esta aparência:

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

Log fora do TAEF

A maior parte do tempo, a inicialização e a conclusão do log serão executadas pelo TAEF, portanto, o WexLogger estará pronto para ser usado durante a duração do caso de teste, conforme indicado acima, e terminará corretamente. No entanto, se um cliente quiser usar o WexLogger fora do TAEF, ele será responsável por chamar manualmente LogController::InitializeLogging() e LogController::FinalizeLogging(). Esse requisito existe apenas para código nativo e gerenciado; os scripts não têm esse requisito adicional. Consulte a tabela Métodos LogController Estáticos abaixo para obter mais informações sobre a API LogController.

Consulte a seção Gerando logs WTT para obter informações sobre como gerar logs WTT fora do TAEF.

WexLogger API

Aqui está a lista de métodos nativos de log do C++ disponíveis.

Há versões equivalentes disponíveis para código gerenciado e script.

Métodos de log C++ nativos Funcionalidade
Assert(const wchar_t* pszAssert) Registrar em log uma declaração de teste.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext) Registrar uma declaração de teste com contexto.
Assert(const wchar_t* pszAssert, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre uma declaração de teste com informações de arquivo, função e linha.
Assert(const wchar_t* pszAssert, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre uma declaração de teste, com contexto e também informações de arquivo, função e linha.
Bug(const wchar_t* pszBugDatabase, int bugId) Registre um número de bug conhecido.
Bug(const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) Registre um número de bug conhecido, com contexto.
Comment(const wchar_t* pszComment) Registrar um comentário de teste.
Comment(const wchar_t* pszComment, const wchar_t* pszContext) Registrar um comentário de teste, com contexto
EndGroup(const wchar_t* pszGroupName) Registre o final de um grupo de testes ou de um teste específico.
EndGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registre o final de um grupo de testes ou de um teste específico com contexto.
Error(const wchar_t* pszError) Registrar um erro de teste.
Error(const wchar_t* pszError, const wchar_t* pszContext) Registrar um erro de teste com contexto.
Error(const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registrar um erro de teste com informações de arquivo, função e linha.
Error(const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um erro de teste, com contexto e também informações de arquivo, função e linha.
File(const wchar_t* pszFileName) Registre um arquivo de teste a ser salvo. Os arquivos são salvos em <WTTRunWorkingDir>\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou <CurrentDirectory\>WexLogFileOutput.
File(const wchar_t* pszFileName, const wchar_t* pszContext) Registre um arquivo de teste a ser salvo, com contexto. Os arquivos são salvos em <WTTRunWorkingDir>\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou <CurrentDirectory\>WexLogFileOutput.
Property(const wchar_t* pszName, const wchar_t* pszValue) Registre um par de propriedades nome/valor. O valor pode estar no formato xml.
Property(const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) Registre um par de propriedades nome/valor, com contexto. O valor pode estar no formato xml.
Result(TestResults::Result testResult) Registrar um resultado de teste.
Result(TestResults::Result testResult, const wchar_t* pszComment) Registre um resultado de teste com um comentário associado.
Result(TestResults::Result testResult, const wchar_t* pszComment, const wchar_t* pszContext) Registre um resultado de teste com um comentário associado, com contexto.
StartGroup(const wchar_t* pszGroupName) Registre o início de um grupo de testes ou de um teste específico.
StartGroup(const wchar_t* pszGroupName, TestResults::Result defaultTestResult) Registrar o início de um grupo de testes ou de um teste específico; também define o resultado do teste padrão.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) Registre o início de um grupo de testes ou de um teste específico com contexto.
StartGroup(const wchar_t* pszGroupName, const wchar_t* pszContext, TestResults::Result defaultTestResult) Registrar o início de um grupo de testes ou de um teste específico; também define o resultado do teste padrão.
Warning(const wchar_t* pszWarning) Registrar um aviso de teste.
Warning(const wchar_t* pszWarning, const wchar_t* pszContext) Registrar um aviso de teste com contexto.
Warning(const wchar_t* pszWarning, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um aviso de teste com informações de arquivo, função e linha.
Warning(const wchar_t* pszWarning, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) Registre um aviso de teste, com contexto e também informações de arquivo, função e linha.
Xml(const wchar_t* pszXml) Dados xml de log. Nenhuma marcar é feita para verificar se ela está bem formada.
Xml(const wchar_t* pszXml, const wchar_t* pszContext) Dados xml de log, com contexto. Nenhuma marcar é feita para verificar se ela está bem formada.
MiniDump() Registre o mini despejo de processo atual.

Nota: "Context" é uma cadeia de caracteres extra que você pode fornecer opcionalmente com uma chamada à API wexLogger para fornecer mais contexto ou detalhes. Por exemplo, você pode optar por sempre passar "ImageComparator" como seu contexto ao fazer chamadas à API wexLogger de seus métodos de classe ImageComparator.

Aqui estão os possíveis valores válidos para a enumeração nativa de TestResults::Result . Há versões equivalentes disponíveis para código gerenciado e script.

Enumeração Native C++ TestResults::Result Funcionalidade
Aprovado O teste foi aprovado
NotRun O teste não foi executado
Ignorado O teste foi ignorado
Bloqueado O teste foi bloqueado
Com falha Falha no teste

Aqui está a lista de métodos nativos do LogController do C++ disponíveis:

Métodos nativos do LogController do C++ Funcionalidade
STATIC HRESULT InitializeLogging() Inicializar a funcionalidade de registro em log.
static HRESULT InitializeLogging(WexLoggerErrorCallback pfnErrorCallback) Inicialize a funcionalidade de log e especifique a função WexLoggerErrorCallback que você gostaria de usar para ser notificada de erros internos do agente.
static HRESULT InitializeLogging(const wchar_t* pszLogName) Inicialize a funcionalidade de log e especifique o nome do arquivo de log que você gostaria de usar. Nota: O nome do log só será levado em conta se o WttLogging estiver habilitado.
static HRESULT InitializeLogging(const wchar_t* pszLogName, WexLoggerErrorCallback pfnErrorCallback) Inicialize a funcionalidade de log, especifique o nome do arquivo de log que você gostaria de usar e especifique a função WexLoggerErrorCallback que você gostaria de usar para ser notificada de erros internos do agente. Nota: O nome do log só será levado em conta se o WttLogging estiver habilitado.
estático bool IsInitialized() Retorna se o LogController foi inicializado ou não para esse processo.
static const unsigned short* GetLogName() Retorna o nome especificado para o log na chamada InitializeLogging (se houver).
STATIC HRESULT FinalizeLogging() Concluir a funcionalidade de registro em log.

Nota: Consulte a seção Tratamento de Erros do C++ abaixo para obter mais informações sobre o mecanismo WexLoggerErrorCallback e como usá-lo fora da estrutura TAEF.

Nota: Só é necessário chamar InitializeLogging/FinalizeLogging ao usar o WexLogger fora da estrutura TAEF, pois o TAEF já manipula a inicialização/conclusão de log.

Nota: Não é necessário inicializar/concluir a funcionalidade de log ao usar o WexLogger do script.

Aqui está a lista de métodos RemoteLogContoller nativos do C++ disponíveis:

Métodos RemoteLogController do C++ nativos Funcionalidade
static HRESULT GenerateConnectionData(WEX::Common::NoThrowString& connectionData) Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho faça logon de volta ao processo pai.
static HRESULT GenerateConnectionData(const wchar_t* pszMachineName, WEX::Common::NoThrowString& connectionData) Usado ao iniciar processos filho em um computador remoto. Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho faça logon de volta ao processo pai.
static HRESULT InitializeLogging(WEX::Common::NoThrowString connectionData) Inicializa a funcionalidade de registro em log no processo pai para que o processo filho possa fazer logon novamente nele.

Nota: Consulte a seção Log Remoto de Processos Filho abaixo para obter mais informações sobre o log remoto.

Aqui está a lista de métodos de log gerenciados disponíveis.

Métodos de log gerenciado Funcionalidade
Assert(IFormatProvider provider, string format, params object[] args) Registre uma declaração de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Assert(IFormatProvider provider, string format, params object[] args) Registre uma declaração de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Assert(string message) Registrar em log uma declaração de teste.
Assert(string format, object arg0) Registre uma declaração de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Assert(string format, params object[] args) Registre uma declaração de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Assert(string message, string context) Registrar uma declaração de teste com contexto.
Assert(string message, string file, string function, int line) Registre uma declaração de teste e também informações de arquivo, função e linha.
Assert(string message, string context, string file, string function, int line) Registre uma declaração de teste, com contexto e também informações de arquivo, função e linha.
Bug(string bugDatabase, int bugId) Registre um número de bug conhecido.
Bug(string bugDatabase, int bugId, contexto de cadeia de caracteres) Registre um número de bug conhecido, com contexto.
Comment(IFormatProvider provider, string format, params object[] args) Registre um comentário de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Comment(string message) Registrar um comentário de teste
Comment(string format, object arg0) Registre um comentário de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Comment(string format, params object[] args) Registre um comentário de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Comment(string message, string context) Registrar um comentário de teste, com contexto
EndGroup(string groupName) Registre o final de um grupo de testes ou de um teste específico.
EndGroup(string groupName, string context) Registre o final de um grupo de testes ou de um teste específico com contexto.
Error(IFormatProvider provider, string format, params object[] args) Registre um erro de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Error(string message) Registrar um erro de teste.
Error(string format, object arg0) Registre um erro de teste usando uma cadeia de caracteres de formato e um objeto a ser formatado.
Error(string message, string context) Registrar um erro de teste com contexto.
Error(IFormatProvider provider, string format, params object[] args) Registre um erro de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Error(string message, string file, string function, int line) Registrar um erro de teste com informações de arquivo, função e linha.
Error(string message, string context, string file, string function, int line) Registre um erro de teste, com contexto e também informações de arquivo, função e linha.
File(string fileName) Registre um arquivo de teste a ser salvo. Os arquivos são salvos em WTTRunWorkingDir\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou CurrentDirectory\WexLogFileOutput.
File(string fileName, string context) Registre um arquivo de teste a ser salvo, com contexto. Os arquivos são salvos em WTTRunWorkingDir\WexLogFileOutput (se WTTRunWorkingDir estiver definido) ou CurrentDirectory\WexLogFileOutput.
MiniDump() Registre o mini despejo do processo atual.
Property(string name, string value) Registre um par de propriedades nome/valor. O valor pode estar no formato xml.
Property(string name, string value, string context) Registre um par de propriedades nome/valor, com contexto. O valor pode estar no formato xml.
Result(TestResult testResult) Registrar um resultado de teste.
Result(TestResult testResult, string comment) Registre um resultado de teste com um comentário associado.
Result(TestResult testResult, string comment, string context) Registre um resultado de teste com um comentário associado, com contexto.
StartGroup(string groupName) Registre o início de um grupo de testes ou de um teste específico.
StartGroup(string groupName, string context) Registre o início de um grupo de testes, ou de um teste específico, com contexto.
Warning(IFormatProvider provider, string format, params object[] args) Registre um aviso de teste usando um provedor de informações de formatação específico da cultura, uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Warning(string message) Registrar um aviso de teste.
Warning(string format, object arg0) Registre um aviso de teste usando uma cadeia de caracteres de formato e um objeto para formatar.
Warning(string format, params object[] args) Registre um aviso de teste usando uma cadeia de caracteres de formato e uma matriz de objetos que contém zero ou mais objetos para formatar.
Warning(string message, string context) Registre um aviso de teste, com contexto.
Warning(string message, string file, string function, int line) Registre um aviso de teste com informações de arquivo, função e linha.
Warning(string message, string context, string file, string function, int line) Registre um aviso de teste, com contexto e também informações de arquivo, função e linha.
Xml(string xmlData) Registrar dados xml. Nenhuma marcar é feita para verificar se ela está bem formada.
Xml(string xmlData, string context) Registrar dados xml, com contexto. Nenhuma marcar é feita para verificar se ela está bem formada.

Aqui está a lista de métodos LogContoller gerenciados disponíveis:

Métodos logController gerenciados Funcionalidade
static void InitializeLogging() Inicializar a funcionalidade de registro em log.
static void InitializeLogging(String logName) Inicialize a funcionalidade de log e especifique o nome do arquivo de log que você deseja usar. Nota: O nome do log só será levado em conta se o WttLogging estiver habilitado.
static bool IsInitialized() Retorna se o LogController foi inicializado ou não para esse processo.
cadeia de caracteres estática GetLogName() Retorna o nome que foi especificado para o log na chamada InitializeLogging (se houver).
static void FinalizeLogging() Concluir a funcionalidade de registro em log.

Nota: Consulte a seção Erro de Código Gerenciado e Exceção abaixo para obter mais informações sobre como lidar com erros e exceções ao usar a camada gerenciada do WexLogger fora da estrutura TAEF.

Nota: Só é necessário chamar InitializeLogging/FinalizeLogging ao usar o WexLogger fora da estrutura TAEF, pois o TAEF já lida com a inicialização/conclusão do log.

Nota: Não é necessário inicializar/concluir a funcionalidade de log ao usar o WexLogger do script.

Aqui está a lista de métodos RemoteLogContoller gerenciados disponíveis:

Métodos RemoteLogController gerenciados Funcionalidade
cadeia de caracteres estática GenerateConnectionData() Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho faça logon de volta no processo pai.
static String GenerateConnectionData(string machineName) Usado ao iniciar processos filho em um computador remoto. Gera os dados de conexão que devem ser usados nos processos pai e filho para permitir que o processo filho faça logon de volta no processo pai.
static void InitializeLogging(String connectionData) Inicializa a funcionalidade de registro em log dentro do processo pai para que o processo filho possa fazer logon novamente nele.

Nota: Consulte a seção Log Remoto de Processos Filho abaixo para obter mais informações sobre o registro em log remoto.

Log remoto de processos filho

O WexLogger fornece a capacidade de um ou mais processos filho de fazer logon em um único processo pai, resultando na geração de resultados de teste consolidados em um único arquivo de log.

Os processos filho podem ser executados no mesmo computador que o processo pai ou remotamente em um computador diferente. Para que o log de computador remoto funcione, cabe ao cliente WexLogger adicionar exclusões de firewall TCP para todos os processos filho no computador remoto. No entanto, se os processos filho estiverem em execução no mesmo computador que o pai, nenhuma modificação de firewall será necessária.

As etapas a seguir são necessárias para configurar cada conexão de log remoto:

Processo pai

  1. Chame RemoteLogController::GenerateConnectionData() para gerar os dados de conexão que devem ser usados por ambos os processos para iniciar uma conexão de log.

    Nota: Certifique-se de marcar o valor retornado dessa chamada.

        NoThrowString connectionData;
        Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
    
    
  2. Comunique os dados de conexão com o processo filho definindo-os em seu bloco de ambiente ou passando-os como um argumento no prompt de comando. Por exemplo:

    Passe como um argumento nomeado no prompt de comando que WexLogger entende:
    /wexlogger_connectiondata=[dados de conexão]

    Nota: Se essa opção for usada, a etapa 1 na seção Processo Filho abaixo não será necessária.

    Passe como uma variável de ambiente nomeada que o WexLogger entende:
    [YourAppName_cmd]=/wexlogger_connectiondata=[dados de conexão]

    Nota: Se essa opção for usada, a etapa 1 na seção Processo Filho abaixo não será necessária.

    Passe para o processo em um formato arbitrário (algum outro parâmetro de comando, variável de ambiente etc.)
    Nota: Se essa opção for usada, a etapa 1 na seção Processo Filho abaixo será necessária.

    Nota: Como conveniência, o valor "/wexlogger_connectiondata=" é definido como uma constante nos RemoteLogControllers nativos e gerenciados:

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

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

  3. Iniciar o processo filho com os dados de conexão

  4. Chame RemoteLogController::InitalizeLogging([dados de conexão criados na etapa 1]). Essa chamada deve ser feita depois que o processo filho for iniciado, pois ele terá um tempo limite se o filho não chamar LogController::InitializeLogging() em tempo hábil.

    Nota: Certifique-se de marcar o valor retornado dessa chamada.

    // ...launch child process with connection data...
    Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
    
  5. Aguarde o processo filho etc.

Processo Filho

  1. Se os dados de conexão não foram passados para o processo filho como um argumento nomeado no prompt de comando que WexLogger entende (consulte a etapa 2 acima), você deve definir uma variável de ambiente como tal:

    [YourAppName_cmd]=/wexlogger_connectiondata=[dados de conexão]

    Por exemplo:

    // App name is mytestapp.exe
    ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
    
  2. Chame LogController::InitializeLogging() para inicializar o registro em log para esse processo. Internamente, isso aproveitará a variável de ambiente definida na etapa 1 acima (ou na etapa 2 da seção Processo Pai ) para iniciar uma conexão de log de volta para o processo pai.

  3. Log, etc; todos os rastreamentos serão enviados de volta para o processo pai.

  4. Chame LogController::FinalizeLogging() para concluir o registro em log para esse processo.

Determinando o resultado do teste

Embora haja um método fornecido para declarar explicitamente o resultado pretendido de um caso de teste (Log::Result()), não há necessidade de um caso de teste usar esse método na maioria dos casos.

Por exemplo, se um caso de teste não chamar explicitamente Log::Result() e não registrar um erro (via Log::Error()), por padrão, ele será considerado um caso de teste aprovado; se ele registrar um erro, será um caso de teste com falha.

No entanto, se um caso de teste chamar explicitamente Log::Result(TestResults::TestPassed),mas também registrar um erro no caso de teste, o teste ainda será contado como uma falha, pois ocorreu um erro dentro do teste.

Dentro da estrutura TAEF, esse comportamento pode ser substituído marcando seu teste com um resultado de teste padrão diferente. Mais informações sobre isso podem ser encontradas no documento "Criando testes TAEF".

Esse comportamento também pode ser substituído chamando explicitamente Log::StartGroup() para seus próprios grupos de teste/casos de teste, com um resultado de teste padrão de sua escolha.

Gerando logs WTT

Existem três métodos para gerar logs WTT por meio do WexLogger. Todos eles exigem que WttLog.dll esteja presente no diretório de execução ou no caminho.

  • Se você estiver executando no laboratório, com o cliente wtt instalado, os logs wtt serão gerados automaticamente para você. Isso se deve ao fato de que o WexLogger procura a existência de duas variáveis de ambiente que só devem existir em um ambiente de laboratório: 'WttTaskGuid' e 'WTTRunWorkingDir'. Se ambos existirem, o registro em log wtt será habilitado automaticamente.

  • Se estiver em execução no TAEF fora de um ambiente de laboratório, passe /enablewttlogging no prompt de comando para o caso de teste. Exemplo:

    te my.test.dll /enablewttlogging
    
  • Se você estiver consumindo o WexLogger fora da estrutura TAEF e não estiver em execução em um ambiente de laboratório, deverá definir a <variável de ambiente YOUR_PROCESS_NAME>_CMD para conter essa opção antes de chamar LogController::InitializeLogging(). Exemplo:

    Environment.SetEnvironmentVariable("<YOUR_PROCESS_NAME>_CMD", "/enablewttlogging");
    LogController.InitializeLogging();
    
    Environment.SetEnvironmentVariable("consoleapplication4_cmd", "/enablewttlogging");
    LogController.InitializeLogging();
    
  • Se você quiser acrescentar a um arquivo de log wtt existente em vez de substituí-lo, especifique também a opção /appendwttlogging além de /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();
    

Também é possível substituir ou acrescentar completamente à cadeia de caracteres de dispositivo WttLogger padrão especificando uma das seguintes opções de comando:

/WttDeviceString:<new device string>
Substitui completamente o WttDeviceString usado pelo WexLogger quando inicializa o WttLogger.

/WttDeviceStringSuffix:<value a ser acrescentado à cadeia de caracteres do dispositivo>
Acrescenta o valor especificado ao WttDeviceString padrão usado pelo WexLogger quando inicializa o WttLogger. Ignorado se '/WttDeviceString' também for especificado.

A tabela a seguir lista como o WexLogger TestResults é mapeado para os resultados do WttLogger:

WexLogger WttLogger
Aprovado WTT_TESTCASE_RESULT_PASS
NotRun WTT_TESTCASE_RESULT_BLOCKED
Ignorado WTT_TESTCASE_RESULT_SKIPPED
Bloqueado WTT_TESTCASE_RESULT_BLOCKED
Com falha WTT_TESTCASE_RESULT_FAIL

Dependências do agente

O agente C++ nativo (Wex.Logger.dll) depende deWex.Common.dll e Wex.Communication.dll.

O agente gerenciado (Wex.Logger.Interop.dll) depende deWex.Logger.dll, Wex.Common.dll e Wex.Communication.dll.

Além disso, WttLog.dll é necessário quando o registro em log do Wtt está habilitado.

Dados de erro adicionais

Caso um erro seja registrado, você poderá habilitar o WexLogger para incluir um ou mais dos seguintes itens além do erro em si:

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

Com uma ou mais dessas opções habilitadas, você receberá uma saída extra sempre que Log::Error() for chamado.

Observação: se você estiver consumindo o WexLogger fora da estrutura TAEF, deverá definir a <variável de ambiente YOUR_PROCESS_NAME>_CMD para conter essas opções antes de chamar LogController::InitializeLogging(). Exemplo:

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

Tratamento de erros do C++

Para proteger os autores de casos de teste da carga de verificação de valores retornados para cada chamada à API de Log, o WexLogger relata condições de erro inesperadas por meio do uso de um mecanismo de retorno de chamada opcional; uma função WexLoggerErrorCallback . Após o inicializaiton do WexLogger (via LogController::InitializeLogging()), os clientes podem optar por especificar uma função WexLoggerErrorCallback para chamar se ocorrerem condições de erro inesperadas no WexLogger. A função WexLoggerErrorCallback deve usar a seguinte assinatura:

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

Um uso comum para a função WexLoggerErrorCallback seria gravar as mensagens de erro no console (se o cinto de teste for um aplicativo de console). Por exemplo, a estrutura TAEF é um cliente do WexLogger e implementa um WexLoggerErrorCallback que grava texto vermelho no console quando ocorrem erros de WexLogger.

Compatibilidade do .NET 4.0

Wex.Logger.Interop é compilado como um binário do NetFx 2/3/3.5, para que possa ser carregado nos processos do NetFx 2/3/3.5 e do NetFx 4. Isso permite que o TAEF execute todos os assemblies gerenciados acima do NetFx 2. Se você estiver usando Wex.Logger fora do TAEF, precisará adicionar um arquivo de configuração para o exe para configurar o runtime do NetFx 4 para carregar binários do NetFx 2/3/3.5 em seu processo. O arquivo de configuração deve conter o seguinte:

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

Erro de código gerenciado e tratamento de exceções

Para proteger os autores de casos de teste da carga de verificação de valores retornados para cada chamada à API de Log , a camada gerenciada do WexLogger relata condições de erro inesperadas por meio do uso do evento LoggerController.WexLoggerError . Você pode assinar esse evento a qualquer momento implementando seu próprio WexLoggerErrorEventHandler e usando a seguinte sintaxe familiar para a assinatura de evento C#:

LogController.WexLoggerError += new WexLoggerEventHandler(My_WexLoggerErrorHandler);

Aqui está um exemplo de como seu manipulador de eventos pode ser:

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

Além disso, os métodos LogController::InitializeLogging() e LogController::FinalizeLogging() lançam WexLoggerException em caso de falha. Isso fornece informações detalhadas sobre o erro e também permite que você anule a execução do teste antes de começar. Os autores de caso de teste nunca precisarão se preocupar em capturar essas exceções – elas devem ser esperadas/tratadas somente durante a inicialização/conclusão do WexLogger.