내 jroid를위한 내 jroid 테스트를 실행하고 있습니다. 테스트가 실패 할 경우 스택 트레이스 만 볼 수 있는데, 때로는 내 테스트가 실패한 이유를 이해하는 데 도움이되지 않습니다. 로컬 컴퓨터에서 실행할 때 테스트를 디버그 할 수 있도록 코드에 일부 로그를 추가했지만 테스트 결과가 잘못되었을 때 Jenkins 콘솔 출력에서 로그를 볼 수 있기를 원했습니다.jenkins의 콘솔 로그에 테스트 로그가 표시되는 방법
0
A
답변
0
낡은 질문이지만 해결책을 찾았습니다. Log
클래스를 사용자 정의 클래스 (Logger
)로 감 쌉니다. LOG_LINES
으로 CopyOnWriteArrayList 및 LogLine
로그 데이터의 홀더
private static void log(LOG logLevel, Object message) {
LOG_LINES.add(new LogLine(logLevel, tag, content));
switch (logLevel) {
case ERROR:
Log.e(tag, content);
break;
case WARNING:
Log.w(tag, content);
break;
case INFO:
Log.i(tag, content);
break;
case DEBUG:
Log.d(tag, content);
break;
case VERBOSE:
Log.v(tag, content);
break;
}
}
: 같은
public static void d(String tag, String message) {
log(LOG.DEBUG, tag, message);
}
그런 다음 로그인 외모 :
그런 다음 내가 좋아하는 로그 방법을 포장.마지막으로 사용자 정의 테스트 Runner
을 사용하여 로그가 Jenkins (HTML 보고서)에 표시됩니다. 간단하게 테스트 클래스에 주석 @RunWith(MyLoggingTestRunner.class)
을 추가
public class MyLoggingTestRunner extends BlockJUnit4ClassRunner {
public MyLoggingTestRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
//override to override errors with logs
Description description = describeChild(method);
if (method.getAnnotation(Ignore.class) != null) {
notifier.fireTestIgnored(description);
} else {
run(methodBlock(method), description, notifier);
}
}
protected void run(Statement statement, Description description, RunNotifier notifier) {
EachTestNotifier eachNotifier = new EachTestNotifier(notifier, description);
eachNotifier.fireTestStarted();
try {
statement.evaluate();
} catch (AssumptionViolatedException e) {
eachNotifier.addFailedAssumption(e);
} catch (Throwable e) {
String throwableMessage = e.getMessage();
String message = "\nLast logs :\n" + logsToString() + "\n\nStackTrace :\n" + e.getClass() + (TextUtils.isEmpty(throwableMessage) ? "" : ":" + throwableMessage);
try {
Field detailMessage = Throwable.class.getDeclaredField("detailMessage");
detailMessage.setAccessible(true);
detailMessage.set(e, message);
} catch (Exception e1) {
}
eachNotifier.addFailure(e);
} finally {
eachNotifier.fireTestFinished();
}
}
private static String logsToString() {
List<LogLine> logs = Logger.getLogs();
StringBuilder logBuilder = new StringBuilder();
String sep = "";
for (LogLine logLine : logs) {
logBuilder.append(sep).append(logLine.toString());
sep = "\n";
}
return logBuilder.toString();
}
}
나는 그것이 내가 간단한 방법으로 그것을 설명하려고 내 코드를 적용하기 때문에 작동 바랍니다.
관련 문제
- 1. phantomJS의 자동화 된 테스트 : 콘솔 로그에 액세스하는 방법
- 2. 로그가 터미널에 표시되는 것을 중지하는 방법
- 3. 예외 로그가 오류 로그에 기록되지 않음
- 4. jenkins의 콘솔 출력 언어 변경
- 5. Jenkins의 테스트 케이스 기록
- 6. Jenkins의 Junit 테스트 중단
- 7. Jenkins의 clojure 테스트 실행
- 8. Windows Azure에서 진단 로그에 이벤트 로그가 없습니까?
- 9. 레일이 애플리케이션 로그가 아닌 아파치 로그에 로깅
- 10. Chrome 확장 프로그램 - 콘솔 로그가 실행되지 않음
- 11. Jenkins의 성능 테스트 결과를 표시하는 방법
- 12. xcode에서 콘솔 로그가 지워지는 것을 방지합니다.
- 13. Jenkins의 Karma 단위 테스트 게시
- 14. Jenkins의 특정 실패 테스트 신청
- 15. Gerrit/Jenkins의 테스트 실패 처리
- 16. Jenkins의 테스트 결과를 야간에 QC
- 17. Jenkins의 작업 공간에 Jenkins 콘솔 출력을 작성하는 방법
- 18. TensorFlow 로그가 콘솔 및 파일에 표시되지 않습니다.
- 19. phonegap 안드로이드 콘솔 로그가 작동하지 않습니다.
- 20. 봄 부팅 콘솔 로그가 나타나지 않습니다.
- 21. js 함수의 콘솔 로그가 정의되지 않음을 나타냅니다.
- 22. 이클립스가 응답하지 않고 로그에 오류가 표시되는 경우
- 23. Javascript 콘솔 로그가 if 문을 false로 평가 한 후 지우기
- 24. 특정 태그로 실패한 테스트 수 표시 (Jenkins의 Ruby, Cucumber)
- 25. Java 콘솔 로그에 대한 프로그래밍 방식의 액세스
- 26. 콘솔 로그에 액세스 (Windows XP를 사용하는 cmd.exe)
- 27. 자바 스크립트 변수는 콘솔 로그에 정의되지
- 28. 기본 로그에 대한 색상이있는 Xcode 디버그 콘솔
- 29. 모든 응용 프로그램 로그가 uwsgi 로그에 기록되는 이유는 무엇입니까?
- 30. 액세스 방법 노드 콘솔 로그
로컬 환경에서 테스트를 실행할 때 로그가 표시됩니까? (IDE 콘솔 또는 터미널) –
예. 내 안드로이드 스튜디오 안드로이드 모니터 콘솔에서 볼 수 있습니다. – Benjo
문제가 무엇인지 알기는 어렵지만, 해결 방법은 로그 파일에 로그인 한 다음이 파일을 "cat/type"으로 인쇄하는 것입니다. –