다음을 통해 공유


WexLogger

WexLogger는 네이티브 코드, 관리 코드 및 스크립트에 걸쳐 있는 로깅을 위한 일관된 API를 제공합니다. 또한 명령 프롬프트에서 단위 테스트를 실행하는 것부터 장거리 스트레스 테스트까지 확장됩니다.

Verify Framework를 통한 로깅

테스트 사례 내의 대부분의 로깅은 Verify 프레임워크를 통해 수행해야 합니다. 이렇게 하면 테스트가 더 명확하고 순차적이고 사람이 읽을 수 있는 방식으로 작성됩니다. 그러나 경우에 따라 테스트 작성자는 로그에 기록되는 내용에 대한 보다 세분화된 제어가 필요하므로 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);

관리 코드에서는 다음과 같이 표시됩니다.

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()을 수동으로 호출해야 합니다. 이 요구 사항은 네이티브 및 관리 코드에만 존재합니다. 스크립트에는 이 추가 요구 사항이 없습니다. LogController API에 대한 자세한 내용은 아래의 정적 LogController 메서드 표를 참조하세요.

TAEF 외부에서 WTT 로그를 생성하는 방법에 대한 자세한 내용은 WTT 로그 생성 섹션을 참조하세요.

WexLogger API

다음은 사용할 수 있는 네이티브 C++ 로그 메서드 목록입니다.

관리 코드 및 스크립트에 사용할 수 있는 동일한 버전이 있습니다.

네이티브 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(const wchar_t* pszBugDatabase, int bugId, const wchar_t* pszContext) 컨텍스트를 사용하여 알려진 버그 번호를 기록합니다.
Comment(const wchar_t* pszComment) 테스트 주석을 기록합니다.
Comment(const wchar_t* pszComment, const wchar_t* pszContext) 컨텍스트를 사용하여 테스트 주석 기록
EndGroup(const wchar_t* pszGroupName) 테스트 그룹 또는 특정 테스트의 끝을 기록합니다.
EndGroup(const wchar_t* pszGroupName, const wchar_t* pszContext) 컨텍스트를 사용하여 테스트 그룹 또는 특정 테스트의 끝을 기록합니다.
Error(const wchar_t* pszError) 테스트 오류를 기록합니다.
Error(const wchar_t* pszError, const wchar_t* pszContext) 컨텍스트를 사용하여 테스트 오류를 기록합니다.
Error(const wchar_t* pszError, const wchar_t* pszFile, const wchar_t* pszFunction, int line) 파일, 함수 및 줄 정보를 사용하여 테스트 오류를 기록합니다.
Error(const wchar_t* pszError, const wchar_t* pszContext, const wchar_t* pszFile, const wchar_t* pszFunction, int line) 컨텍스트 및 파일, 함수 및 줄 정보를 사용하여 테스트 오류를 기록합니다.
File(const wchar_t* pszFileName) 저장할 테스트 파일을 기록합니다. 파일은 WTTRunWorkingDir>\WexLogFileOutput(WTTRunWorkingDir이 설정된 경우) 또는 <CurrentDirectory\>WexLogFileOutput에 저장<됩니다.
File(const wchar_t* pszFileName, const wchar_t* pszContext) 컨텍스트를 사용하여 저장할 테스트 파일을 기록합니다. 파일은 WTTRunWorkingDir>\WexLogFileOutput(WTTRunWorkingDir이 설정된 경우) 또는 <CurrentDirectory\>WexLogFileOutput에 저장<됩니다.
Property(const wchar_t* pszName, const wchar_t* pszValue) 이름/값 속성 쌍을 기록합니다. 값은 xml 형식일 수 있습니다.
Property(const wchar_t* pszName, const wchar_t* pszValue, const wchar_t* pszContext) 컨텍스트를 사용하여 이름/값 속성 쌍을 기록합니다. 값은 xml 형식일 수 있습니다.
Result(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) 테스트 그룹 또는 특정 테스트의 시작을 기록합니다. 기본 테스트 결과도 설정합니다.
Warning(const wchar_t* pszWarning) 테스트 경고를 기록합니다.
Warning(const wchar_t* pszWarning, const wchar_t* pszContext) 컨텍스트를 사용하여 테스트 경고를 기록합니다.
Warning(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 열거형에 사용할 수 있는 유효한 값입니다. 관리 코드 및 스크립트에 사용할 수 있는 동일한 버전이 있습니다.

네이티브 C++ TestResults::Result 열거형 기능
통과 테스트가 통과됨
NotRun 테스트가 실행되지 않았습니다.
건너뜀 테스트를 건너뛰었다
차단 테스트가 차단되었습니다.
실패 테스트 실패

다음은 사용할 수 있는 네이티브 C++ LogController 메서드 목록입니다.

네이티브 C++ LogController 메서드 기능
static HRESULT InitializeLogging() 로깅 기능을 초기화합니다.
static 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가 이미 로깅 초기화/완료를 처리하므로 TAEF 프레임워크 외부에서 WexLogger 를 사용하는 경우에만 InitializeLogging/FinalizeLogging을 호출해야 합니다.

참고: 스크립트에서 WexLogger 를 사용하는 경우 로깅 기능을 초기화/완료할 필요가 없습니다.

다음은 사용할 수 있는 네이티브 C++ RemoteLogContoller 메서드 목록입니다.

네이티브 C++ RemoteLogController 메서드 기능
static HRESULT GenerateConnectionData(WEX::Common::NoThrowString& connectionData) 자식 프로세스가 부모 프로세스에 다시 로그온할 수 있도록 부모 및 자식 프로세스 내에서 사용해야 하는 연결 데이터를 생성합니다.
static HRESULT GenerateConnectionData(const wchar_t* pszMachineName, WEX::Common::NoThrowString& connectionData) 원격 머신에서 자식 프로세스를 시작할 때 사용됩니다. 자식 프로세스가 부모 프로세스에 다시 로그온할 수 있도록 부모 및 자식 프로세스 내에서 사용해야 하는 연결 데이터를 생성합니다.
static HRESULT InitializeLogging(WEX::Common::NoThrowString connectionData) 자식 프로세스가 다시 로그온할 수 있도록 부모 프로세스 내에서 로깅 기능을 초기화합니다.

참고: 원격 로깅에 대한 자세한 내용은 아래 의 자식 프로세스에서 원격 로깅 섹션을 참조하세요.

다음은 사용 가능한 관리되는 로그 메서드 목록입니다.

관리되는 로그 메서드 기능
Assert(IFormatProvider 공급자, 문자열 형식, params object[] args) 문화권별 서식 지정 정보 공급자, 형식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 어설션을 기록합니다.
Assert(IFormatProvider 공급자, 문자열 형식, params object[] args) 문화권별 서식 지정 정보 공급자, 형식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 어설션을 기록합니다.
Assert(문자열 메시지) 테스트 어설션을 기록합니다.
Assert(string format, object arg0) 형식 문자열 및 개체를 사용하여 형식을 지정하여 테스트 어설션을 기록합니다.
Assert(string format, params object[] args) 형식 문자열을 사용하여 테스트 어설션을 기록하고 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 기록합니다.
Assert(string message, string context) 컨텍스트를 사용하여 테스트 어설션을 기록합니다.
Assert(string message, string file, string function, int line) 테스트 어설션 및 파일, 함수 및 줄 정보도 기록합니다.
Assert(string message, string context, string file, string function, int line) 컨텍스트 및 파일, 함수 및 줄 정보를 사용하여 테스트 어설션을 기록합니다.
Bug(string bugDatabase, int bugId) 알려진 버그 번호를 기록합니다.
Bug(string bugDatabase, int bugId, string context) 컨텍스트를 사용하여 알려진 버그 번호를 기록합니다.
Comment(IFormatProvider 공급자, 문자열 형식, params object[] args) 문화권별 서식 지정 정보 공급자, 형식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 주석을 기록합니다.
Comment(string message) 테스트 주석 기록
Comment(string format, object arg0) 서식 문자열과 개체를 사용하여 형식을 지정하여 테스트 주석을 기록합니다.
Comment(string format, params object[] args) 서식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 주석을 기록합니다.
Comment(string message, string context) 컨텍스트를 사용하여 테스트 주석 기록
EndGroup(string groupName) 테스트 그룹 또는 특정 테스트의 끝을 기록합니다.
EndGroup(string groupName, string context) 컨텍스트를 사용하여 테스트 그룹 또는 특정 테스트의 끝을 기록합니다.
Error(IFormatProvider 공급자, 문자열 형식, params object[] args) 문화권별 서식 지정 정보 공급자, 형식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 오류를 기록합니다.
Error(string message) 테스트 오류를 기록합니다.
Error(string format, object arg0) 서식 문자열 및 개체를 사용하여 형식을 지정하여 테스트 오류를 기록합니다.
Error(string message, string context) 컨텍스트를 사용하여 테스트 오류를 기록합니다.
Error(IFormatProvider 공급자, 문자열 형식, params object[] args) 서식 문자열과 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 오류를 기록합니다.
Error(string message, string file, string function, int line) 파일, 함수 및 줄 정보를 사용하여 테스트 오류를 기록합니다.
Error(string message, string context, string file, string function, int line) 컨텍스트 및 파일, 함수 및 줄 정보를 사용하여 테스트 오류를 기록합니다.
File(string fileName) 저장할 테스트 파일을 기록합니다. 파일은 WTTRunWorkingDir\WexLogFileOutput(WTTRunWorkingDir이 설정된 경우) 또는 CurrentDirectory\WexLogFileOutput에 저장됩니다.
File(string fileName, string context) 컨텍스트를 사용하여 저장할 테스트 파일을 기록합니다. 파일은 WTTRunWorkingDir\WexLogFileOutput(WTTRunWorkingDir이 설정된 경우) 또는 CurrentDirectory\WexLogFileOutput에 저장됩니다.
MiniDump() 현재 프로세스 미니 덤프를 기록합니다.
Property(string name, string value) 이름/값 속성 쌍을 기록합니다. 값은 xml 형식일 수 있습니다.
Property(string name, string value, string context) 컨텍스트를 사용하여 이름/값 속성 쌍을 기록합니다. 값은 xml 형식일 수 있습니다.
Result(TestResult testResult) 테스트 결과를 기록합니다.
Result(TestResult testResult, string comment) 연결된 주석을 사용하여 테스트 결과를 기록합니다.
Result(TestResult testResult, string comment, string context) 컨텍스트를 사용하여 연결된 주석을 사용하여 테스트 결과를 기록합니다.
StartGroup(string groupName) 테스트 그룹 또는 특정 테스트의 시작을 기록합니다.
StartGroup(string groupName, string context) 컨텍스트를 사용하여 테스트 그룹 또는 특정 테스트의 시작을 기록합니다.
Warning(IFormatProvider 공급자, 문자열 형식, params object[] args) 문화권별 서식 지정 정보 공급자, 형식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 경고를 기록합니다.
Warning(string message) 테스트 경고를 기록합니다.
Warning(string format, object arg0) 형식 문자열 및 서식에 대한 개체를 사용하여 테스트 경고를 기록합니다.
Warning(string format, params object[] args) 서식 문자열 및 서식을 지정할 개체가 0개 이상 포함된 개체 배열을 사용하여 테스트 경고를 기록합니다.
Warning(string message, string context) 컨텍스트를 사용하여 테스트 경고를 기록합니다.
Warning(string message, string file, string function, int line) 파일, 함수 및 줄 정보를 사용하여 테스트 경고를 기록합니다.
Warning(string message, string context, string file, string function, int line) 컨텍스트 및 파일, 함수 및 줄 정보를 사용하여 테스트 경고를 기록합니다.
Xml(string xmlData) xml 데이터를 기록합니다. 올바른 형식인지 확인하기 위한 검사 없습니다.
Xml(string xmlData, string context) 컨텍스트를 사용하여 xml 데이터를 기록합니다. 올바른 형식인지 확인하기 위한 검사 없습니다.

다음은 사용 가능한 관리되는 LogContoller 메서드 목록입니다.

관리되는 LogController 메서드 기능
static void InitializeLogging() 로깅 기능을 초기화합니다.
static void InitializeLogging(String logName) 로깅 기능을 초기화하고 사용하려는 로그 파일의 이름을 지정합니다. 참고: 로그 이름은 WttLogging을 사용하도록 설정한 경우에만 고려됩니다.
static bool IsInitialized() 이 프로세스에 대해 LogController가 초기화되었는지 여부를 반환합니다.
static String GetLogName() InitializeLogging 호출에서 로그에 대해 지정된 이름을 반환합니다(있는 경우).
static void FinalizeLogging() 로깅 기능을 완료합니다.

참고: TAEF 프레임워크 외부에서 WexLogger 의 관리되는 계층을 사용할 때 오류 및 예외를 처리하는 방법에 대한 자세한 내용은 아래의 관리 코드 오류 및 예외 섹션을 참조하세요.

참고: TAEF가 이미 로깅 초기화/완료를 처리하므로 TAEF 프레임워크 외부에서 WexLogger 를 사용하는 경우에만 InitializeLogging/FinalizeLogging을 호출해야 합니다.

참고: 스크립트에서 WexLogger 를 사용하는 경우 로깅 기능을 초기화/완료할 필요가 없습니다.

다음은 사용 가능한 관리형 RemoteLogContoller 메서드 목록입니다.

관리되는 RemoteLogController 메서드 기능
static String GenerateConnectionData() 자식 프로세스가 부모 프로세스에 다시 로그온할 수 있도록 부모 및 자식 프로세스 내에서 사용해야 하는 연결 데이터를 생성합니다.
static String GenerateConnectionData(string machineName) 원격 머신에서 자식 프로세스를 시작할 때 사용됩니다. 자식 프로세스가 부모 프로세스에 다시 로그온할 수 있도록 부모 및 자식 프로세스 내에서 사용해야 하는 연결 데이터를 생성합니다.
static void InitializeLogging(String connectionData) 자식 프로세스가 다시 로그온할 수 있도록 부모 프로세스 내에서 로깅 기능을 초기화합니다.

참고: 원격 로깅에 대한 자세한 내용은 아래 의 자식 프로세스에서 원격 로깅 섹션을 참조하세요.

자식 프로세스에서 원격 로깅

WexLogger는 하나 이상의 자식 프로세스가 단일 부모 프로세스에 다시 로그백하는 기능을 제공하므로 단일 로그 파일 내에서 통합된 테스트 결과가 생성됩니다.

자식 프로세스는 부모 프로세스와 동일한 컴퓨터에서 실행되거나 다른 컴퓨터에서 원격으로 실행될 수 있습니다. 원격 머신 로깅이 작동하려면 원격 컴퓨터의 모든 자식 프로세스에 대한 TCP 방화벽 제외를 추가하는 것은 WexLogger 클라이언트의 입니다. 그러나 자식 프로세스가 부모와 동일한 컴퓨터에서 실행되는 경우 방화벽 수정이 필요하지 않습니다.

각 원격 로깅 연결을 설정하려면 다음 단계가 필요합니다.

부모 프로세스

  1. RemoteLogController::GenerateConnectionData()를 호출하여 두 프로세스에서 로깅 연결을 시작하는 데 사용해야 하는 연결 데이터를 생성합니다.

    참고: 이 호출의 반환 값을 검사 합니다.

        NoThrowString connectionData;
        Throw::IfFailed(RemoteLogController::GenerateConnectionData(connectionData));
    
    
  2. 연결 데이터를 환경 블록에서 설정하거나 명령 프롬프트에서 인수로 전달하여 자식 프로세스와 연결 데이터를 전달합니다. 예를 들면 다음과 같습니다.

    WexLogger에서 이해하는 명령 프롬프트에서 명명된 인수로 전달합니다.
    /wexlogger_connectiondata=[연결 데이터]

    참고: 이 옵션을 사용하는 경우 아래 자식 프로세스 섹션의 1단계 가 필요하지 않습니다 .

    WexLogger에서 이해하는 명명된 환경 변수로 전달합니다.
    [YourAppName_cmd]=/wexlogger_connectiondata=[연결 데이터]

    참고: 이 옵션을 사용하는 경우 아래 자식 프로세스 섹션의 1단계 가 필요하지 않습니다 .

    임의의 형식(다른 명령 매개 변수, 환경 변수 등)으로 프로세스에 전달
    참고: 이 옵션을 사용하는 경우 아래 자식 프로세스 섹션의 1단계 필요합니다.

    참고: 편의상 "/wexlogger_connectiondata=" 값은 네이티브 및 관리형 RemoteLogControllers 모두에서 상수로 정의됩니다.

    • LogController.h의 WEX::Logging::c_szWexLoggerRemoteConnectionData

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

  3. 연결 데이터를 사용하여 자식 프로세스 시작

  4. RemoteLogController::InitalizeLogging([1단계에서 만든 연결 데이터])을 호출합니다. 자식 프로세스가 시작된 후 이 호출은 자식이 적시에 LogController::InitializeLogging()을 호출하지 않는 경우 시간이 초과되기 때문에 이 호출을 수행해야 합니다.

    참고: 이 호출의 반환 값을 검사 합니다.

    // ...launch child process with connection data...
    Throw::IfFailed(RemoteLogController::InitializeLogging(connectionData));
    
  5. 자식 프로세스 등을 기다립니다.

자식 프로세스

  1. 연결 데이터가 WexLogger가 이해하는 명령 프롬프트에서 명명된 인수로 자식 프로세스에 전달 되지 않은 경우(위의 2단계 참조) 다음과 같이 환경 변수를 설정해야 합니다.

    [YourAppName_cmd]=/wexlogger_connectiondata=[연결 데이터]

    예를 들면 다음과 같습니다.

    // App name is mytestapp.exe
    ::SetEnvironmentVariable(L"mytestapp_cmd", String(c_szWexLoggerRemoteConnectionData).Append(connectionData));
    
  2. LogController::InitializeLogging()을 호출하여 이 프로세스에 대한 로깅을 초기화합니다. 내부적으로 위의 1단계(또는 부모 프로세스 섹션의 2단계)에서 설정된 환경 변수를 활용하여 부모 프로세스에 대한 로깅 연결을 다시 시작합니다.

  3. 로그 등; 모든 추적은 부모 프로세스로 다시 전송됩니다.

  4. LogController::FinalizeLogging()을 호출하여 이 프로세스에 대한 로깅을 완료합니다.

테스트 결과 결정

테스트 사례의 의도된 결과(Log::Result())를 명시적으로 명시하기 위해 제공되는 메서드가 있지만 대부분의 경우 테스트 사례에서 이 메서드를 사용할 필요가 없습니다.

예를 들어 테스트 사례가 Log::Result()를 명시적으로 호출하지 않고 오류를 기록 하지 않는 경우( Log::Error()를 통해) 기본적으로 통과 테스트 사례로 간주됩니다. 오류를 기록 하면 실패한 테스트 사례입니다.

그러나 테스트 사례에서Log::Result(TestResults::TestPassed)를 명시적으로 호출하지만 테스트 사례 내에서 오류를 기록하는 경우에도 테스트 내에서 오류가 발생했기 때문에 테스트는 실패로 계산됩니다.

TAEF 프레임워크 내에서 다른 기본 테스트 결과로 테스트에 태그를 지정하여 이 동작을 재정의할 수 있습니다. 이에 대한 자세한 내용은 "TAEF 테스트 작성" 문서에서 찾을 수 있습니다.

또한 선택한 기본 테스트 결과와 함께 사용자 고유의 테스트 그룹/테스트 사례에 대해 Log::StartGroup() 을 명시적으로 호출하여 이 동작을 재정의할 수도 있습니다.

WTT 로그 생성

WexLogger를 통해 WTT 로그를 생성하는 세 가지 메서드가 있습니다. 모두 실행 디렉터리 또는 경로에 WttLog.dll 있어야 합니다.

  • wtt 클라이언트가 설치된 랩에서 실행하는 경우 wtt 로그가 자동으로 생성됩니다. 이는 WexLogger가 랩 환경에만 존재해야 하는 두 개의 환경 변수인 'WttTaskGuid'와 'WTTRunWorkingDir'의 존재를 찾기 때문입니다. 이 두 가지가 모두 있는 경우 wtt 로깅이 자동으로 사용하도록 설정됩니다.

  • 랩 환경 외부에서 TAEF 내에서 실행되는 경우 명령 프롬프트에서 /enablewttlogging을 테스트 사례에 전달합니다. 예제:

    te my.test.dll /enablewttlogging
    
  • TAEF 프레임워크 외부에서 WexLogger를 사용하고 있고 랩 환경에서 실행되고 있지 않은 경우 LogController::InitializeLogging()을 호출하기 전에 이 옵션을 포함하도록 YOUR_PROCESS_NAME>_CMD 환경 변수를 설정<해야 합니다. 예제:

    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:<새 디바이스 문자열>
WttLogger를 초기화할 때 WexLogger에서 사용하는 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
실패 WTT_TESTCASE_RESULT_FAIL

로거 종속성

네이티브 C++ 로거(Wex.Logger.dll)는 Wex.Common.dllWex.Communication.dll따라 달라집니다.

관리되는 로거(Wex.Logger.Interop.dll)는 Wex.Logger.dll,Wex.Common.dllWex.Communication.dll에 따라 달라집니다.

또한 Wtt 로깅을 사용하는 경우WttLog.dll필요합니다.

추가 오류 데이터

오류가 기록되는 경우 WexLogger에서 오류 자체 외에도 다음 항목 중 하나 이상을 포함하도록 설정할 수 있습니다.

  • 미니 덤프
  • ScreenCapture
  • StackTrace
te my.test.dll /minidumponerror
te my.test.dll /screencaptureonerror /stacktraceonerror

이러한 옵션 중 하나 이상을 사용하도록 설정하면 Log::Error()가 호출될 때마다 추가 출력이 표시됩니다.

참고: TAEF 프레임워크 외부에서 WexLogger를 사용하는 경우 LogController::InitializeLogging()을 호출하기 전에 이러한 옵션을 포함하도록 YOUR_PROCESS_NAME>_CMD 환경 변수를 설정<해야 합니다. 예제:

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

C++ 오류 처리

테스트 사례 작성자가 각 Log API 호출에 대한 반환 값을 확인하는 부담으로부터 보호하기 위해 WexLogger는 선택적 콜백 메커니즘을 사용하여 예기치 않은 오류 조건을 보고합니다. WexLoggerErrorCallback 함수입니다. WexLogger의 initializaiton(LogController::InitializeLogging()을 통해) 클라이언트는 WexLogger 내에서 예기치 않은 오류 조건이 발생하는 경우 호출할 WexLoggerErrorCallback 함수를 지정하도록 선택할 수 있습니다. WexLoggerErrorCallback 함수는 다음 서명을 사용해야 합니다.

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

WexLoggerErrorCallback 함수의 일반적인 용도는 오류 메시지를 콘솔에 쓰는 것입니다(테스트 도구가 콘솔 애플리케이션인 경우). 예를 들어 TAEF 프레임워크는 WexLogger의 클라이언트이며 WexLogger 오류가 발생할 때 콘솔에 빨간색 텍스트를 쓰는 WexLoggerErrorCallback 을 구현합니다.

.NET 4.0 호환성

Wex.Logger.Interop은 NetFx 2/3/3.5 이진 파일로 컴파일되므로 NetFx 2/3/3.5 및 NetFx 4 프로세스 모두에 로드할 수 있습니다. 이를 통해 TAEF는 NetFx 2 위의 모든 관리되는 어셈블리를 실행할 수 있습니다. TAEF 외부에서 Wex.Logger를 사용하는 경우 NetFx 2/3/3.5 이진 파일을 프로세스에 로드하도록 NetFx 4 런타임을 구성하기 위해 exe에 대한 구성 파일을 추가해야 합니다. 구성 파일에는 다음이 포함되어야 합니다.

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

관리 코드 오류 및 예외 처리

Log API 호출에 대한 반환 값을 확인하는 부담으로부터 테스트 사례 작성자를 보호하기 위해 WexLogger의 관리되는 계층은 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을 throw합니다. 이렇게 하면 오류에 대한 자세한 정보가 제공되고 테스트 실행이 시작되기 전에 중단될 수도 있습니다. 테스트 사례 작성자는 이러한 예외를 catch하는 것에 대해 걱정할 필요가 없습니다. WexLogger initializaiton/completion 중에만 예상/처리해야 합니다.