손대지 않고 구린내 나는 벌레를 재현하다
구린내 나는 벌레 손에서 자동으로 복원하고 싶어요.
최근에 잘못된 학과의 issue가 많이 붕괴되어 이런 일을 많이 했습니다.
특히 빈대 재현 프로그램.
문자 입력(로그인 처리 등) 같은 것이 있으면 반복해서 입력하기 어렵다.
그리고 Monkey Recorder와 Monkey Runner를 사용하여
반복되는 터미널 조작을 스크립트화하려고 시도합니다.
이번에는 그 방법을 써 보겠습니다.
담화의 절차는 다음과 같다.
- MonkeyRecorder를 사용하여 터미널 작업 로깅
MonkeyRunner를 통한 터미널 작업 재현
MonkeyRecorder를 사용한 터미널 작업 로깅
단말기의 준비
우선 고장난 터미널을 재현할 준비를 한다.
실기로 진행하면 실기용 USB를 PC에 연결하면 된다.
시뮬레이터라면 시뮬레이터를 시작하십시오. (이하 시뮬레이터 시동 참고 코드라고 약칭)ls ~/.android/avd
# Nexus_5_API_22_x86.avd Nexus_5_API_22_x86.ini metrics
<path_to_android-sdks>/tools/emulator -avd Nexus_5_API_22_x86
대상 프로그램을 시작합니다. (수동으로 시작해도 ok)# adb shell am start -n <package名>/<対象Activityクラス名>
$ adb shell am start -n com.ikota.flickrclient/.ui.PopularListActivity
MonkeyRecorder를 통한 작업 로깅
MonkeyRecorder의 시작은 스크립트에 의해 수행됩니다.
다음 스크립트run_monkeyrecorder.py
를 손에 넣으십시오.
run_monkeyrecorder.pyfrom com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner.recorder import MonkeyRecorder
device = MonkeyRunner.waitForConnection()
MonkeyRecorder.start(device)
run_monkeyrecorder.py
이쪽gist에도 있어요.
(이하~/Desktop/run_monkeyrecorder.py
이 파일에 준하여 조작)
그럼 Monkey Recorder를 시작합니다.$ <android-sdk path>/tools/monkeyrunner ~/Desktop/run_monkeyrecorder.py
를 시작하면 다음 화면 오른쪽에 있는 창이 표시됩니다.
Monkey Recorder에는 다음 두 개의 화면이 표시됩니다.
ls ~/.android/avd
# Nexus_5_API_22_x86.avd Nexus_5_API_22_x86.ini metrics
<path_to_android-sdks>/tools/emulator -avd Nexus_5_API_22_x86
# adb shell am start -n <package名>/<対象Activityクラス名>
$ adb shell am start -n com.ikota.flickrclient/.ui.PopularListActivity
from com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner.recorder import MonkeyRecorder
device = MonkeyRunner.waitForConnection()
MonkeyRecorder.start(device)
$ <android-sdk path>/tools/monkeyrunner ~/Desktop/run_monkeyrecorder.py
MonkeyRecorder의 주요 작업은 다음과 같습니다.
TypeSomething
를 누르고 입력하고 싶은 문자Fling
를 누르고 교환 방향의 정보를 입력다음 그림과 같이 작업 로그가 오른쪽 영역에 추가됩니다.
기록하고 싶은 작업이 끝나면 Monkey Recorder에서
Export Actions
를 클릭합니다.임의의 위치에서 로그 파일을 만드십시오.
(이하,
~/Desktop/bug_reproduce.txt
에서 제작한 것으로 진행)MonkeyRunner를 통한 터미널 작업 재현
그 전에...
몽키 리코더로 만든 로그 파일은 몽키 런너에게 고스란히 전달될 수 없다.
스크립트로 변환해야 합니다.
(왼쪽은 원본 로그 파일, 오른쪽은 스크립트)
이번에 이 변환 조작을 하는 스크립트monkey_converter.py
를 만들었기 때문에
이걸로 스크립트 재현해.
스크립트를 여기에 놓으세요. gist
(이하, 변환 스크립트는 ~/Desktop/monkey_converter.py
로 설정됨)
사용 방법은 다음과 같다.cd ~/Desktop
# python monkey_converter.py <log file> <script_name>
$ python monkey_converter.py bug_reproduce.txt bug_reproduce.py
이렇게 해서 ~/Desktop/bug_reproduce.py
라는 이름으로 스크립트를 재현했다.
반복 스크립트 실행
다음에 다음 명령으로 스크립트를 재현하면 터미널에서 기록된 동작을 실행합니다.$ <path to android-sdks>/tools/monkeyrunner bug_reproduce.py
코드를 수정한 후 위의 명령만 실행하면
수정이 잘 됐는지 확인할 수 있어 편리하다.
최후
이 재현 스크립트는 터미널의 좌표계에 따라 달라지기 때문에
제작된 터미널과 다른 터미널에서 예상대로 실행되지 않도록 주의하십시오.
그러나'실제 컴퓨터의 넥서스 5로 재현 스크립트를 만들고 넥서스 5의 시뮬레이터로 재현 스크립트를 실행한다'는 것은 가능하다.
개발 애플리케이션의 로그인/로그오프 처리를 스크립트화할 경우
이메일 주소 + 비밀번호 + 로그인 처리를 자동으로 입력할 수 있습니다.
나는 개인적으로 매우 편리하다고 생각한다.
추기
MonkeyRecorder의 로그 파일에서 스크립트 재현으로 변환
다음은 monkey_converter.py
에서 진행된 일을 간단하게 적었다.
변환 스크립트에서 하는 일
변환 스크립트에서 다음 변환을 수행합니다.TOUCH|{'x':864,'y':152,'type':'downAndUp',}
↓device.touch(864, 152, MonkeyDevice.DOWN_AND_UP)
print 'Executing : device.touch(864, 152, MonkeyDevice.DOWN_AND_UP)'
MonkeyRunner.sleep(5.0)
원래 위에 한 줄이면 충분한데,
두 번째 줄의 로그에 있는 코드와
3행ACTION_INTERVAL_IN_SECONDS
에 설정된 초(기본값 5초) 대기 코드
추가했어.
세 번째 줄의 코드가 없으면 터미널에서 MonkeyRunner에서 보내는 명령을 실행할 때
다음 명령이 발송되어 때로는 기대하는 동작이 될 수 없다.
특히 시뮬레이터로 재현하려면 이 초를 5초간 확대하는 것을 권장한다.
터미널 조작 시기가 맞지 않을 때
스크립트를 만든'MonkeyRunner.sleep(5.0)'섹션을 조정하십시오.
Reference
이 문제에 관하여(손대지 않고 구린내 나는 벌레를 재현하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikota/items/ef6bdb4dad6ab9ba912a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd ~/Desktop
# python monkey_converter.py <log file> <script_name>
$ python monkey_converter.py bug_reproduce.txt bug_reproduce.py
$ <path to android-sdks>/tools/monkeyrunner bug_reproduce.py
이 재현 스크립트는 터미널의 좌표계에 따라 달라지기 때문에
제작된 터미널과 다른 터미널에서 예상대로 실행되지 않도록 주의하십시오.
그러나'실제 컴퓨터의 넥서스 5로 재현 스크립트를 만들고 넥서스 5의 시뮬레이터로 재현 스크립트를 실행한다'는 것은 가능하다.
개발 애플리케이션의 로그인/로그오프 처리를 스크립트화할 경우
이메일 주소 + 비밀번호 + 로그인 처리를 자동으로 입력할 수 있습니다.
나는 개인적으로 매우 편리하다고 생각한다.
추기
MonkeyRecorder의 로그 파일에서 스크립트 재현으로 변환
다음은
monkey_converter.py
에서 진행된 일을 간단하게 적었다.변환 스크립트에서 하는 일
변환 스크립트에서 다음 변환을 수행합니다.
TOUCH|{'x':864,'y':152,'type':'downAndUp',}
↓device.touch(864, 152, MonkeyDevice.DOWN_AND_UP)
print 'Executing : device.touch(864, 152, MonkeyDevice.DOWN_AND_UP)'
MonkeyRunner.sleep(5.0)
원래 위에 한 줄이면 충분한데,두 번째 줄의 로그에 있는 코드와
3행
ACTION_INTERVAL_IN_SECONDS
에 설정된 초(기본값 5초) 대기 코드추가했어.
세 번째 줄의 코드가 없으면 터미널에서 MonkeyRunner에서 보내는 명령을 실행할 때
다음 명령이 발송되어 때로는 기대하는 동작이 될 수 없다.
특히 시뮬레이터로 재현하려면 이 초를 5초간 확대하는 것을 권장한다.
터미널 조작 시기가 맞지 않을 때
스크립트를 만든'MonkeyRunner.sleep(5.0)'섹션을 조정하십시오.
Reference
이 문제에 관하여(손대지 않고 구린내 나는 벌레를 재현하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ikota/items/ef6bdb4dad6ab9ba912a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)