UI 테스트를 진행하다 보면 Timeout Exception 오류로 테스트가 중단되는 경우가 많은데,
APPIUM Log만으로는 단순하게 UI 오류인지, 심각한 Crash 오류인지 식별하기가 어렵다.
개발자에게 전송할 로그를 포착하기 위해 로그캣창을 보고 있다가 로그 추출의 자동화가 굉장히 시급하다는 생각이 들었다. 역시 사람은 눈 앞에 고생이 닥쳐오면, 뇌가 활성화되는 것 같다.
get_log 매소드
똑똑한 우리의 APPIUM은 로그를 불러오는 get_log 매소드를 지원한다.
하지만, 역시 아예 떠먹여주지는 않는 APPIUM은 나를 또 공부시킨다.
get_log 매소드는 log type 파라미터를 요구한다.
이 log type은 플랫폼마다 제공되는 로그가 다르기 때문에 아주 다양한 값들이 들어갈 수 있다.
그 중에서 내가 필요한 부분은 logcat이기 때문에 다음과 같이 적어준다.
logs = driver.get_log('logcat') # Only Android platform
'여기서 print(logs)를 하면 logcat이 출력되겠지?'
친절하게 공부를 요구하는 APPIUM인데, 당연히 안된다.
리스트를 문자열로 변환
get_log는 리스트 형식의 output을 내는데,
이를 가독성 좋은 문자열 형태로 변환하기 위해선 다음과 같은 변환이 필요하다.
logs = driver.get_log('logcat')
logs_message = '\n'.join(list(map(lambda log: log['message'], logs)))
# Tip ! 로그 파일로 저장하기
file = open(filepath + filename + '.log', 'w')
file.write(logs_message)
그렇다면,
Q. 내가 원하던 Crash 로그가 발생 했을 때 로그를 추출하려면 어떻게 해야 될까 ?
A. 리스트 형식인 로그를 차례로 대입하여 Crash 로그가 있는지 확인한다.
logs = driver.get_log('logcat')
logs_message = list(map(lambda log: log['message'], logs))
for message in logs_message:
if 'Crash' in message:
break
file = open(filepath + filename + '.log', 'w')
file.write('/n'.join(logs_message))
그리하여, 테스트를 열심히 하다가 Crash Log가 나면
똑똑하게 해당 세션의 로그 파일을 저장해주는 자동화 프로그램 구축에 성공했다.
'Test Automation > APPIUM' 카테고리의 다른 글
APPIUM 설치부터 실행까지 (0) | 2023.05.12 |
---|---|
APPIUM 스크롤 (0) | 2022.01.11 |
APPIUM TimeoutException 예외처리 (0) | 2020.12.08 |
APPIUM Desired Capabilities 설정 방법 (0) | 2020.12.06 |
APPIUM Selenium with Python (0) | 2020.12.06 |