손대지 않고 구린내 나는 벌레를 재현하다

구린내 나는 벌레 손에서 자동으로 복원하고 싶어요.


최근에 잘못된 학과의 issue가 많이 붕괴되어 이런 일을 많이 했습니다.
  • 손 옆에 있는 단말기로 구린내 나는 벌레 재현
  • 코드 수정
  • 터미널에서 벌레가 사라졌는지 확인
  • 각종 조건(OS별 등)에서 빈대 소멸 여부를 확인
  • PullRequest
  • 보내기
    특히 빈대 재현 프로그램.
    문자 입력(로그인 처리 등) 같은 것이 있으면 반복해서 입력하기 어렵다.
    그리고 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.py
    from 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에는 다음 두 개의 화면이 표시됩니다.
  • 기록 대상 단말기의 화면 캡처(왼쪽)
  • 진행 중인 터미널 작업의 로그(오른쪽)
  • 그럼 몽키 리코더에 기록하고 싶은 조작을 하세요.
    MonkeyRecorder의 주요 작업은 다음과 같습니다.
  • 헤드셋: Monkey Recorder의 화면을 클릭하여 캡처한 임의의 위치
  • 문자 입력: Monkey Recorder의 TypeSomething를 누르고 입력하고 싶은 문자
  • 를 입력합니다.
  • 교환: Monkey Recorder의 Fling를 누르고 교환 방향의 정보를 입력
  • MonkeyRecorder의 작업은 터미널에서 수행됩니다.
    다음 그림과 같이 작업 로그가 오른쪽 영역에 추가됩니다.

    기록하고 싶은 작업이 끝나면 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)'섹션을 조정하십시오.

    좋은 웹페이지 즐겨찾기