2017-01-05 14 views
3

우리 젠킨스 CI 슬레이브에 내 iOS 앱에 UI 테스트를 실행, UI를 잘못 내 테스트가 실패 할 때 응용 프로그램 로그를 보는 방법. 로컬에서는 동일한 UI가 예상대로 작동하고 테스트가 통과합니다.UI 테스트

나는 이것을 알아낼 수 없었다 그것은 원격 시스템에 그대로 나는 그것을 디버깅 할 수 없습니다. 따라서 로깅을 추가하여 UI가 원격 젠킨스 노예에서 잘못 표시되는 이유를 파악하기 위해 앱에서 어떤 결정을 내리고 있는지 확인하고 싶습니다.

테스트 로그 출력 (NSLog를 통해) 응용 프로그램에서 로그 출력을 포함하지 않으며, 나는 응용 프로그램에서 파생 된 데이터 출력 폴더에있는 .xcactivitylog 파일에 NSLog 전화를 문자열 중 하나를 찾을 수 있습니다.

그것이 UI 테스트에 의해 실행되고있을 때 나는 내 응용 프로그램에서 내 로깅 출력을 찾을 수 있습니다

? 이것은 iOS 9.3 시뮬레이션 장치를 실행하는 Xcode 8.2입니다.

+1

같은 로그를 액세스 할 수 있습니다 당신이 시도 되세요 이? http://stackoverflow.com/questions/10165641/how-can-i-get-the-console-logs-from-the-ios-simulator –

+0

시뮬레이터의 UUID를 얻으면 정확히 내가 원하는 것을 얻을 수 있습니다. 고맙습니다! –

+0

이 정확한 링크입니다 : http://stackoverflow.com/a/10165649/71877 –

답변

-1

저는 Bugfender이라는 제품의 공동 창업자입니다. 로그를 콘솔에 출력하고 서버에 업로드하는 BFLog 기능을 제공합니다. 장치를 컴퓨터에 연결할 필요없이 항상 로그를 확인하십시오. 우리는 또한 모든 사용자 인터페이스 상호 작용을 자동으로 수집하므로 가장 쉬운 방법으로 문제를 찾을 수 있습니다. 아무것도하지 않고 모든 테스트 세션의 로그를 얻을 수 있기 때문에 나중에 테스트가 실패 무엇을 할 때 잘못된 저희 사이트에서 확인할 수 있도록 우리의 도구의 주요 용도

하나는, 자동화 테스트를위한 것입니다.

+0

감사 include_simulator_logs'하지만, 내 필요를 돌보고. –

2

다음 솔루션은 약간 해키하지만 장치에서 실행시에도 로그를 얻을 수 있습니다.

Logger.h

#define Debug(...) _Debug(__VA_ARGS__) 

void _Debug(NSString *format, ...); 

void _Debug(NSString *format, ...) 
{  
    format = [NSString stringWithFormat:@"[Debug]: %@", format]; 
    va_list args; 
    va_start(args, format); 
    NSLogv(format, args); // logs to the console 

    NSString *logMessage = [[NSString alloc] initWithFormat:format arguments:arguments]; 
    UIApplication *application = [UIApplication sharedApplication]; 
    UIWindow *window = [application keyWindow]; 
    window.accessibilityValue = [NSString stringWithFormat:@"%@\n%@", window.accessibilityValue, logMessage]; 

    va_end(args); 
} 

Logger.m는 그 다음 UI 테스트에서, 나는이

+ (NSString *)logs 
{ 
    XCUIElementQuery *windowQuery = [[[XCUIApplication alloc] init] windows]; 
    return [windowQuery elementAtIndex:0].value; 
} 
+0

그래, 그것은 가치를 UITest에 다시 전달하는 한 가지 방법입니다. – River2202